Làm thế nào để đo bộ nhớ mà không cần các trang sao chép?


8

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?


1
Câu hỏi rất thú vị, +1 - có thể bằng cách phân tích sâu hơn các /proc/*/maptệ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.
peterh - Phục hồi Monica

Câu trả lời:


4

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

2

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.