상단의 VSIZE 값이 ps의 VSZ (가상 세트 크기) 값과 다른 이유는 무엇입니까?


9

VSZ in ps은 응용 프로그램에 할당 된 총 주소 공간을위한 것이며 때로는 vsize로 별칭이 지정되지만 ( psLinux 의 man 페이지에서 언급 ) VSIZE의 정의는 무엇 top입니까? iPhone의이 최고 출력은 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

내 다윈 머신에서는 이것을 재현 할 수 없습니다. 아이폰에 설치 한 쉘에 이상한 블록 크기 설정이 있다고 생각합니까?
다항식

그들은 같은 방식으로 RSIZE / rss를 계산하는 것처럼 보이지만 ps는 top에 의해보고 된 것보다 2.5 배 큰 vsz를보고합니다. 아마도 topIOS에서 vsize의 공유 객체 등을 포함하지 않을 수도 있습니다.
팀 케네디

"iPhone의 최고 출력은 Linux의 최고 출력과 다릅니다."놀랍지 않습니까?
poige

답변:


5

리눅스 메모리 시스템은 많은 메모리 최적화 유틸리티와 메모리 공유로 가득 차있어 번거로운 접근 방식으로 메모리를 공유하고 소비하는 방법을 알 수 있습니다 .ps 및 기타 ps 관련 명령의 출력은 모두 데이터의 출력을 처리합니다. 아래 /proc파일 시스템. 특별히ps, RSS (상주 크기 메모리) 및 VSIZE (가상 메모리 크기)는 모두 중요하지만 VSIZE는 메모리의 정확한 사용법을 보여주지 않으며 VSIZE와 rss의 차이는 실제로 초기화 중에 프로그램에 의도되고 할당 된 것입니다. 아직 참조되지 않았을 수 있습니다. 프로그램처럼 많은 라이브러리가 링크되어 있지만 실제 프로그램 런타임에서 아직 참조되지 않았기 때문에 아직로드되지 않았습니다. RSS는 프로그램이 실제로 사용하는 총 메모리를 제공하지만 할당 된 메모리의 대부분이 동일한 프로세스 또는 다른 프로세스의 다른 인스턴스와 공유 될 수 있기 때문에 메모리 소비량에 대한 실제 그림을 제공하지 않을 수 있습니다. 아래를 살펴보면 /proc/<processid>/maps메모리가 어떻게 사용되었는지 대략적으로 알 수 있지만 조용히 오해의 소지가 있습니다. 사용하다pmap -x <pid> 커맨드 라인에서, 확산을 보는 데 유용합니다.

종종 더 나은 유틸리티는 freevmstat입니다. free전체 현재 메모리 소비 세부 정보를 제공하고 vmstat를 사용하여 업데이트 빈도를 확인할 수 있습니다.


ps가 올바른 프로세스 메모리 사용량을 제공하는 것으로 간주되어서는 안되는 또 다른 이유 또는 신중한 설명. 에서이 읽기 virtualthreads.blogspot.com/2006/02/...
Nikhil Mulley에게

2
이 답변의 포스터가 말하려는 것은 사용되는 메모리의 정의가 복잡하고 다양하다는 것입니다. 커널에는 추적 및보고되는 단일 위치가 없습니다. 유틸리티는 커널이보고 한 수많은 통계를 자체적으로 해석합니다.
Johan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.