Linux

是否有現在關閉的過去執行緒的日誌?

  • February 26, 2012

有時,我有一個流氓 Java 程序,它佔用了我 100% 的 CPU 並使其溫度躍升約 30C(如果沒有被殺死,通常會導致崩潰)。

問題是,我永遠無法真正辨識它(它有很長的參數和東西列表)或分析它,因為我必須如此迅速地殺死它。

我可以查看某種日誌來查看我殺死的過去程序的身份嗎?如果沒有,有沒有辦法讓我在下次出現該過程時捕捉它?

如果重要的話,我是 OpenSuse 11.4。

不,預設情況下不是。有太多的日誌記錄(尤其是當您開始冒險記錄寫入日誌條目的操作時……)。

BSD 程序記帳(如果有,請執行lastcomm),如果處於活動狀態,則記錄執行的每個命令的名稱和一些基本統計資訊,但不記錄參數。

審計子系統更通用、更靈活。安裝audit軟體包並閱讀SuSE 審計指南(主要是關於規則的部分),或嘗試

auditctl -A exit,always -F path=/usr/bin/java -S execve

或者:不是殺死它,kill -STOP而是它。STOP暫停該過程,不詢問任何問題。您可以選擇稍後恢復 ( kill -CONT) 或終止 ( )。kill -KILL只要程序還在,您就可以檢查它的命令行 ( /proc/12345/cmdline)、記憶體映射 ( /proc/12345/maps) 等等。

或者:將調試器附加到程序並暫停它。它很簡單gdb --pid 12345(Java 程序可能有更好的選擇);附加調試器會立即暫停程序(如果退出調試器,程序會收到 SIGCONT 並恢復)。

請注意,所有這些僅擷取作業系統級別的程序,而不是 JVM 執行緒。您需要使用 JVM 特性來調試執行緒。

引用自:https://unix.stackexchange.com/questions/25225