Зависает приложение на базе Struts Hibernate Mysql Tomcat
У меня есть приложение, работающее на Apache 2.2, Tomcat 6, и оно использует Struts Framework, Hibernate Framework. Мы используем Mysql на заднем плане. Мы также взаимодействуем со сторонними серверами для размещения некоторых запросов, которые запрашивает пользователь. Из-за ограничений конфиденциальности я не могу сказать вам точно, что мы делаем, но я могу заверить вас, что мы ничего не настроили, и мы используем самые общие сборки, доступные для Apache, tomcat и т. Д. Мы используем платформу Linux. Многие посетители посещают наш сайт, где они сначала платят, используя платежные шлюзы, а затем покупают продукт. Чтобы купить товар, нам снова приходится заходить на сторонний сайт. Это простой вид электронной коммерции. Проблема в том, что несколько раз сервер зависает. Так как он не отвечает, и когда мы нажимаем на ссылку, которая (я знаю) обслуживается контейнером Tomcat, она не загружается. Вот что мне нужно для помощи:
- Поскольку мой хостинг работает на безголовой платформе Linux, предложите мне хороший инструмент для отладки.
- У нас есть регистрация и мы печатаем трассировку стека почти всех исключений (если они случаются), мы всегда отслеживаем catalina.out, но когда сервер зависает, мы не видим никакой активности на catalina.out. может быть, это может дать кому-то ключ к разгадке.
- У нас отключен show_sql для спящего режима, мы пытались его включить, но этого было недостаточно, чтобы выяснить, зависло ли приложение в запросе. У нас также включен лог slow_sql, но он не показывает каких-либо значительных запросов. Как мы можем проверить, застряло ли мое приложение в запросе?
- Если мое приложение не застряло в запросе, как я могу узнать, где оно застряло?
- Как я могу получить дамп стека Java?
- Каковы возможные способы решения такой проблемы.
Любые предложения приветствуются. Я заранее благодарю всех за чтение моего вопроса и за то время, которое вы посвятите написанию ответа.
1 ответ
Столкнувшись с вашей ситуацией, я бы сделал сброс потока, когда контейнер сервлета "зависает". Дамп потока предоставляет вам список трассировок стека для всех потоков Java в данной JVM.
Создать дамп потока довольно просто:
- Найдите идентификатор процесса Tomcat, например,
ps -ef | grep java
- Отправить SIGQUIT для процесса, например
kill -3 tomcatProcessId
Вы найдете содержимое дампа потока в TOMCAT_HOME/logs/catalina.out
,