В Google App Engine Java может ли один поток в экземпляре мешать другому? - PullRequest
1 голос
/ 30 апреля 2019

В Google App Engine, работающем на Java 8, мы видим, что запросы веб-интерфейса к сервлетам не выполняются:

java.lang.OutOfMemoryError: GC overhead limit exceeded

Но трассировка стека для этой ошибки не связана с сервлетом - вместо этого она выбрасывается из фонаrun() метод отложенной задачи.

Эти задачи обычно выполняются сервлетом отложенной задачи, и, конечно, не сервлетом, где мы видим ошибку 500.

Я чешу свойПодумайте об этом, и вам интересно, если конкретный экземпляр обслуживал и отложенную задачу, и этот запрос сервлета переднего плана, и он зависал из-за указанной выше ошибки GC, может ли он удалить поток сервлета (и, вероятно, другие потоки в том же экземпляре)?) так что все они терпят неудачу с одним и тем же исключением памяти?

Итак, мой вопрос: допускает ли изоляция потоков в экземпляре среды Java App Engine Java 8 ошибку памяти в одном потоке, что приводит к сбою всех потоков втот же самый экземпляр, и если да, будет ли трассировка трасс во всех потоках одинаковой?

Обновление: Просматривая журналы для конкретного идентификатора экземпляра, где это произошло примерно в одно и то же время, я вижу огромное количество других примеров одной и той же трассировки стека, все у разных пользователей, иразные сервлеты внешнего интерфейса, поэтому кажется, что он поддерживает теорию, что весь экземпляр был сломан и трассировка стека, которую мы видим, как-то пересекается с другим потоком в одном и том же экземпляре.

1 Ответ

0 голосов
/ 30 апреля 2019

Нечто подобное произошло со мной на app-engine-python

Я ходил туда-сюда с поддержкой GCP, и, очевидно, виновником была утечка памяти в одной из их библиотек, которая вырубила бы весь мой экземпляр ивсе запросы, которые выполнялись в то время, все умирали вместе.

Так что да, если экземпляр падает, все процессы умрут.

...