我正在通過從Proc文件系統讀取值來編寫Perl中的小型進程監視器腳本。現在我能夠使用/proc/[pid] /狀態和/proc/[pid]/io文件獲取線程數,進程狀態,讀取和寫入的字節數。現在我想計算進程的內存使用情況。搜索後,我開始知道內存使用情況將出現在/proc/[pid]/statm。但我仍然無法弄清楚該文件需要哪些必要字段來計算內存使用情況。誰可以幫我這個事?提前致謝。使用Proc文件系統計算進程的內存
1
A
回答
2
您可能想要resident
或size
。來自kernel.org。
- 大小程序總量
- 這是整個程序,包括東西從不換
- 居民駐留集大小
- 的東西,在當前時刻RAM(這不包括換出的頁面)
1
另一個(不太簡單但更精確)的可能性是解析/proc/123/maps
文件,也許是通過使用pmap
實用程序。它爲您提供有關「虛擬內存」(即進程的地址空間)的信息。
2
知道過程的「內存使用情況」非常困難。 VM大小和RSS是已知的,可測量的值。
但你可能想要的是別的東西。實際上,「VM大小」似乎太高,RSS通常似乎太低。
的主要問題是:
- 多個進程可以共享相同的頁面。您可以將所有正在運行的進程的RSS加起來,並且以比計算機的物理內存多得多(這是在對內核數據結構進行計數之前)
- 屬於進程的專用頁面可以換出。或者他們可能還沒有初始化。他們數數?
- 您究竟如何計算內存映射文件頁?骯髒的?清潔的? MAP_SHARED或MAP_PRIVATE?
所以你真的需要考慮什麼纔算「內存使用量」。
在我看來,在邏輯:它不與任何其他進程共享
- 私人網頁(NB:私人頁面仍然可以寫入時複製)必須即便算上如果換出
- 共享頁面數應除以它們共享的進程數通過兩個進程共享的頁面數量的一半
- 文件支持頁面,這是居民可以以同樣的方式
- 文件支持的非居民頁面可以忽略
- 計數如果在同一個頁面映射不止一次成同一進程的地址空間,第2次及以後可以忽略。這意味着如果proc 1將頁面X映射了兩次,並且proc 2將頁面X映射了一次,則它們都「收費」了半頁。
我不知道這樣做的任何實用工具。這似乎並不平凡,並且涉及(至少)讀取/ proc/pid/pagemap和其他一些/ proc接口,其中一些接口是僅限根的。
相關問題
- 1. 計算有多少進程在Linux系統上保存文件
- 2. 如何使用「proc」文件系統計算Linux中所有正在運行的進程的CPU利用率?
- 3. 卸載proc文件系統
- 4. /proc文件系統的優勢
- 5. 系統API來獲取進程使用的內存狀態
- 6. 文件系統 - 內存映射文件
- 7. Solaris 10/proc文件系統中的使用計數器如何減少?
- 8. c程序使用系統調用來計算文件中的行
- 9. 在Android中使用Android活動寫入/ proc文件系統
- 10. 最大化文件系統內存的實用程序
- 11. 使用Java分析系統內存/ CPU統計信息
- 12. 系統文件緩存是否被系統中的所有進程共享?
- 13. 使用C#.NET的遠程系統上的計算
- 14. 使用ROCR和pROC進行平均AUC計算的差異
- 15. 「系統找不到指定的文件」使用子進程
- 16. 遠程進行文件系統同步
- 17. 計算機系統類和虛擬內存 - 代數工作
- 18. 使用文件系統來擴充內存
- 19. 當android系統殺死進程聲明內存時調用onSaveInstanceState?
- 20. 計算進程消耗的最大空閒存儲內存
- 21. 的Linux:需要設計預取緩存文件從NAS到系統內存
- 22. Javascript積分計算系統
- 23. 計算在android系統
- 24. 使用Chrome打包的應用程序將文件保存到文件系統
- 25. 如何將文件系統的內容保存到文件中
- 26. 虛擬內存:進程'一個和系統的一個
- 27. Hadoop文件系統統計信息(FileSystem.Statistics)
- 28. 如何使用java解密出庫存入系統內存的文件?
- 29. 使用SharpSVN如何將文件導出到內存而不是文件系統?
- 30. 使用boost文件系統獲取文件系統類型
感謝您的回覆。坦率地說,我不回答。其實我想計算一下這個過程的內存使用情況。那麼這將適合這個? – Allwyn
@Winbros'居民'。 – cnicutar