내 웹사이트가 하루 중 특정 시간에 매우 느려서 원인을 찾고 있습니다. 현재 Apache 메모리 사용량을 연구 중이며 현재 사용 중인 RAM 양을 알려주는 두 가지 도구가 있습니다.
Apache 2 컴패니언:
curl -sL https://raw.githubusercontent.com/richardforth/apache2buddy/master/apache2buddy.pl | perl
반품:
apache2 is currently using 8849.18 MB of memory.
그런 다음 사용할 명령이 있습니다 ps
.
ps -ylC apache2 --sort:rss | awk '{sum+=$8; ++n} END {print "Tot="sum"("n")";print "Avg="sum"/"n"="sum/n/1024"MB"}'
반품:
Tot=9047860(258)
Avg=9047860/258=34.2473MB
따라서 이 줄을 기준으로 Apache2는 약 9GB의 RAM을 사용하고 있으며 이는 Apache2Buddy의 결과와 일치합니다.
그러나 이것을 실행하면 htop
내가 얻는 것은 다음과 같습니다.
총 메모리 사용량은 2.7GB에 불과한 것 같습니다. 결과의 차이가 왜 그렇게 큰가요?
답변1
상주 크기에는 공유 페이지가 포함됩니다. 여기에는 공유 라이브러리(이 경우 apache2
바이너리 자체)가 포함됩니다. 사용 중인 도구는 모든 공유 메모리를 프로세스당 한 번씩 계산하지만 실제 메모리에서는 한 번만 표시되므로 상주 크기를 추가할 것으로 예상되는 것보다 훨씬 적게 사용합니다.
프로세스의 실제 메모리 사용량을 더 잘 이해하려면 /proc/<pid>/smaps
거기에 설명된 각 섹션을 살펴보고 값을 비교 Rss
해야 합니다 Shared_...
. 커널은 각 프로세스의 RSS 공유(그림 참조)를 계산하여 관심 있는 계산을 수행하도록 돕습니다 Pss
.