top의 "buff / cache"및 "avail mem"필드는 무엇을 의미합니까?


28

top의 출력 내에 메모리 및 스왑 사용 라인에 "buff / cache"및 "avail Mem"으로 표시된 두 개의 필드가 있습니다.

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

이 두 분야는 무엇을 의미합니까?

나는 인터넷 검색을 시도했지만 결과는 일반적인 기사 만 표시하며 이러한 필드가 무엇을 의미하는지 설명하지 않습니다.

답변:


31

top의 맨 페이지는 필드를 설명하지 않지만 free의 내용 은 다음과 같습니다.

버퍼

커널 버퍼 Buffers에서 사용되는 메모리 ( in /proc/meminfo)

은닉처

페이지 캐시와 (석판에 의해 사용되는 메모리 CachedSReclaimable/proc/meminfo)

버프 / 캐시

버퍼와 캐시의 합

유효한

스와핑하지 않고 새 응용 프로그램을 시작하는 데 사용할 수있는 메모리 양 추정 캐시 또는 무료 필드에서 제공하는 데이터와는 달리,이 필드는 모든 재생 가능한 메모리 석판 인해 사용 (에있는 항목에 재생됩니다하지 않는 것이 또한 계정 페이지 캐시에 소요하고 MemAvailable있는 /proc/meminfo커널에 에뮬레이트, 커널 3.14 볼, 2.6.27+ 그렇지 않으면 무료와 동일)

기본적으로 '버프 / 캐시'는 디스크에 있거나 곧 끝나야하는 데이터에 사용 된 메모리를 계산하여 결과적으로 사용 가능할 수 있습니다 (해당 메모리는 즉시, 캐시의 경우 또는 충분한 시간이 주어질 수 있음) 버퍼의 경우-후자는 어쨌든 작게 유지됩니다); "사용 가능"은 더 많은 스와핑을 발생시키지 않고 할당 및 사용할 수있는 메모리의 양을 측정합니다 ( 분산에서 이식 가능한 메모리의 양을 어떻게 얻을 수 있습니까? 참조).


1
충분한 시간이 지나면 버퍼 / 캐시를 사용할 수 없습니다 . 프로그램에서 일부 메모리를 할당해야하는 경우 즉시 사용할 수 있는 메모리 세그먼트입니다 . linuxatemyram.com
DopeGhoti을

4

비트를 명확히하기 위해 버퍼기록 중인 데이터를 말합니다 . 기록이 완료 될 때까지 메모리를 회수 할 수 없습니다.

캐시읽은 데이터를 말합니다. 다시 읽어야 할 경우를 대비하여 보관하지만 디스크에서 항상 다시 읽을 수 있기 때문에 즉시 회수 할 수 있습니다.


그것이 실제로 여기서 의미하는 것은 아닙니다. 구체적 /proc/meminfo으로 필드가 Writeback있습니다. 이 별도의 필드는 Buffers, 그것은으로 표시됩니다 무엇 buffers에서 free -w. Buffers메모리 사용 의 일반적인 이유 는 다음과 같습니다. " RAM의 30 %가"버퍼 "입니다. 무엇입니까? "
sourcejedi

이것으로부터 ( access.redhat.com/solutions/406773 ) Writeback이 아직 디스크에 기록되지 않은 버퍼 부분이라고 생각합니다. 아니면 다른 말을하고 있습니까?
WallStProg

그 설명은 오해의 소지가 있습니다. Buffers(현재) 페이지 캐시의 일부입니다. 에 포함되지 Cached않지만의 일부로 계산됩니다 Active(file) + Inactive(file). Stephen Kitt의 답변에 대한 의견을 참조하십시오. Dirty는 페이지 캐시의 일부로 쓰여졌으므로 결국 디스크에 다시 써야합니다. Writeback포함되지 않습니다Dirty . 따라서 Writeback값의 일부가 아닙니다 Buffers.
sourcejedi

무엇 Buffers실제로 의미하는 블록 장치와 관련된 페이지 캐시입니다. 일부 파일 시스템은 이것을 내부적으로 사용합니다. 다른 사람들은 전혀 사용하지 않습니다. / "RAM의 30 %가 버퍼입니다"질문에 대한 답변을 수정합니다.
sourcejedi

2

이 정보의 표준 소스는 /usr/src/linux/Documentation/filesystems/proc.txt입니다.

버퍼 : 원시 디스크 블록에 대한 상대적 임시 저장은 대단히 큰 (그래서 20메가바이트 이상)하지합니다 캐시 파일은 디스크 (페이지 캐시)에서 읽기에 메모리 캐시를 :. SwapCached는 포함되어 있지 않습니다.

자세한 내용은 여기를 참조 하십시오 .

Linux 페이지 캐시 ( meminfo의 " Cached :")는 대부분의 시스템에서 RAM의 최대 단일 소비자입니다. 디스크의 파일에서 read ()를 수행 할 때마다 해당 데이터는 메모리로 읽히고 페이지 캐시 (1)로 이동합니다.
버퍼 캐시 ( meminfo의 " Buffers :")는 dentry / inode 캐시에 상대적으로 가깝습니다.

또는 분석과 같은 소스 코드를 .

금액은 buffers함수의 반환 값입니다.nr_blockdev_pages(void)

long nr_blockdev_pages(void)
{
        struct block_device *bdev;
        long ret = 0;
        spin_lock(&bdev_lock);
        list_for_each_entry(bdev, &all_bdevs, bd_list) {
                ret += bdev->bd_inode->i_mapping->nrpages;
        }
        spin_unlock(&bdev_lock);
        return ret;
}

금액 cached:

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