우분투 리눅스 : 프로세스 스왑 메모리 및 메모리 사용량


14

내 우분투는 작업 관리자가 보여주는 것보다 많은 메모리를 소비합니다.

sudo ps -e --format rss  | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29

free -m

             total       used       free     shared    buffers     cached
Mem:          3860       2765       1094          0          3        300
-/+ buffers/cache:       2461       1398
Swap:         2729       2374        354

이상하다. 누군가이 차이점을 설명 할 수 있습니까?

그러나 더 중요한 것은 : 프로세스가 실제로 사용하는 메모리 양을 알고 싶습니다. 가상 메모리 크기를 알고 싶지 않고 상주 메모리와 프로세스 스왑을 알고 싶습니다.

또한 'ps'의 형식 매개 변수 "sz"를 출력하려고 시도했지만이 값의 합계는 16,000MB입니다 (param 'size'는 36700MB). 다른 옵션이 있습니까?

메모리를 소중하게 사용하기 위해 어떤 프로그램 / 프로세스가 많은 메모리 (및 스왑)를 먹고 있는지 결정하기 위해 이것을 사용하고 싶습니다. 메모리는 가치가 있기 때문입니다.

/ proc / meminfo의 출력 :

MemTotal:        3952812 kB                
MemFree:         1119192 kB
Buffers:            2676 kB
Cached:           290068 kB
SwapCached:       160980 kB
Active:          1805396 kB
Inactive:         731680 kB
Active(anon):    1745820 kB
Inactive(anon):   689184 kB
Active(file):      59576 kB
Inactive(file):    42496 kB
Unevictable:         148 kB
Mlocked:             148 kB
SwapTotal:       2795272 kB
SwapFree:         390900 kB
Dirty:              1984 kB
Writeback:             0 kB
AnonPages:       2085472 kB
Mapped:            67432 kB
Shmem:            190676 kB
Slab:              88012 kB
SReclaimable:      42704 kB
SUnreclaim:        45308 kB
KernelStack:        5496 kB
PageTables:        87860 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4771676 kB
Committed_AS:    9522364 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      374404 kB
VmallocChunk:   34359330144 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       61440 kB
DirectMap2M:     4030464 kB

"1043.84"는 "1178"에서 그리 멀지 않다는 것을 지적해야합니다.이 숫자는 여러분이 수행하는 계산으로 얻을 수있는 숫자입니다.
cjc

나는 unix.stackexchange (+1)에 문자 그대로 동일한 질문을했습니다. 패트릭도 저의 마음을 날려 버렸습니다 : P-- unix.stackexchange.com/questions/34795/…
GoldenNewby

답변:


10

리눅스 가상 메모리 시스템은 그렇게 간단하지 않습니다. 모든 RSS 필드를 추가하고에 used의해 보고 된 값을 가져올 수는 없습니다 free. 여기에는 여러 가지 이유가 있지만 가장 큰 몇 가지를하겠습니다.

  • 프로세스가 분기되면 부모와 자식 모두 동일한 RSS로 표시됩니다. 그러나 리눅스 copy-on-write는 두 프로세스가 실제로 동일한 메모리를 사용하도록 채택 합니다. 프로세스 중 하나가 메모리를 수정하는 경우에만 실제로 복제됩니다. 따라서이 free숫자는 topRSS 합계 보다 작습니다 .

  • RSS 값은 공유 메모리를 포함하지 않습니다. 공유 메모리는 한 프로세스에서 소유 top하지 않으므로 RSS에 포함하지 마십시오. 따라서이 free숫자는 topRSS 합계 보다 큽니다 .


오 감사합니다! 필자는 항상 free -m이 전체 시스템의 실제 공유 메모리 합계를 표시한다고 생각했습니다. 그러나 "man ps"가 지적한대로 : "공유 메모리 열은 무시해야합니다. 더 이상 사용되지 않습니다."
David Halter

죄송합니다. 스왑 문제에 대한 답변이 아니므로이 답변을 수락 할 수는 없지만 어쨌든 감사합니다!
David Halter

@DavidHalter 스왑 문제는 무엇입니까? 내가 제공 한 정보는 스왑을 포함한 모든 메모리에 적용됩니다.
Patrick

공유 메모리가 실제로 크지 않은가? 적어도 그것이 작업 관리자에서 본 것입니다. 그러나 내 스왑은 꽤 많이 사용됩니다. 1035MB; PS의 합은 1GB이고 스왑 + rss의 합은> 2GB입니다. rss뿐만 아니라 프로세스가 실제로 사용하는 메모리의 양을보고 싶습니다. 더 많은 조사는 프로세스가 사용하고있는 스왑 된 메모리의 양입니다.
David Halter

1
@DavidHalter 프로세스가 사용하는 메모리 양 (공유 포함)을 보려면 'VSZ'열을보십시오.
Patrick

1

총 메모리 사용량에 따라 "무료"의 출력을 신뢰하고 단일 프로세스에서 사용하는 메모리의 양에 대한 일반적인 아이디어를 위해 "ps"를 신뢰하는 것이 좋습니다.

"ps"RSS 값의 합계가 "무료"와 같지 않다고해서 RSS로 프로세스를 정렬하고 살해에 대한 가장 큰 프로세스를 평가하지 않아도됩니다.

즉, 모든 노력이 기계가 최대 절전 모드인지 확인하는 것이라면 필요한 경우 디스크에 파일 형식으로 더 많은 스왑을 만드는 것이 더 쉬운 방법 일 것입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.