Nhận thông tin về việc sử dụng bộ nhớ của một quá trình từ / Proc / pid / smaps


46

Đối với một quy trình nhất định /proc/<pid>/smaps, đối với mục nhập ánh xạ đã cho, đó là:

  1. Shared_Clean
  2. Shared_Denty
  3. Riêng tư
  4. Private_Denty

Shared_Clean+ Shared_Dirtydung lượng bộ nhớ được chia sẻ với các quá trình khác? Vì vậy, nó giống như chia sẻ RSS?

Tương tự là Private_Clean+ Private_Dirtydung lượng bộ nhớ chỉ có sẵn cho một quá trình ? Vì vậy, nó giống như RSS tư nhân?

Giá trị PSS = PrivateRSS + (SharedRSS / số quy trình chia sẻ nó)?

Một số câu hỏi khác sau khi đọc liên kết này: LWN

Bây giờ hãy nói về toàn bộ quá trình, mà chúng ta đang xem xét.

Tôi nhận thấy rằng nếu tôi thực hiện Shared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirtycho mỗi mục nhập smaps cho quy trình, tôi sẽ nhận được RSS của quy trình như được báo cáo bởi ps, điều này khá tuyệt. Ví dụ

ps -p $$ -o pid,rss

Sẽ cho tôi (xấp xỉ) cùng một giá trị cho rss như là tổng của tất cả các Shared_Clean, Shared_Dirty, Private_Clean, Private_Dirtymục trong / proc / $$ / smaps.

Nhưng những gì về PSS cho toàn bộ quá trình? Vì vậy, từ ví dụ trên, làm thế nào để tôi nhận được PSS cho $$? Tôi có thể chỉ cần thêm mục PSS cho mỗi ánh xạ smaps và đến PSS cho $$ không?

Và những gì về USS cho toàn bộ quá trình? Một lần nữa lấy ví dụ ở trên Tôi đoán rằng tôi có thể đến USS cho $$ bằng cách chỉ tóm tắt các mục Private_ * cho mỗi mục smaps cho $$ .. phải không?

Ghi chú:
PSS = Kích thước cài đặt tỷ lệ.
USS = Kích thước cài đặt duy nhất.

Câu trả lời:


50

Các trang sạch là các trang chưa được sửa đổi kể từ khi chúng được ánh xạ (thông thường, các phần văn bản từ các thư viện dùng chung chỉ được đọc từ đĩa (khi cần thiết), không bao giờ được sửa đổi, vì vậy chúng sẽ ở trong các trang sạch, được chia sẻ).
Các trang bẩn là các trang không sạch (tức là đã được sửa đổi).

Các trang riêng tư chỉ khả dụng cho quy trình đó, các trang được chia sẻ được ánh xạ bởi các quy trình khác * .

RSS là tổng số trang, được chia sẻ hoặc không, hiện được ánh xạ vào quy trình. Vì vậy, Shared_Clean+ Shared_Dirtysẽ là phần được chia sẻ của RSS (tức là phần RSS cũng được ánh xạ vào các quy trình khác) và Private_Clean+ Private_Dirtyphần riêng tư của RSS (tức là chỉ được ánh xạ trong quy trình này).

PSS (kích thước chia sẻ tỷ lệ) là như bạn mô tả. Các trang riêng tư được tóm tắt như hiện tại và mỗi kích thước của ánh xạ được chia sẻ được chia cho số lượng quy trình chia sẻ nó.
Vì vậy, nếu một quy trình có 100 nghìn trang riêng tư, 500 nghìn trang được chia sẻ với một quy trình khác và 500k được chia sẻ với bốn quy trình khác, PSS sẽ là:

100k + (500k / 2) + (500k / 5) = 450k

Đọc thêm:

Về khoản tiền trên toàn quy trình:

  • RSScó thể (xấp xỉ + ) thu được bằng cách tính tổng các Rss:mục trong smaps(bạn không cần phải thêm các mục được chia sẻ / riêng tư / bẩn).

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Bạn có thể tổng hợp Pss:các giá trị theo cùng một cách để có được quy trình toàn cầu PSS.
  • USSkhông được báo cáo smaps, nhưng thực sự, đó là tổng của ánh xạ riêng tư, vì vậy bạn cũng có thể có được nó theo cách tương tự

* Lưu ý rằng trang "có thể chia sẻ" được tính là ánh xạ riêng tư cho đến khi trang thực sự được chia sẻ. tức là nếu chỉ có một quy trình hiện đang sử dụng libfoo, phần văn bản của thư viện đó sẽ xuất hiện trong ánh xạ riêng của quy trình . Nó sẽ được tính trong các ánh xạ được chia sẻ (và được xóa khỏi các ánh xạ riêng tư) chỉ khi / khi một quá trình khác bắt đầu sử dụng thư viện đó.
+ Các giá trị không cộng chính xác cho tất cả các quy trình. Không chắc chắn chính xác tại sao ... xin lỗi.


Cảm ơn câu trả lời tuyệt vời. Cảm kích điều đó. Tôi đã đọc bài viết của LWM và điều đó đã thôi thúc tôi hỏi thêm vài câu hỏi, vì vậy tôi đã thêm chúng vào câu hỏi của mình ở trên.
Ankur Agarwal

Tuyệt quá! nó rất rất hữu ích !!
camino

Tôi vẫn còn bối rối về shared_denty - bản chất bẩn của việc này ngăn không cho nó được chia sẻ?
Kevin

@Kevin: nếu họ không chia sẻ, họ sẽ không được tính đến Shared_Dirty- bạn có thể làm rõ câu hỏi của mình không?
Mat

bẩn có nghĩa là sửa đổi từ nguồn gốc. quá trình, phải không? đó không phải là cách nó đi từ được chia sẻ thành địa phương?
Kevin
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.