Ви плутаєте два різних сміттєзвалища java. kill -3
генерує дамп потоку, а не скидання.
Нитка dump = стеки стежок для кожного потоку у виводі JVM для stdout у вигляді тексту.
Heap dump = вміст пам'яті для виводу процесу JVM у двійковий файл.
Щоб взяти дамп потоку в Windows, CTRL+ BREAKякщо ваш JVM - передній план, це найпростіший спосіб. Якщо у вас є оболонка, схожа на unix в Windows, як-от Cygwin або MobaXterm, ви можете використовувати, kill -3 {pid}
як ви можете, в Unix.
Щоб взяти дамп потоку в Unix, CTRL+ Cякщо ваш JVM - це процес переднього плану або kill -3 {pid}
буде працювати до тих пір, поки ви отримаєте потрібний PID для JVM.
На будь-якій платформі Java постачається з кількома утилітами, які можуть допомогти. Для відвалів ниток jstack {pid}
- це найкраща ставка. http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html
Просто, щоб закінчити питання звалища: Купи сміттєзвалища зазвичай не використовуються, оскільки їх важко інтерпретувати. Але у них є багато корисної інформації, якщо ви знаєте, де / як їх подивитися. Найбільш поширене використання - це пошук витоків пам'яті. Доброю практикою є встановлення в -D
командному рядку java, щоб дамп купи генерувався автоматично на OutOfMemoryError, -XX:+HeapDumpOnOutOfMemoryError
але ви також можете вручну запускати скидання вручну. Найпоширеніший спосіб - використовувати утиліту java jmap
.
ПРИМІТКА: ця утиліта доступна не на всіх платформах. Станом на JDK 1.6, jmap
доступний для Windows.
Приклад командного рядка виглядатиме приблизно так
jmap -dump:file=myheap.bin {pid of the JVM}
Вихід "myheap.bin" не є читабельним для людини (для більшості з нас), і вам знадобиться інструмент для його аналізу. Мої переваги - MAT. http://www.eclipse.org/mat/