Làm thế nào người ta có thể đo tổng bộ nhớ RSS bị chiếm bởi một tập hợp các quy trình (rẽ nhánh), mà không cần đếm hai lần các trang chia sẻ và sao chép khi ghi?
Làm thế nào người ta có thể đo tổng bộ nhớ RSS bị chiếm bởi một tập hợp các quy trình (rẽ nhánh), mà không cần đếm hai lần các trang chia sẻ và sao chép khi ghi?
Câu trả lời:
Cuối cùng tôi đã viết tiện ích của riêng mình cho việc này: https://gist.github.com/Eugeny/04ccfe8accf4bc74b0ca
Tôi đã chạy thử init
(pid 1) để thử nghiệm và tổng số báo cáo gần bằng với mức sử dụng ram vật lý (theo htop), vì vậy tôi đoán nó có phần đúng.
Ví dụ sử dụng:
~ » pstree -ap 15897
zsh,15897
└─sudo,9783 make rundev
└─make,9784 rundev
└─sh,9785 -c cd ajenti-panel && ./ajenti-panel -v --autologin --plugins ../plugins --dev
└─python ./ajenti,9786
├─./ajenti-panel ,9834
├─./ajenti-panel ,9795
└─{python ./ajenti},9796
~ » sudo ./memuse.py 15897
PID Commandline Frames (+unique) VMEM
- 15897 (/usr/bin/zsh ): 1776 +1776 7104 KB
- 9783 (sudo make rundev ): 608 +408 2432 KB
- 9784 (make rundev ): 261 +98 1044 KB
- 9785 (/bin/sh -c cd ajenti-panel && ): 166 +48 664 KB
- 9786 (python ./ajenti-panel -v --aut): 9279 +8977 37116 KB
- 9795 (./ajenti-panel worker [restric): 7637 +1334 30548 KB
- 9834 (./ajenti-panel worker [session): 8972 +2639 35888 KB
----------------------------------------------------------------------------------------
TOTAL: 15280 61120 KB
Không có cách xác định rõ ràng trong bất kỳ công cụ nào tôi biết về quy trình nào chia sẻ bản đồ nào mà không lặp qua tất cả các ánh xạ và so sánh địa chỉ.
Tuy nhiên, linux cung cấp ước tính hợp lý được gọi là kích thước tập hợp Tỷ lệ . Điều này được báo cáo trong / Proc / [pid]> / maps.
Giá trị này là kích thước của ánh xạ chia cho số lượng anh chị em / quá trình cha mẹ có cùng ánh xạ mở.
Vì vậy, với chương trình mở bản đồ 1MiB, cộng với 1MiB được chia sẻ với 4 quy trình khác, kích thước bộ tỷ lệ là 1MiB + (1Mib / 4) hoặc 1.250 MiB. RSS trong trường hợp này sẽ là 2MiB.
Có một bản vá cho htop nổi xung quanh sẽ sử dụng PSS để tính toán 'ước tính tốt' của bộ nhớ thực tế đang sử dụng.
/proc/*/map
tệp, mặc dù tôi chưa bao giờ tìm thấy một công cụ có thể làm điều đó. Vấn đề chính là nó có cấu trúc dữ liệu phức tạp hơn nhiều so với vẻ ngoài của chúng. Nếu bạn không nhận được câu trả lời hay ở đây, có lẽ bạn cũng có thể thử unix SE.