Tại sao giá trị của VSIZE ở trên khác với giá trị của VSZ (Kích thước cài đặt ảo) trong ps?


9

Tôi biết VSZ trong psdành cho tổng không gian địa chỉ được phân bổ cho ứng dụng và đôi khi được đặt bí danh là vsize (được đề cập trong trang con người pstrên linux), nhưng định nghĩa của VSIZE trong là topgì? Đầu ra hàng đầu này của iPhone khác với đầu trên Linux:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324

Tôi không thể tái tạo điều này trên bất kỳ máy darwin nào của tôi. Nó khiến tôi nghĩ cái vỏ mà họ thiết lập trên iphone có một bộ khối kích thước kỳ lạ?
đa thức

họ có vẻ đang tính toán RSIZE / rss theo cùng một cách, nhưng ps đang báo cáo so với lớn hơn 2,5 lần so với báo cáo hàng đầu. có thể toptrên iOS không bao gồm các đối tượng được chia sẻ trong vsize hoặc một cái gì đó.
Tim Kennedy

"Sản lượng hàng đầu này từ iPhone khác với đầu trên Linux" - không phải là một điều ngạc nhiên, phải không?
poige

Câu trả lời:


5

Hệ thống bộ nhớ Linux chứa rất nhiều thói quen tối ưu hóa bộ nhớ và chia sẻ bộ nhớ, làm cho ý tưởng về cách chia sẻ và tiêu thụ bộ nhớ giữa, một cách tiếp cận rườm rà. Đầu ra của ps và các lệnh liên quan đến ps khác đều xử lý đầu ra của chúng từ dữ liệu theo /prochệ thống tập tin. Đặc biệtps, RSS (bộ nhớ kích thước lưu trú) và VSIZE (kích thước bộ nhớ ảo) đều quan trọng, tuy nhiên VSIZE không hiển thị cách sử dụng chính xác của bộ nhớ và sự khác biệt giữa VSIZE và rss là những gì thực sự được dự định và phân bổ cho chương trình trong quá trình khởi tạo nhưng có thể chưa được tham khảo Giống như chương trình có thể có rất nhiều thư viện được liên kết nhưng chúng chưa được tải vì chúng chưa được tham chiếu trong thời gian chạy chương trình thực tế. RSS cung cấp tổng bộ nhớ thực sự được chương trình sử dụng nhưng có thể không đưa ra một bức tranh chân thực về mức tiêu thụ bộ nhớ, vì hầu hết bộ nhớ được phân bổ có thể được chia sẻ với các phiên bản khác của cùng một quy trình hoặc các quy trình khác. Nhìn bên dưới /proc/<processid>/mapscó thể cho một ý tưởng sơ bộ về cách bộ nhớ đã được sử dụng nhưng đôi khi chúng yên tĩnh có thể gây hiểu lầm. Sử dụngpmap -x <pid> từ dòng lệnh, hữu ích để xem sự lây lan là.

Các tiện ích thường tốt hơn là freevmstat. freesẽ cung cấp cho bạn chi tiết tiêu thụ bộ nhớ hiện tại và vmstat có thể được sử dụng để xem tần suất cập nhật.


Một lý do khác hoặc giải thích chu đáo tại sao ps KHÔNG nên được coi là đưa ra cách sử dụng bộ nhớ đúng quy trình. Đọc cái này tại virtualthreads.blogspot.com/2006/02/ Khăn
Nikhil Mulley

2
Điều mà người đăng câu trả lời này đang cố gắng nói là định nghĩa của bộ nhớ được sử dụng rất phức tạp và đa dạng. Không có vị trí duy nhất trong kernel nơi nó được theo dõi và báo cáo. Các tiện ích thực hiện giải thích riêng của họ về nhiều số liệu thống kê được báo cáo bởi kernel.
Johan
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.