Мое веб-приложение работает на 64-битной Java 6.0.23, Tomcat 6.0.29 (с Apache Portable Runtime 1.4.2), на Linux (CentOS). JAVA_OPTS Tomcat включает в себя -Xincgc, который, как предполагается, поможет предотвратить длинные сборки мусора.
Приложение находится под большой нагрузкой и имеет периодические сбои, и я хотел бы устранить его.
Вот симптом: очень периодически HTTP-клиент отправляет HTTP-запрос в веб-приложение и возвращает пустой ответ.
Приложение не использует базу данных, поэтому это определенно не проблема с соединениями JDBC. Так что я полагаю, что проблема, возможно, одна из: памяти (возможно, длинные сборки мусора), из потоков или из файловых дескрипторов.
Я использовал javamelody для просмотра количества используемых потоков, и кажется, что maxThreads установлен достаточно высоко, чтобы не заканчиваться потоками. Точно так же мы имеем очень большое число доступных файловых дескрипторов.
Приложение использует много памяти. Кажется ли, что память, вероятно, является виновником здесь, или есть что-то еще, что я мог упускать из виду?
Полагаю, моя главная путаница заключается в том, почему сборка мусора может привести к сбою HTTP-запросов. Интуитивно понятно, что я полагаю, что длительная сборка мусора может привести к тому, что выполнение HTTP-запроса может занять много времени, но я не думаю, что длинная сборка мусора приведет к сбою HTTP-запроса.
Дополнительная информация в ответ на комментарии Джона Скита ...
У клиента точно нет времени ожидания. Пустой ответ происходит довольно быстро. Когда происходит сбой, нет данных и нет заголовков HTTP.