2009-05-11 5 views
9

Я отлаживаю утечку памяти в приложении, запущенном на JDK Sun 1.4.2_18. Похоже, что эта версия поддерживает командную строку param -XX: + HeapDumpOnCtrlBreak, которая якобы заставляет JVM сбрасывать кучу, когда она сталкивается с контрольным прерыванием. Как отправить это в фоновый процесс в ящик Linux? Похоже, что сигналы kill - это то, как это должно работать, но я убиваю -l не сообщает ничего, что, очевидно, является комбинацией клавиш Ctrl-Break, по крайней мере, в моем поле Ubuntu.Как отправить Ctrl-Break в запущенный Linux-процесс?

Обновление: я проверил Kill -3 с Sun JDK 1.4.2_18 (_14 был первым, кто сбросил кучу таким образом), и это сработало. Создан файл дампа кучи, и процесс все еще запущен.

ответ

10

kill -QUIT может сделать это (он будет генерировать дамп потока, который генерируется ctrl-break на окнах. Я не пробовал его с помощью опции дампа кучи).

+0

У меня нет linux-бокса с jvm, который поддерживает параметр -XX: + HeapDumpOnCtrlBreak, поэтому не могу проверить это (и я никогда на самом деле не делал этого так не может поручиться, что он работает). – bm212

+0

Я бы предпочел предложение «kill -QUIT», чем «kill -3», хотя они эквивалентны. – ephemient

+0

Я отредактировал его, чтобы сказать kill -QUIT. – bm212

14

Ctrl- \ эквивалент UNIX/Linux Windows Ctrl-Break. Wikipedia также говорит мне, что вы также можете использовать Ctrl-4 или SysRq на виртуальной консоли Linux (думаю, вам понадобится что-то странное для обычного эмулятора терминала для передачи представлений этих нажатий клавиш (поверх ssh/telnet)).

+1

Да, обычно терминал привязан к C- \ для отправки SIGQUIT. Это можно настроить с помощью 'stty quit', и я не уверен, что он по умолчанию используется для всех систем. – ephemient

+0

@ephemient это не всегда, но даже экзотические терминалы, как правило, используют это. Например, мой IBM 3161. http://i.imgur.com/6DejIxY.jpg – Wyatt8740

 Смежные вопросы

  • Нет связанных вопросов^_^