LINUX.ORG.RU

Получить стек от вызова функции

 ,


0

1

Есть ли способ приатачится к java процессу и просмотреть стек вызова стандартного методо ?

Тоесть: есть работающий процесс (tomcat), в определеный момент он в тихоря закрывает сокет (java.net.Socket.close()) - нужно узнать (желательно весь стек) кто дергает close(). Реально это сделать без рестарта и/или ребилда ?

★★★★

можно приатачится дебаггером (удаленно, в т.ч. пробросив порт через ssh) и поставть на close брекпоинт, а когда она сработает - увидеть стек в отладчике

однако, лучше озвучить почему тебе хочется себе это видеть

Deleted
()
Ответ на: комментарий от Deleted

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

пытался поднять для этих целей btrace - но както он не заводится ...

zaz ★★★★
() автор топика
Последнее исправление: zaz (всего исправлений: 1)
Ответ на: комментарий от zaz

Можно и без IDE, есть cli тулза по которая может подключаться.
Есть ещё JVisualVM, котрым можно подключится и наделать снапшотов памяти и анализировать. А можно просто мониторить.
Если дело в томкете, то логирования у него много, включить можно и утопится в нем.
Также неплохо бы посмотреть не дамп сети, каким образом отбой идет. Нагрузка какая? А параметры пула входящих? Может он просто давится? Да, и откуда известно «даже не читает» запрос? А какие объективные причины «без IDE»?

FeyFre ★★★★
()
Ответ на: комментарий от zaz

Вот чтото типа такого и нужно, но без IDE и без остановки приложения.

делается дамп запросов с буферов, например в минуту, когда произошел обрыв - дамп сохраняется и прогоняется на тестовой машине

можно посмотреть потроха jdb и попробовать написать ловушку для одного метода

если есть сорцы (ну понятно что не сокета, а обертки над ним) то можно тупо принт стектрейса туда воткнуть

Deleted
()
Ответ на: комментарий от Deleted

Все получилось собрать с при помощи btrace - довольно гибкая штука, нужно только немного док почитать (ничего не пересобирал и даже не перезапускал).

zaz ★★★★
() автор топика
Ответ на: комментарий от FeyFre

Траффик большой, сервер далеко в проде - в таких случаях cli удобней и безопасней. В начале протрекал сам JVM через strace видно что акцептится новый сокет, помещается в epoll, возвращается из пула с флагом - можно читать но томкат не читает а просто вызывает close для єтого дискриптора и в логах тишина.

Вобще тулзу нашел, сейчас добавляю методов для трейса собираю логи, всем спасибо :)

zaz ★★★★
() автор топика

Используй Byteman ( http://byteman.jboss.org/ ), его специально написали именно для таких штук, когда для внедрения отладочного кода томкат пересобирать лениво. Полная гибкость и минимальный оверхед, можно хоть перманентно в продакшене применять.

Вешай правило прямо на сlose, которое будет стектрейс (и все другое что нужно) печатать.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.