在此請大家幫忙傾倒每30秒,我想運行一個shell腳本,它應該採取java的堆轉儲使用kill命令-3每30秒。提前致謝。如何利用java的堆使用kill -3 <pid>命令
回答
您是否嘗試過這樣一個簡單的shell腳本?
while true
do
jmap -dump:file=/tmp/java-`date +%s`.hprof PID_OF_JVM
sleep 30
done
這會爲每個快照創建一個文件梨。對於線程轉儲,您可以使用類似的腳本:
while true
do
jstack PID_OF_JVM > stack-`date +%s`.txt
sleep 30
done
我想你可以使用kill -3
代替jstack
。
+1,但殺死-3不會轉儲堆棧到您從運行控制檯,不像jstack – 2012-07-26 12:41:31
@BrianAgnew:謝謝,我想先用殺'-3'但我認爲這是我的錯,我不能請參閱堆棧轉儲。 – 2012-07-26 12:43:24
殺-3將它轉儲到進程的標準輸出(ERR?),但jstack似乎它轉儲到jstack的控制檯 – 2012-07-26 12:49:26
你可以做的線程使用這樣
public static String getDumpFor(Thread thread) {
StringBuilder sb = new StringBuilder();
if (thread.isAlive()) {
StackTraceElement[] stackTrace = thread.getStackTrace();
sb.append(thread.toString()).append("\n")
.append(String.format(" State - %s,", thread.getState()))
.append(String.format(" Is daemon = %s,", thread.isDaemon()));
for (StackTraceElement s : stackTrace)
sb.append("\tat ").append(s.getClassName()).append(".").append(s.getMethodName()).append("(").append(s.getFileName()).append(":").append(s.getLineNumber()).append(")")
.append("\n");
}
return sb.toString();
}
public static void dumpActiveThreads() {
Map<Thread, StackTraceElement[]> stackTraces = Thread.getAllStackTraces();
Set<Thread> keySet = stackTraces.keySet();
System.out.println("\nThread dump begin:");
for (Thread thread : keySet)
dumpActiveThread(thread);
System.out.println("\nThread dump end.");
}
,然後像這樣
final ScheduledFuture<?> scheduledFuture = scheduledExecutorService.scheduleWithFixedDelay(
new Runnable() {dumpActiveThreads()},
0,
30, TimeUnit.SECONDS);
計劃任務的代碼我沒有使用過kill -3
命令,但我已經使用提供jmap
命令從Java應用程序傾銷通過sun sdk
您可以編寫一個腳本,然後在下面的腳本命令來運行。
${JAVA_HOME}/bin/jmap -dump:file=/home/MyDump.hprof PID
3將只給出線程轉儲,但不是堆dump.Thread轉儲意味着你只能檢查堆棧跟蹤在JVM.But您是堆轉儲在Linux上則需要看着G中的每個線程使用下面的命令。 JMAP轉儲:文件= {myheap.bin PID其中你正在尋找採取堆轉儲}。輸出「myheap.bin」不是人類可讀的,讀取文件可以使用MAT工具。 MAT下載鏈接:http://www.eclipse.org/mat/
- 1. 使用kill命令與網絡路徑
- 2. C#catch kill命令
- 3. SQL Server Kill命令
- 4. 如何確保一個進程被殺害? (使用kill命令)
- 5. 如何在bash腳本中靜靜地使用unix kill命令?
- 6. 正在執行** kill -9 <PID> **通過java命令不起作用
- 7. 如何使用kill -l在bash腳本
- 8. 從kill命令中kill -9 +禁用消息(標準輸出)
- 9. 使用kill -9與kill的區別SIGUSR2
- 10. 如何使用命令update-alternatives --config java
- 11. 如何使用命令行中的Java
- 12. kill -3獲取java線程轉儲
- 13. 如何在Java中使用find命令
- 14. 如何利用powershell使用命令打開應用程序?
- 15. 單元測試kill命令
- 16. 應用程序使用kill命令來終止DB連接
- 17. 如何分析利用JMAP堆轉儲在java中
- 18. 如何在bash中使用kill SIGUSR2?
- 19. 在java中使用PID kill ubuntu進程
- 20. 使用java的cURL命令
- 21. 充分利用用戶輸入命令的形式 - 的Java
- 22. 運行循環利用Matlab的背景BASH#命令3
- 23. 當我們執行「kill -3 <pid>」
- 24. 是否kill命令kill特定於linux中的路徑
- 25. 我怎麼能有退出狀態是零使用kill命令
- 26. 如何利用改造3
- 27. 替代在Linux中的KILL命令
- 28. qdel和kill命令之間的區別
- 29. 如何在命令行中使用參數。加利福尼亞
- 30. 如何使用FFMPEG命令
你看過[cron](http://stackoverflow.com/questions/9619362/running-a-cron-every-30-seconds)? – Thomas 2012-07-26 12:39:08
@Thomas使用'cron'每30秒觸發一次? – 2012-07-26 13:00:39
確實,cron只能每60秒降低一次。 – Thomas 2012-07-27 02:24:34