我有一個Linux守護進程,它分出幾個子進程並監視它們是否崩潰(根據需要重新啓動)。 如果父母可以監視子進程的內存使用情況 - 檢測內存泄漏並在超出特定大小時重新啓動子進程,那將會很好。 我該怎麼做?監視子進程的內存使用情況
回答
你應該能夠得到內存的詳細信息出來的/ proc/{PID} /狀態:
Name: bash
State: S (sleeping)
Tgid: 6053
Pid: 6053
PPid: 6050
TracerPid: 0
Uid: 1007 1007 1007 1007
Gid: 1007 1007 1007 1007
FDSize: 256
Groups: 1007
VmPeak: 48076 kB
VmSize: 48044 kB
VmLck: 0 kB
VmHWM: 4932 kB
VmRSS: 2812 kB
VmData: 2232 kB
VmStk: 84 kB
VmExe: 832 kB
VmLib: 6468 kB
VmPTE: 108 kB
Threads: 1
SigQ: 0/8190
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001010
SigCgt: 0000000188020001
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
Cpus_allowed: 0f
Mems_allowed: 00000000,00000001
voluntary_ctxt_switches: 69227121
nonvoluntary_ctxt_switches: 19071
然而,除非內存泄漏是驚人的,這是很難察覺他們在看的過程統計數據,因爲malloc和free通常對於它們所對應的系統調用(brk/sbrk)非常抽象。
您還可以檢入/ proc/$ {PID}/statm。
你可以嘗試讓一個運行vmstat的監視腳本與你的進程並行運行(注意,如果你多次運行這個腳本,你會得到多個vmstat拷貝,這不是一個好主意)。然後這個監視器腳本可以使用可用內存加緩衝區和緩存大小來獲取操作系統可用的內存量,並且可以跟蹤它。然後,如果低於某個閾值,您可以通過調用ps -e -o來檢查最大的進程(請參閱手冊頁以獲取詳細信息,但嘗試vsz,pcpu,user,pid,args作爲起點)。
我建議將該監視器作爲一個單獨的進程運行,並在惡意進程變得過大時將其殺死。您可以將通過使用參數
-u user-name
參數的參數限制爲ps。
儘管這是所有黑客(英國的含義),但正確的解決方案是修復泄漏,假設你有代碼。
我更喜歡不依賴外部程序/腳本的集成解決方案。當然修復內存泄漏是正確的做法,但在現實世界中,您有時不得不暫時妥協。另外,我可以設想當你運行不受你控制的外部代碼時(例如運行php腳本的apache)。 – 2010-05-02 22:10:53
單一集成解決方案的問題在於它變得越來越複雜。使單獨的程序執行單獨的功能的優點是每個程序都相對簡單並且易於調試和部署。一個集成的解決方案起初看起來不錯(沒有通信問題,你知道它正在運行,因爲主程序正在運行等),但隨着系統變得越來越大,簡單性問題將變得越來越重要 – Nick 2010-05-03 04:26:31
- 1. 從進程開始到結束監視內存使用情況
- 2. Redis - 監視內存使用情況
- 3. visualvm監視內存使用情況
- 4. 監控進程的CPU和內存使用情況
- 5. 在Linux中監視程序的內存使用情況
- 6. 應用程序池內存使用情況監視器
- 7. 監視另一臺服務器上的進程的內存使用情況
- 8. 監視Windows中特定進程的內存和處理器使用情況?
- 9. Java - 我如何監視其他進程的內存和CPU使用情況
- 10. 監控內存使用情況
- 11. 使用dotMemoryUnit監視峯值內存使用情況
- 12. 如何獲取node.js中的子進程內存使用情況?
- 13. python中的子進程內存使用情況
- 14. 檢查Python中子進程的內存使用情況
- 15. 如何監視Glassfish的內存使用情況?
- 16. 監視R中的內存使用情況
- 17. 如何在Solaris上監視Perl中的內存使用情況?
- 18. 監視器WCF服務內存使用情況
- 19. JVM監視器字符數組內存使用情況
- 20. Javascript-動態監視CPU /內存使用情況
- 21. 通過Java應用程序監視自己的內存使用情況
- 22. 監控每個線程的內存使用情況
- 23. 監控ASP.NET應用程序內存和磁盤使用情況
- 24. 使用本機進程的Java內存使用情況
- 25. 使用'top'查看進程的內存使用情況
- 26. Java中線程或進程的內存使用情況
- 27. 如何監視隨着時間的推移進程的內存使用情況 - Ubuntu的
- 28. 使用進程ID獲取進程的實際內存使用情況
- 29. 監視器索引使用情況
- 30. iPad:活動監視器的「真實內存」與應用程序內存使用情況?
有沒有系統調用來做到這一點?解析文件似乎是一種非常骯髒的方式來獲取信息。 – 2010-05-02 22:09:05
這是PS和朋友如何獲得他們的信息... – WhirlWind 2010-05-02 23:38:45
所以我想這是最好的方法。謝謝! – 2010-05-03 08:57:13