我有一個進行配置管理的守護進程。所有其他進程都應該與這個守護進程交互以實現其功能。但是當我執行一個大動作時,在幾個小時後,守護進程在2到3個小時內沒有響應。並且2-3小時後它正常工作。爲Linux進程掛起問題調試實用程序?
調試Linux進程掛起問題的實用程序?
如何獲得Linux進程掛起的點?
我有一個進行配置管理的守護進程。所有其他進程都應該與這個守護進程交互以實現其功能。但是當我執行一個大動作時,在幾個小時後,守護進程在2到3個小時內沒有響應。並且2-3小時後它正常工作。爲Linux進程掛起問題調試實用程序?
調試Linux進程掛起問題的實用程序?
如何獲得Linux進程掛起的點?
一個選項是使用gdb
並使用attach
命令爲了附加到正在運行的進程。您將需要加載包含可執行的有問題的符號(使用file
命令)
這些都可能給出一些信息,這些信息一起構成了問題的圖片。
使用gdb時,在應用程序被阻止時觸發核心轉儲可能很有用。然後你有一個靜態快照,你可以在你的閒暇時使用驗屍調試進行分析。你可以讓這些腳本觸發它們。你快速建立一組快照,可以用來測試你的理論。
我不認爲'ps ax'是檢測繁忙循環的好工具,'top'會更好這個 – 2010-06-14 06:11:45
你當然是對的,我傾向於使用這些幾乎總是並排的,所以他們混淆了我的腦海。謝謝,我更新了答案 – 2010-06-14 07:28:17
嗨,彼得, strace幫助我解決了掛起問題。 掛起是因爲使用'flock()'的文件鎖定的兩個進程之間的死鎖場景。 非常感謝您的幫助。如果沒有了解,那麼找出這個過程爲何懸而未決是一項不可能完成的任務。 – Niranjan 2010-06-17 09:18:05
有做了許多不同的方式:
監聽一個UNIX域套接字,來處理狀態請求。然後外部應用程序可以詢問應用程序是否仍然正常。如果在某個超時期限內沒有得到任何迴應,那麼可以認爲被查詢的應用程序已經死鎖或者死機。
定期觸摸具有預選路徑的文件。外部應用程序可以查看該文件的時間戳,如果該文件已過時,則可以認爲該應用程序已死或死鎖。
您可以反覆使用alarm
系統調用,使信號終止進程(相應地使用sigaction)。只要您繼續撥打alarm
(即只要您的程序正在運行),它就會繼續運行。一旦你不這樣做,信號就會發射。
,因爲它與fork
和waitpid
死亡描述in this answer您可以無縫地重新啓動過程。它不會花費任何重要的資源,因爲操作系統將共享內存頁面。
你也可以直接從'gdb/path/to/executable PID'的命令行執行此操作' – 2010-06-14 05:47:11