Apache는 9GB RAM을 사용하지만 htop에는 사용된 RAM이 2.7GB만 표시됩니다. 왜?

Apache는 9GB RAM을 사용하지만 htop에는 사용된 RAM이 2.7GB만 표시됩니다. 왜?

내 웹사이트가 하루 중 특정 시간에 매우 느려서 원인을 찾고 있습니다. 현재 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.

관련 정보