Linux 'top'명령의 출력을 해석하는 방법은 무엇입니까?


27

만든 토론 후 여기 방법에 대해 PHP-FPM메모리를 사용을, 나는 그냥 메모리 읽기에 문제가 발견 top명령을 사용합니다. 다음은 top다시 시작한 직후 의 스크린 샷입니다 PHP-FPM. 모든 것이 정상입니다 : 약 20 개의 PHP-FPM프로세스, 각각 5.5MB 메모리 (전체의 0.3 %)를 소비합니다.

여기에 이미지 설명을 입력하십시오

다음은 재시작 직전 PHP-FPM(이전 재시작 후 1 일) 오래된 서버 입니다. 여기에는 여전히 PHP-FPM이중 메모리 사용량 이있는 약 25 개가 있습니다 (10MB는 총 0.5 %를 나타냄). 따라서 사용 된 총 메모리는 600-700MB 여야합니다. 그렇다면 왜 1.6GB 메모리가 사용 되었습니까?

여기에 이미지 설명을 입력하십시오



@ephemient 아니오 여기에 해당되지 않습니다. 나는이 모든 것들을 점검했다. 이것은 PHP-FPM과 연결된 것으로, PHP-FPM 만 다시 시작하면 메모리가 해제됩니다. 어쨌든 Mem과 buffer / cache의 값 free은 동일합니다.
Googlebot

6
Virtuozzo "VM"을 실행중인 것 같습니다. 메모리 계산이 그에 관한 한 모든 베팅은 종료됩니다.
womble


친애하는 울부 짖음과 대담한 : 나는 당신의 대답을 모두 훔쳤습니다! cackles
웨슬리

답변:


34

TL; DR 1

서버가 일종의 virtuozzo / openvz / virtualization-du-jour 컨테이너 내에 있습니다. 메모리 사용을 이해하려고 노력하는 것은 풍차에서 기울어지고 있습니다.

TL; DR 2

리눅스는 당신의 RAM을 먹었다! 하지만 괜찮습니다. 모든 사람에게 적용됩니다.


긴 이야기

그것을 분해하자!

Mem:섹션에는 다음이 있습니다.

  • $n total: 머신의 실제 RAM 크기
  • $n used: 프로세스의 합뿐만 아니라 Linux가 소비하는 메모리 양.
  • $n free: Linux에서 사용하지 않는 RAM의 양 이것은 캐시 및 버퍼링 된 메모리가 본질적으로 "무료"라는 점을 고려하지 않습니다.
  • $n buffers: 버퍼 공간은 디스크 I / O 블록을 읽거나 쓰기를 보류중인 블록입니다. 버퍼는 단일 디스크 블록의 RAM 표현입니다.

Swap:섹션에는 다음이 있습니다.

  • $n total: 자기 설명. 페이지를 교환 할 수있는 디스크 공간.
  • $n used: 자기 설명. 사용 된 디스크 스왑 공간
  • $n free: 허프 디프.
  • $n cache: 위의 버퍼와 밀접한 관련이 있습니다. 실제로 페이지 캐시의 일부이며 실제 디스크에는 공간이 없습니다. 이 대화의 세부 사항에 대해 걱정하지 마십시오.

당신이 달릴 때 흥미로운 부분이 온다 free -m. 세 줄이 표시되고 모든 숫자가 상단과 상관됩니다. 내 PC를 예로 들어 보겠습니다.

             total       used       free     shared    buffers     cached
Mem:          8070       7747        323          0        253       5713
-/+ buffers/cache:       1780       6290
Swap:         5055          0       5055

Mem 행에는 총 RAM (MB $n total), 사용 된 양 ( $n used맨 위), 사용 가능한 양 ( $n free맨 위), 공유 된 양 (그것을 무시)이 표시되며 이제는 좋은 부분이됩니다! bufferscachedfree -m상관 관계, 예측, $n buffers$n cache. 그러나로 free -m시작 하는 두 번째 행을 살펴보십시오 -/+ buffers/cache:. 수학은 사용 된 양이 실제로 (총)-((사용 된 버퍼) 캐시 됨) 것을 보여줍니다. 무료는 (총)-(theNewUsed)입니다.

이 모든 것이 무엇을 의미합니까? 그것은 리눅스가 당신의 RAM을 먹었다 는 것을 의미합니다 ! 짧은 이야기는 리눅스 커널이 디스크 캐싱에 사용 가능한 RAM을 고갈 시킨다는 것입니다. 커스텀 커널을 컴파일하고 싶지 않다면 할 수있는 일은 없습니다. 전문가 팁 : 하지 마십시오.

RAM은 실제로 존재하며 프로세스가 자유롭게 사용할 수 있습니다. 의 -/+ buffers/cache:행 이 의미하는 바입니다 free -m. 그러나 하이퍼 바이저 가상화 컨테이너가 아닌 내부에있어 약간 문제가 있습니다. 이 시점에서는 바이트 정확도로 메모리를 비축 할 수 없습니다. 그러나 굉장히 특이한 행동은 보이지 않습니다.

평온을 유지하십시오. 또한 물리적 서버를 확보하십시오 (Kreskin과 같은 메모리 통계가 SysAdmin 인 경우를 제외하고).


사용 된 양이 ((사용 된 버퍼) 캐시되지 않습니까?)
mac

1

Top은 메모리 사용량을 확인하는 가장 좋은 방법은 아닙니다. 그러나 내 질문 은이 질문과 중복으로 표시되었으므로 여기에 내 해결책을 게시 할 것입니다.

나는 ps_mem.py가 당신을 위해 메모리 사용량을 확인할 포럼 을 읽었습니다 .

리포지토리 : https://github.com/pixelb/ps_mem/

다운로드 :

pip install ps_mem

용법:

ps_mem

산출:

# ps_mem
 Private  +   Shared  =  RAM used   Program

  4.0 KiB +  15.5 KiB =  19.5 KiB   udevd
  4.0 KiB +  16.0 KiB =  20.0 KiB   mysqld_safe
  4.0 KiB +  25.5 KiB =  29.5 KiB   dbus-daemon
  4.0 KiB +  27.5 KiB =  31.5 KiB   xinetd
 60.0 KiB +  14.5 KiB =  74.5 KiB   epmd
108.0 KiB +  23.0 KiB = 131.0 KiB   init
  8.0 KiB + 135.0 KiB = 143.0 KiB   saslauthd (2)
180.0 KiB +  34.0 KiB = 214.0 KiB   check_scripts.s
796.0 KiB +  41.0 KiB = 837.0 KiB   bash
528.0 KiB + 359.0 KiB = 887.0 KiB   crond (7)
  1.2 MiB + 218.0 KiB =   1.4 MiB   sshd (2)
  1.6 MiB +  45.0 KiB =   1.6 MiB   rsyslogd
  2.0 MiB + 133.0 KiB =   2.1 MiB   beam.smp
  1.3 MiB +   2.3 MiB =   3.6 MiB   httpd (8)
 12.8 MiB + 956.0 KiB =  13.8 MiB   sendmail.sendmail (7)
 53.5 MiB + 114.0 KiB =  53.7 MiB   mysqld
317.6 MiB +   2.3 MiB = 320.0 MiB   python (6)
---------------------------------
                        398.5 MiB
=================================
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.