Вопрос

У меня есть веб-приложение, которое работает очень медленно и иногда зависает. Это школьное приложение Wicket с отчетами и редактированием, а также сервлет, который используется автоматизированными клиентами для получения / публикации данных через HTTPS.

В напряженные времена, когда происходит много редактирования / выгрузки / загрузки, приложение становится вялым и не отвечает. Я получаю Wicket " PageMap все еще заблокирован " ошибки. Tomcat, кажется, продолжает пыхтеть. Использование памяти управляемо, около 50 млн.

Я настроил YourKit для получения некоторой информации о профилировании, и в течение периода занятости обнаружил, что 81% процессорного времени Tomcat тратится здесь:

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run()
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Object[])
org.apache.jk.common.ChannelSocket.processConnection(MsgContext)
org.apache.jk.common.ChannelSocket.receive(Msg, MsgContext)
org.apache.jk.common.ChannelSocket.read(MsgContext, byte[], int, int)
java.io.BufferedInputStream.read(byte[], int, int)
java.io.BufferedInputStream.read1(byte[], int, int)
java.io.BufferedInputStream.fill()
java.net.SocketInputStream.read(byte[], int, int)
[Wall Time]  java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int)

В этом приложении около 250 клиентов опрашивают сервер по SSL, запрашивая обновления каждые 30 секунд. В большинстве случаев это быстро возвращает пустой ответ. Время от времени происходит бурная работа с БД, и клиенту может быть отправлено целое множество данных (несколько МБ).

Так откуда же эта активность в 81%? Могут ли несколько клиентов с очень медленными соединениями перегружать потоки Tomcat, заставляя его ждать тела входящих запросов?

Кто-нибудь видел что-то подобное, или у вас есть какие-либо советы о том, как проверить / устранить неполадки / исправить это?

Это было полезно?

Решение

Вам следует настроить тестовую среду и попытаться воспроизвести ее с помощью нагрузочного теста.
Таким образом, вы можете изолировать причину. В противном случае есть слишком много факторов.
Кроме того, таким образом вы можете попробовать исправления, не ставя под угрозу свою рабочую среду.

Другие советы

Вероятно, причиной является использование памяти.
Вы должны проверить использование памяти для процесса Java, чтобы увидеть, сколько он получает.
Если этого недостаточно, вам нужно установить параметр Xmx jvm, где бы он ни был установлен для tomcat.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top