다음 스크립트를 실행했습니다.
ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]/1024/1024}}' | sort -nk2 -r
메모리 사용량은 약 12GB로 표시되지만 top 명령을 실행하면 총 메모리는 66GB, 사용된 메모리는 63GB, 여유 메모리는 3GB로 표시됩니다.
위 수치는 대략적인 수치입니다. 다음은 명령을 사용하여 비슷한 숫자를 보여주는 업데이트입니다 free -m
.
total used free shared buffers cached
Mem: 64521 64087 433 0 2071 51567
-/+ buffers/cache: 10449 54072
Swap: 63999 1 63998
위 명령에서 12GB가 사용되었다고 표시되는데 왜 63GB가 사용됩니까?
내 서버가 제대로 작동하지 않습니다. top 명령에 따라 사용 가능한 메모리가 부족하면 프로세스가 중단되기 시작합니다.
이는 66GB RAM을 탑재하고 Oracle Enterprise Linux 6.3 64비트(기본적으로 Red Hat)를 실행하는 HP 서버입니다.
어떤 단서가 있나요?
답변1
서버가 이상하게 동작하지 않습니다. 출력을 해석하는 방법에 실수가 있었습니다 free
. 바라보다https://serverfault.com/questions/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free: "buffer" 및 "cached"는 메모리가 "사용 중"임을 지정하지만 캐시는 즉시 삭제할 수 있습니다. 이것이 "버퍼"와 "캐시"가 애플리케이션에 실제로 사용 가능한 메모리 양에 포함되는 이유입니다.
http://thoughtsbyclayg.blogspot.com/2008/09/display-free-memory-on-linux-ubuntu.html설명하다
"얼마나 많은 메모리가 실제로 사용 가능한지"를 고려할 때 다음과 같이 계산하고 싶습니다.
"사용 가능" + ("버퍼" + "캐시됨")
귀하의 예에서는 애플리케이션에 사용할 수 있는 메모리가 54GB입니다.