Linux
是否有現在關閉的過去執行緒的日誌?
有時,我有一個流氓 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 特性來調試執行緒。