"맨 위"의 메모리 사용량이 합산되지 않는 이유는 무엇입니까?


28

때로는 top을 실행할 때 프로세스 테이블의 각 프로세스의 메모리 사용량이 총계에 합산되지 않는 것으로 나타났습니다.

예를 들어 아래 덤프에서 top은 16Gb의 메모리를 사용하고 있다고 말합니다. 그러나 프로세스 테이블에는 520MB 이상을 사용하는 두 개의 프로세스 만 표시됩니다. 다른 15.5Gb를 소비하는 것을 어떻게 알 수 있습니까? (CentOS를 사용하고 있습니다.)

$ 최고

상위-12:16:34 최대 45 일, 2:28, 3 명의 사용자,로드 평균 : 0.24, 0.65, 0.71
작업 : 총 274 개, 실행 중 1 개, 273 개 잠자기, 0 개 정지, 0 좀비
CPU : 2.3 % us, 0.2 % sy, 0.0 % ni, 97.5 % id, 0.0 % wa, 0.0 % hi, 0.0 % si, 0.0 % st
Mem : 총 16432032k, 16340144k 사용, 91888k 무료, 21736k 버퍼
스왑 : 총 18481144k, 1112k 사용, 18480032k 무료, 15624488k 캐시

  PID 사용자 PR NI VIRT RES SHR S % CPU % MEM TIME + 명령
18159 jsmith 15260m 31m 4560 S 16.6 0.2 53 : 35.64 파이썬
 4795 26 15260m 6608 4220 S 2.0 0.0 0 : 00.06 포스트 마스터
    1 근 15 0 10344680568 S 0.0 0.0 0 : 39.36 init
    2 루트 RT -500 S 0.0 0.0 0 : 00.53 마이그레이션 / 0
    3 근 34 10000 S 0.0 0.0 0 : 00.62 ksoftirqd / 0
    4 루트 RT -500 S 0.0 0.0 0 : 00.00 워치 독 / 0
    5 루트 RT -500 S 0.0 0.0 0 : 02.09 마이그레이션 / 1
    6 근 34 34 000 S 0.0 0.0 0 : 01.32 ksoftirqd / 1
    7 루트 RT -500 S 0.0 0.0 0 : 00.00 워치 독 / 1
    8 루트 RT -500 S 0.0 0.0 0 : 00.99 마이그레이션 / 2
    9 근 34 10000 S 0.0 0.0 0 : 01.74 ksoftirqd / 2
   10 루트 RT -500 S 0.0 0.0 0 : 00.00 워치 독 / 2
   11 루트 RT -500 S 0.0 0.0 0 : 02.16 마이그레이션 / 3
   12 근 34 34 000 S 0.0 0.0 0 : 01.30 ksoftirqd / 3
   13 루트 RT -500 S 0.0 0.0 0 : 00.00 워치 독 / 3
   14 루트 RT -500 S 0.0 0.0 0 : 01.94 마이그레이션 / 4
   15 루트 34 1000000 S 0.0 0.0 0 : 01.78 ksoftirqd / 4
   16 루트 RT -500 S 0.0 0.0 0 : 00.00 워치 독 / 4
   17 루트 RT -500 S 0.0 0.0 0 : 01.92 마이그레이션 / 5
   18 근 34 34 000 S 0.0 0.0 0 : 01.30 ksoftirqd / 5
   19 루트 RT -500 S 0.0 0.0 0 : 00.00 워치 독 / 5
   20 루트 RT -500 S 0.0 0.0 0 : 02.06 마이그레이션 / 6
   21 근 34 34 000 S 0.0 0.0 0 : 01.83 ksoftirqd / 6
   22 루트 RT -500 S 0.0 0.0 0 : 00.00 워치 독 / 6
   23 루트 RT -500 S 0.0 0.0 0 : 02.31 마이그레이션 / 7
   24 근 34 34 000 S 0.0 0.0 0 : 01.50 ksoftirqd / 7
   25 루트 RT -500 S 0.0 0.0 0 : 00.00 워치 독 / 7
   26 루트 10 -500 S 0.0 0.0 0 : 00.42 이벤트 / 0
   27 근 10 -500 000 S 0.0 0.0 0 : 00.28 사건 / 1
   28 근 10 -500 000 S 0.0 0.0 0 : 00.37 사건 / 2
   29 근 10 -500 S 0.0 0.0 0 : 00.21 사건 / 3
   30 근 10 -500 000 S 0.0 0.0 0 : 00.38 사건 / 4
   31 근 10 -500 000 S 0.0 0.0 0 : 00.27 사건 / 5
   32 근 10 -500 000 S 0.0 0.0 0 : 00.52 사건 / 6
   33 루트 10-5 5000 S 0.0 0.0 0 : 00.64 이벤트 / 7
   34 근 10 -500 S 0.0 0.0 0 : 00.00 khelper

답변:


26

상단의 메모리 사용 관련 줄에서 :

Mem: 16432032k total, 16340144k used, 91888k free, 21736k buffers
Swap: 18481144k total, 1112k used, 18480032k free, 15624488k cached

스왑을 무시합시다. 총 메모리는 사용 된 메모리와 사용 가능한 메모리의 합과 같습니다. 반면에, "실제로 사용되는 응용 프로그램"과 캐시 및 버퍼의 합이 사용됩니다. 따라서 귀하의 경우 다음과 같이 진행됩니다.

  • Mem = 16432032k = 16340144k + 91888k;
  • "응용 프로그램에서 실제로 사용"= 사용-(캐시 + 버퍼) = 16340144k-(15624488k + 21736k) = 693920k.

다른 15.5GB는 캐시됩니다. 이것은 성능을 향상시킵니다. 그러나 현재 응용 프로그램은 캐시 된 메모리의 일부를 필요로하므로 즉시 응용 프로그램에 제공됩니다. 메모리 부족 응용 프로그램 및 모니터를 실행하면이 사실을 알 수 있습니다 top.


1

그 목록은 274 total나에게 프로세스 처럼 보이지 않습니다 . 상단은 보통 터미널 / 화면에 맞는 내용 만 표시합니다. ps aux대신 사용 하고 rss값 (또는 버전에 표시되는 상주 메모리 열)을 더하십시오.

또한 가상 메모리 크기를 추가하고 싶지 않습니다. 실제로 상주 ( RES) 열에 관심이있는 것 같습니다 .

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