2011-10-24 22 views
197

RSS và VSZ trong quản lý bộ nhớ Linux là gì? Trong môi trường đa luồng có thể quản lý và theo dõi cả hai thứ này như thế nào?RSS và VSZ trong quản lý bộ nhớ Linux là gì

+0

bản sao có thể có của [Hiểu nhật ký của kẻ giết người trên máy chủ Linux] (http://stackoverflow.com/questions/9199731/understanding-the-linux-oom-killers-logs) – msangel

Trả lời

0

Chúng không được quản lý, nhưng được đo và có thể giới hạn (xem getrlimit cuộc gọi hệ thống, cũng trên getrlimit(2)).

RSS nghĩa là resident set size (phần không gian địa chỉ ảo của bạn nằm trong RAM).

Bạn có thể truy vấn các virtual address space của quá trình 1234 sử dụng proc(5) với cat /proc/1234/maps và tình trạng của nó (bao gồm cả tiêu thụ bộ nhớ) thru cat /proc/1234/status

+0

Trong khi liên kết này có thể trả lời câu hỏi, là tốt hơn để bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ review/low-quality-posts/18966880) – Maak

+0

Tôi đã cung cấp liên kết thứ hai. Một trong số họ sẽ giữ nguyên giá trị –

36

RSS là thường trú Set Kích thước (bộ nhớ vật lý cư dân - điều này không gian hiện đang chiếm trong bộ nhớ vật lý của máy), và VSZ là Kích thước bộ nhớ ảo (không gian địa chỉ được cấp phát - điều này có địa chỉ được cấp phát trong bản đồ bộ nhớ của quá trình, nhưng không nhất thiết phải có bất kỳ bộ nhớ thực nào đằng sau nó ngay bây giờ).

Lưu ý rằng trong những ngày này của máy ảo thông thường, bộ nhớ vật lý từ điểm quan sát của máy có thể không thực sự là bộ nhớ vật lý thực.

+0

Tâm cung cấp thêm thông tin so với chữ viết tắt của chữ viết tắt? – Pithikos

282

RSS là Kích thước tập hợp thường trú và được sử dụng để hiển thị lượng bộ nhớ được phân bổ cho quy trình đó và nằm trong RAM. Nó không bao gồm bộ nhớ được hoán đổi. Nó bao gồm bộ nhớ từ các thư viện được chia sẻ miễn là các trang từ các thư viện đó thực sự nằm trong bộ nhớ. Nó bao gồm tất cả bộ nhớ ngăn xếp và bộ nhớ heap.

VSZ là Kích thước bộ nhớ ảo. Nó bao gồm tất cả bộ nhớ mà quá trình có thể truy cập, bao gồm bộ nhớ được hoán đổi và bộ nhớ từ thư viện được chia sẻ. Vì vậy, nếu quá trình A có nhị phân 500K và được liên kết với 2500K thư viện được chia sẻ, có 200K phân bổ stack/heap trong đó 100K thực sự nằm trong bộ nhớ (phần còn lại được hoán đổi) và chỉ thực sự tải 1000 nghìn lượt chia sẻ thư viện và 400K của nhị phân riêng của mình thì:

RSS: 400K + 1000K + 100K = 1500K 
VSZ: 500K + 2500K + 200K = 3200K 

Kể từ khi một phần của bộ nhớ được chia sẻ, nhiều quá trình có thể sử dụng nó, vì vậy nếu bạn cộng tất cả các giá trị RSS, bạn có thể dễ dàng kết thúc với không gian hơn bạn có hệ thống.

Ngoài ra còn có PSS (kích thước tập hợp tỷ lệ). Đây là một biện pháp mới hơn theo dõi bộ nhớ được chia sẻ dưới dạng tỷ lệ được sử dụng bởi quy trình hiện tại. Vì vậy, nếu đã có hai quá trình sử dụng thư viện chia sẻ tương tự từ trước:

PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K 

Chủ đề tất cả các phần không gian địa chỉ tương tự, vì vậy RSS, Ứng dụng iPhone và PSS cho mỗi thread là giống hệt nhau cho tất cả các chủ đề khác trong quá trình này . Sử dụng ps hoặc top để xem thông tin này trong linux/unix.

Có cách hơn để nó hơn này, để tìm hiểu thêm kiểm tra các tài liệu tham khảo sau đây:

Xem thêm:

+8

Tôi tin rằng RSS * không * bao gồm bộ nhớ từ các thư viện được liên kết động. Nếu có 3 quy trình sử dụng 'libxml2.so', thư viện được chia sẻ sẽ được tính trong mỗi RSS của chúng, vì vậy tổng số RSS của chúng sẽ lớn hơn bộ nhớ thực tế được sử dụng. – nfm

+1

Đó là chính xác. Tôi đã cố định câu trả lời của tôi, cảm ơn cho người đứng đầu lên. – jmh

+0

Tôi đang trên ubuntu 16.04, và có một quá trình java có 1.2G RES và 4.5G VIRT hiển thị từ lệnh 'top'. Hệ thống này không có bất kỳ trao đổi nào, 'swapon --show' không trả về gì cả. Làm thế nào để bạn giải thích điều này? Nếu VSZ đang trao đổi + thư viện chia sẻ, trong trường hợp này, các thư viện chia sẻ là hơn 3.3G? Có thể không? Chỉ cần thực sự bối rối ... –

1

Tôi nghĩ nhiều điều đã được nói, về RSS vs VSZ. Từ quan điểm của người quản trị/lập trình viên/người dùng, khi tôi thiết kế/ứng dụng mã, tôi quan tâm hơn đến RSZ, (bộ nhớ thường trú), và khi bạn tiếp tục kéo các biến ngày càng nhiều (heaped), bạn sẽ thấy giá trị này tăng lên. Hãy thử một chương trình đơn giản để xây dựng phân bổ không gian dựa trên malloc trong vòng lặp và đảm bảo bạn điền dữ liệu vào không gian malloc'd đó. RSS tiếp tục di chuyển lên. Theo như VSZ là có liên quan, nó là nhiều hơn của bản đồ bộ nhớ ảo mà Linux không, và một trong những tính năng cốt lõi của nó có nguồn gốc từ các khái niệm hệ điều hành thông thường. Việc quản lý VSZ được thực hiện bằng cách quản lý bộ nhớ ảo của hạt nhân, để biết thêm thông tin về VSZ, xem mô tả của Robert Love trên mm_struct và vm_struct, là một phần của cấu trúc dữ liệu task_struct cơ bản trong hạt nhân.