htop은 free 또는 top보다 훨씬 높은 메모리 사용량을 보고합니다.

htop은 free 또는 top보다 훨씬 높은 메모리 사용량을 보고합니다.

기본적으로 다음 세 가지 출력이 동시에 얻어집니다.

맨 위:

top - 02:54:36 up 2 days, 13:50,  3 users,  load average: 0.05, 0.05, 0.09
Tasks: 181 total,   1 running, 179 sleeping,   0 stopped,   1 zombie
%Cpu(s):  2.5 us,  0.8 sy,  0.0 ni, 96.6 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:  16158632 total, 11234480 used,  4924152 free,      844 buffers
KiB Swap: 16777212 total,        0 used, 16777212 free, 10640832 cached

무료 -h:

             total       used       free     shared    buffers     cached
Mem:           15G        10G       4.7G         0B       844K        10G
-/+ buffers/cache:       578M        14G
Swap:          15G         0B        15G

맨 위: 맨 위

free와 top이 동의하는 것 같습니다. 상단은 11234480KiB를 사용하며 캐시된 10640832KiB를 빼면 579.7MiB가 됩니다. 이는 사용된 +/- 버퍼/캐시 아래의 무료 보고서에 매우 가깝습니다.

그러나 htop은 내가 아는 한 존재하지도 존재하지도 않는 1836(MiB)을 사용하여 보고합니다. 이 차이는 어디에서 오는가? htop은 분명히 캐시된 데이터를 포함하지 않지만 여전히 free 또는 top의 3배 이상의 메모리 사용량을 보고합니다.

비슷한 질문이 많이 있다는 것을 알고 있지만 이 차이점을 설명하는 질문은 본 적이 없습니다. 혼란은 일반적으로 캐시 개수가 있거나 없는 것 같습니다.

편집: 저는 openSUSE를 실행하고 있으며 버전 12.2와 12.3 RC1에서 동일한 차이점을 발견했다는 점을 언급해야 합니다.

Edit2: htop에 포함된 버전은 1.0.1입니다. 또한 소스에서 버전 1.0.2를 컴파일했는데 동일한 차이점이 나타났습니다.

답변1

이전 게시물을 완전히 다시 작성했습니다. 조금 궁금해서 좀 더 살펴보았습니다.

간단히 말해서, 차이점이 있는 이유는 openSUSE가 패치 버전을 사용하기 때문입니다.맨 위그리고무료이것은 추가적인 가치를 더해줍니다'은닉처'.


가) 표준 버전

상단, 무료, htop, ...:

사용량은 읽어서 계산됩니다.데이터 출처: /proc/meminfo:

예를 들어:

#free:
Row   Column  | Corresponding /proc/meminfo entry
-----|--------|----------------------------------
Mem:

      total   : MemTotal
      used    : MemTotal - MemFree
      free    : MemFree
      shared  : MemShared
      buffers : Buffers
      cached  : Cached
-----|--------|----------------------------------
-/+ buffers/cache:

      used    : (MemTotal - MemFree) - (Buffers + Cached)
      free    :  MemFree             + (Buffers + Cached)

#htop:
    Used U*   : ((MemTotal - MemFree) - (Buffers + Cached)) / 1024

* 유저모드에서 사용하는 메모리 이름을 사용합니다 . Used U아카빼기(캐시+버퍼) 사용.

따라서 실제로는 동일한 계산이 사용됩니다.

htop메모리 측정기에 다음이 표시됩니다.

[Used U % of total | Buffers % of total | Cached % of total ] UsedU MB

(MB는 실제로 MiB입니다.)


나) 패치 버전

freeDebian, Fedora, openSuse 는 다음을 기반으로 top합니다 .procps-ng. 그러나 각 스타일은 기본 프로젝트의 일부가 될 수도 있고 그렇지 않을 수도 있는 자체 패치를 추가합니다.

오픈수세에서우리는 발견한다top/free(procps) 패키지에 대한 다양한 추가 사항입니다. 여기서 주목할 점은 캐시된 값을 표현하는 데 사용되는 몇 가지 추가 값입니다.(내 시스템이 "클린" 프로세스를 사용하기 때문에 이전 게시물에는 이러한 내용을 포함하지 않았습니다.)

B.1) 보충

/proc/meminfo에는투수판이것은 커널 데이터 구조 캐시입니다. 우리가 찾는 하위 카테고리로는S 재활용 가능이는 Slab의 일부이며 커널 및 사용자 모드에서 다른 용도로 재활용할 수 있습니다.

더 나아가 우리는캐시 교환이는 한 번 스왑 아웃되고 스왑 인되었지만 스왑 파일에도 있는 메모리입니다. 따라서 다시 교체해야 하는 경우 이미 완료되었습니다.

마지막으로NFS_불안정서버로 전송되었지만 아직 안정적인 저장소에 커밋되지 않은 페이지입니다.

cacheopenSUSE 패치 릴리스에는 다음 값이 추가되었습니다.

SReclaimable
SwapCached
NFS_Unstable

(또한 몇 가지 검사가 있는데, 총계는 여유 공간보다 커야 하고, 사용된 양은 버퍼 + 캐시보다 커야 합니다.)

B.2) 결과

보고 있다무료이므로 다음 값은 동일합니다. total, used, free and buffers.

변경 사항은 다음과 같습니다: cached and "+/- buffers".

used    = MemTotal - MemFree

old:
    cached         : Cached
    +-/buffers-used: used - (Buffers + Cached)
    +/-buffers-free: free + (Buffers + Cached)

patched:
    cached         : Cached + SReclaimable + SwapCached + NFS_Unstable
    +/-buffers-used: used - (Buffers + Cached + SReclaimable +
                     SwapCached + NFS_Unstable)
    +/-buffers-free: free + (Buffers + Cached + SReclaimable +
                     SwapCached + NFS_Unstable)

같은 추가를 하세요맨 위.

맨 위변경 사항이 없으므로 이전/또는 패치가 적용되지 않은 상위/무료 버전과만 일치합니다.

관련 정보