CentOS(Linux)에서 파일 캐시를 제한하는 방법은 무엇입니까? Linux에서 Swappiness 및 캐싱 설정 Linux 커널에서 캐시 캐시 관리 2.4.

/ 켜지지 않음
Linux에서는 거의 모든 명령에 GUI가 없습니다. 액세스 서버에서 작업할 때는 셸만 사용하세요. 그래서 오늘은 Linux 시스템에서 메모리 사용량을 확인하는 데 사용할 수 있는 명령을 보여 드리겠습니다. 메모리에는 RAM과 스왑이 포함됩니다.

서버의 공유 및 프로세스 메모리 사용량과 사용되지 않는 리소스를 확인하는 것이 중요한 경우가 많습니다. 웹 서버를 실행하는 경우 서버에는 사이트 방문자에게 서비스를 제공할 만큼 충분한 메모리가 있어야 합니다. 그렇지 않은 경우 트래픽이 급증할 때 단순히 메모리가 부족하기 때문에 사이트가 매우 느려지거나 액세스할 수 없게 됩니다. 데스크톱 컴퓨터에서 일어나는 일과 동일합니다.

1. 자유 명령

free 명령은 Linux에서 메모리 사용량을 확인하는 데 사용할 수 있는 가장 간단하고 쉬운 명령입니다. 다음은 간단한 예입니다.

$ free -m 캐시된 총 사용된 여유 공유 버퍼 Mem: 7976 6459 1517 0 865 2248 -/+ 버퍼/캐시: 3344 4631 스왑: 1951 0 1951

옵션 -중모든 데이터를 메가바이트 단위로 표시합니다. 총 총량 숫양시스템에 7976MB, 즉 8GB가 설치되어 있습니다. 열 사용된 Linux에서 사용할 수 있는 RAM의 양을 보여줍니다. 이 경우 약 6.4GB입니다. 여기서 중요한 점은 스피커입니다. 캐시된그리고 버퍼. 두 번째 줄에는 4.6GB가 무료라고 나와 있습니다. 이는 버퍼와 캐시 메모리가 추가된 첫 번째 줄의 여유 메모리입니다.

Linux에는 필요할 때 메모리를 확보하고 사용할 수 있도록 성능을 향상시키기 위해 캐싱하는 습관이 있습니다.
마지막 줄은 메모리 스왑( 교환), 이 경우에는 완전 무료입니다.

2. /proc/meminfo

메모리 사용량을 확인하는 다음 방법은 /proc/meminfo 파일을 읽는 것입니다. /proc 파일 시스템에는 실제 파일이 포함되어 있지 않습니다. 커널과 시스템에 대한 동적 정보가 포함된 가상 파일입니다.

$ cat /proc/meminfo MemTotal: 8167848 kB MemFree: 1409696 kB 버퍼: 961452 kB 캐시: 2347236 kB SwapCached: 0 kB 활성: 3124752 kB 비활성: 2781308 kB 활성(anon): 2603376 kB 비활성(anon): 30 9,056kB 활성 ( 파일): 521376 kB 비활성(파일): 2472252 kB 제거 불가능: 5864 kB 잠금: 5880 kB SwapTotal: 1998844 kB SwapFree: 1998844 kB Dirty: 7180 kB 쓰기 저장: 0 kB AnonPages: 2603272 kB 매핑됨: 78838 0kB Shmem: 311596kB 슬래브 : 200468 kB SReclaimable: 151760 kB SUnreclaim: 48708 kB KernelStack: 6488 kB PageTables: 78592 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6082768 kB Committed_AS: 9397536 kB VmallocTo 총 개수: 34359738367kB Vmalloc 사용됨: 420204kB VmallocChunk: 34359311104 kB 하드웨어 손상됨: 0 kB AnonHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 62464 kB DirectMap2M: 8316928 kB

RAM 사용 및 스왑(스왑 파티션)과 관련된 Ubuntu의 동작을 변경해 보겠습니다. vm.swappiness라는 매개변수가 있습니다. 이 매개변수는 기본값이 60이고 스왑 파티션으로의 페이지 활성 덤프가 시작되는 여유 메모리 비율을 제어합니다. 즉, 점유된 메모리의 100-60=40%에서 Ubuntu는 이미 스왑 파티션을 사용하기 시작합니다. ~에 대량컴퓨터의 RAM이 있는 경우 vm.swappiness 매개변수를 10으로 변경하여 점유된 RAM이 100-10=90%에 도달할 때까지 Ubuntu에서 스왑을 사용하지 않도록 명령하는 것이 좋습니다. 값을 60 대신 10으로 설정해 보겠습니다. 콘솔에서 다음 명령을 입력합니다.

에코 10 > /proc/sys/vm/swappiness

Sysctl -w vm.swappiness=10

재부팅 후 설정을 저장하려면 /etc/sysctl.conf 파일 끝에 다음 줄을 추가합니다.

Vm.swappiness=10

설정을 즉시 적용하려면:

Sysctl -p

또한 몇 가지 추가 매개 변수에 대해 이야기할 수 있습니다.
의사 파일 vfs_cache_press에는 캐시에 할당된 메모리 수준인 값이 저장됩니다. 기본값: 100. 이 매개변수를 늘리면 커널이 캐시에서 사용되지 않는 메모리 페이지를 더 적극적으로 덤프하게 됩니다. 캐시에 할당된 RAM의 양은 더 느리게 증가하므로 스왑 파티션이 사용될 가능성이 줄어듭니다. 반대로 이 매개변수를 줄이면 커널은 스왑을 포함하여 캐시의 메모리 페이지를 더 오랫동안 유지하게 됩니다. 이는 RAM의 양이 적을 때(예: 512MB의 메모리가 있는 경우) 의미가 있습니다. vfs_cache_압력 매개변수를 50으로 설정할 수 있습니다. 이렇게 하면 스왑 파티션의 디스크 작업 수가 줄어들므로 사용되지 않는 페이지를 제거하는 빈도가 줄어듭니다. 이 매개변수를 더 줄이면 메모리 부족이 발생할 수 있습니다.
시스템 속도를 높이려면 RAM이 충분하고(2GB 이상) 시스템 값을 다음과 같이 변경하십시오: swappiness = 10, vfs_cache_press = 1000(기본값 100), /etc/sysctl에 다음 행을 추가하십시오. .conf 파일:

Vm.vfs_cache_압력=1000

또는 즉석에서:

Sysctl -w vm.vfs_cache_압력=1000

Linux의 캐싱

(모든 프로그램에 의해) 데이터가 디스크에 기록되면 Linux는 이 정보를 페이지 캐시라는 메모리 영역에 캐시합니다. 이 메모리 영역에 대한 정보는 free, vmstat 또는 top 명령을 사용하여 볼 수 있습니다. 전체 정보/proc/meminfo 파일에서 이 메모리 영역에 대해 확인할 수 있습니다. 다음은 4GB RAM이 있는 서버에 있는 이 파일의 예입니다.

메모리 합계: 3950112kB
MemFree: 622560kB
버퍼: 78048kB
캐시됨: 2901484kB
SwapCached: 0kB
활성: 3108012kB
비활성: 55296kB
높음: 0kB
하이프리: 0kB
낮음총계: 3950112kB
LowFree: 622560kB
스왑 총합: 4198272kB
스왑프리: 4198244kB
더티: 416kB
쓰기 저장: 0kB
매핑됨: 999852kB
슬래브: 57104kB
Committed_AS: 3340368kB
페이지 테이블: 6672kB
Vmalloc전체: 536870911kB
Vmalloc 사용됨: 35300kB
VmallocChunk: 536835611kB
HugePages_Total: 0
HugePages_Free: 0
거대한 페이지 크기: 2048kB

페이지 캐시 크기는 "캐시됨" 매개변수에 표시되며, 이 예에서는 2.9GB입니다. 페이지가 메모리에 기록되면 "Dirty" 매개변수의 크기가 늘어납니다. 디스크에 쓰기를 시작하면 기록이 끝날 때까지 "쓰기 저장" 매개변수가 증가합니다. 입/출력(I/O) 작업이 대기열에 있지만 아직 디스크에 기록되지 않은 폴링 중에만 값이 증가하기 때문에 "Writeback" 매개 변수가 높다고 보기는 매우 어렵습니다.
Linux는 일반적으로 pdflush 프로세스를 사용하여 캐시 데이터를 디스크에 씁니다. 언제든지 시스템에서는 2~8개의 pdflush 스레드가 실행되고 있습니다. /proc/sys/vm/nr_pdflush_threads 파일에서 얼마나 많은지 확인할 수 있습니다. 지금은활성 스레드. 기존의 모든 pdflush 스레드가 최소 1초 동안 사용 중일 때마다. 새 스레드는 사용 가능한 장치 대기열에 데이터를 쓰려고 시도합니다. 활성 장치캐시에서 데이터를 플러시하는 스레드가 1개 있었습니다. pdflush에서 아무런 활동 없이 1초가 지날 때마다 1개의 스레드가 제거됩니다. Linux에서는 pdflush 스레드의 최소 및 최대 수를 구성할 수 있습니다.

PDFlush 설정
각 pdflush 스레드는 /proc/sys/vm의 여러 매개변수로 제어됩니다.

  • /proc/sys/vm/dirty_writeback_centisecs (기본값 500): 100분의 1초 단위입니다. 이 설정은 pdflush가 디스크에 데이터 쓰기를 재개하는 빈도를 나타냅니다. 기본적으로 5초마다 2개의 스레드가 재개됩니다.
    pdflush 프로세스가 데이터를 보다 적극적으로 캐시할 수 있도록 dirty_writeback_centisecs를 줄이려는 시도를 방해하는 문서화되지 않은 동작이 있을 수 있습니다. 예를 들어, 2.6 Linux 커널의 초기 버전에서 mm/page-writeback.c 파일에는 "디스크 쓰기가 dirty_writeback_centisecs 매개변수보다 오래 걸리는 경우 간격을 1초로 설정하십시오"라는 논리가 포함되어 있습니다. 이 로직은 커널 코드에만 설명되어 있으며, 그 동작은 리눅스 커널 버전에 따라 다릅니다. 이는 그다지 좋지 않기 때문에 이 매개변수를 줄이지 않도록 보호됩니다.
  • code>/proc/sys/vm/dirty_expire_centiseconds (기본값 3000): 1/100초 단위입니다. 이 매개변수는 데이터를 디스크에 쓰기 전에 캐시에 남아 있을 수 있는 기간을 지정합니다. 기본값은 매우 길며 30초입니다. 이는 다음을 의미합니다. 정상 작동다른 pdflush 메소드를 호출하기에 충분한 데이터가 캐시에 기록될 때까지 Linux는 30초 미만 동안 캐시에 있었던 디스크에 데이터를 쓰지 않습니다.
  • /proc/sys/vm/dirty_Background_ratio (기본값 10): 디스크에 데이터를 쓰기 전에 페이지 캐시로 채울 수 있는 RAM의 최대 비율입니다. 일부 Linux 커널 버전에서는 이 매개변수를 5%로 설정할 수 있습니다.
    대부분의 문서에서는 이 매개변수를 전체 RAM의 백분율로 설명하지만 소스 코드리눅스 커널은 그렇지 않습니다. meminfo를 보면 dirty_ground_ratio 매개변수는 MemFree + Cached - Mapped 값에서 계산됩니다. 따라서 데모 시스템의 경우 10%는 250MB보다 약간 작지만 400MB는 아닙니다.

pdflush는 언제 녹음을 시작하나요?
기본 구성에서 디스크에 기록된 데이터는 다음과 같은 경우까지 메모리에 유지됩니다.

서버에서 쓰기 작업이 자주 발생하는 경우 언젠가는 dirty_ground_ratio 매개변수에 도달하게 되며, dirty_expire_centiseconds 매개변수가 만료될 때까지 기다리지 않고 디스크에 대한 모든 쓰기가 이 매개변수를 통해서만 진행되는 것을 볼 수 있습니다.

페이지 작성 과정
/proc/sys/vm/dirty_ratio 매개변수(기본값 40)는 pdflush가 디스크에 데이터를 쓰기 전에 페이지 캐시에 할당할 수 있는 총 RAM의 최대 비율입니다.

참고: 디스크에 쓰는 동안 쓰기 버퍼를 채운 프로세스뿐 아니라 모든 쓰기 프로세스가 차단됩니다. 이로 인해 하나의 프로세스가 시스템의 모든 I/O 작업을 차단할 수 있습니다.

쓰기 집약적인 작업을 위해 Linux를 최적화하기 위한 모범 사례
일반적으로 디스크 하위 시스템의 성능을 높이려고 할 때 Linux가 한 번에 너무 많은 정보를 버퍼링하는 문제에 직면합니다. 이는 fsync 호출을 사용하여 파일 시스템 동기화가 필요한 작업에서 특히 두드러집니다. 이러한 호출 중에 캐시에 많은 데이터가 있으면 이 호출이 끝날 때까지 시스템이 정지될 수 있습니다.
또 다른 일반적인 문제는 물리적 디스크에 쓰기가 시작되기 전에 너무 많은 내용을 써야 하고 I/O 작업이 일반 작업보다 더 자주 발생하기 때문에 발생합니다.

  • dirty_ground_ratio: 기본 조정 도구입니다. 일반적으로 이 매개변수는 감소됩니다. 목표가 캐시에 저장되는 데이터의 양을 줄여서 데이터가 한꺼번에 기록되지 않고 점진적으로 디스크에 기록되도록 하는 것이라면 이 매개변수를 줄이는 것이 가장 효과적인 방법입니다. 기본값은 RAM이 많고 디스크가 느린 시스템에 가장 적합합니다.
  • dirty_ratio: 구성해야 할 두 번째로 중요한 매개변수입니다. 이 설정을 크게 줄이면 디스크에 써야 하는 응용 프로그램이 모두 차단됩니다.
  • dirty_expire_centisecs: 이 매개변수를 줄이되 너무 많이 줄이지는 마세요. 이를 통해 페이지가 디스크에 기록되기 전에 캐시에서 소비하는 시간을 줄일 수 있지만, 반면에 이는 디스크에 대한 평균 쓰기 속도를 크게 감소시키며 이는 특히 느린 디스크가 있는 시스템에서 두드러집니다.

결과적으로 우리는
/etc/sysctl.conf 파일에 다음을 추가합니다.

Vm.dirty_Background_ratio = 10 vm.dirty_ratio = 40

그런 다음 캐시와 디스크 데이터를 동기화하고 캐시를 지우고 매개변수를 저장합니다.

동조; 에코 3 > /proc/sys/vm/drop_caches; sysctl -p

디스크 쓰기 마무리 횟수를 줄이려면 다음을 조정해야 합니다.

Vm.dirty_writeback_centisecs = 15000

다른 것과 마찬가지로 운영 체제,Linux는 RAM을 사용하면 매우 효율적입니다. 사용 가능한 메모리는 프로세스 간에 자유롭게 분배되고, 사용되지 않은 페이지는 디스크의 스왑 파티션으로 플러시되며, 메모리 오버플로가 발생하는 경우 커널에 내장된 특수 메커니즘이 트리거되어 모든 프로세스를 분석하고 범인을 제거합니다.

프로세스가 디스크에 데이터를 쓰면 커널에 의해 별도의 캐시에 저장됩니다. 이 캐시는 꽤 많은 공간을 차지하는 경우가 많습니다. 이 기사에서는 Linux에서 메모리를 확보하는 방법, 더 정확하게는 프로그램에서 생성된 캐시를 지우는 방법을 살펴보겠습니다.

모든 Linux 배포판에서는 세 가지 명령을 사용하여 Linux 메모리 캐시를 지울 수 있습니다. 또한 어떤 프로세스도 완료할 필요가 없습니다. 다음 명령은 다음과 같습니다.

PageCache 지우기:

동조; 에코 1 > /proc/sys/vm/drop_caches

inode 및 덴트리 청소:

동조; 에코 2 > /proc/sys/vm/drop_caches

inode, dentrie 및 PageCache 청소:

동조; 에코 3 > /proc/sys/vm/drop_caches

이러한 명령을 실행하기 전에 다음을 실행하십시오.

각 명령을 작동하려면 수퍼유저 권한이 필요하기 때문에 이는 필요합니다. 이제 이러한 명령이 실행될 때 어떤 일이 발생하는지 살펴보겠습니다.

동기화 유틸리티는 시스템이 캐시되었지만 아직 기록되지 않은 모든 데이터를 디스크에 쓰도록 강제합니다. 이는 가능한 한 많은 메모리를 확보하는 데 필요합니다. 기본적으로 데이터는 디스크에 기록된 후 캐시에서 삭제되지 않습니다. 이는 필요한 경우 프로그램이 더 빨리 읽을 수 있도록 하기 위해 필요합니다.

sync 명령을 실행하지 않으면 일부 공간이 확보되지만 실행한 후에는 결과가 더 좋아질 것입니다.

분단의 상징; 다른 명령을 실행하기 전에 첫 번째 명령이 완료될 때까지 기다리도록 쉘에 지시합니다. 마지막 명령 echo 1 > /proc/sys/vm/drop_caches는 /proc/sys/vm/drop_caches 파일에 값 1을 씁니다. 이는 우리가 선택한 캐시 유형을 지워야 한다는 신호를 커널에 보냅니다.

Linux의 캐시 유형

이제 이러한 명령을 지울 수 있는 캐시 유형과 작동 방식을 살펴보겠습니다.

페이지캐시또는 페이지 캐시는 커널이 디스크에 쓰거나 디스크에서 읽는 모든 데이터를 저장하는 곳입니다. 프로그램에 동일한 데이터가 두 번째로 필요한 경우 간단히 RAM에서 가져오므로 시스템 속도가 크게 향상됩니다. 하지만 이런 이유로 이 캐시가 가장 많은 공간을 차지합니다.

무료 유틸리티를 사용하여 페이지 캐시의 크기를 볼 수 있습니다. 여기에서는 마지막 열에 캐시된 내용이 표시됩니다.

이 유형의 캐시는 삭제하기에 가장 효율적이고 안전합니다.

아이노드와 덴트리 캐시파일 시스템에도 적용됩니다. 기록되는 것은 데이터 자체가 아니라 파일 시스템의 구조, 파일 및 폴더의 위치입니다. 파일 위치나 폴더 내용을 요청하면 커널은 이 모든 정보를 포함하는 특수 구조를 생성합니다. 다음에 요청이 이루어지면 구조는 이미 메모리에 저장됩니다. 각 파일 시스템에는 자체 inode 캐시와 공유 dentrie 캐시가 있습니다.

이 캐시는 메모리를 거의 차지하지 않습니다. 데이터는 바이트 단위로 표시되며 보시다시피 매우 작습니다. 다음 명령을 사용하여 볼 수 있습니다.

고양이 /proc/slabinfo | egrep dentry\|inode

메모리가 거의 소비되지 않고 파일 시스템을 새로 검사하는 데 비교적 오랜 시간이 걸리기 때문에 Linux 메모리를 확보하기 위해 이를 지우는 것은 권장되지 않습니다.

캐시를 지워야 합니까?

첫째, 사용 중인 메모리가 많은 경우 페이지 캐시를 지우는 것이 좋습니다. 특히 페이지 캐시가 많은 메모리를 차지하는 경우라면 더욱 그렇습니다. 둘째, 파일 시스템이나 커널 설정을 변경하고 이것이 읽기/쓰기 작업 속도에 어떤 영향을 미쳤는지 확인하려는 경우 Linux 메모리 캐시를 지워야 할 수 있습니다. 이 경우 모든 캐시를 지우고 재부팅하지 않고도 수행할 수 있어 매우 편리합니다.

Linux 운영 체제는 디스크에 액세스하기 전에 디스크 캐시를 확인하고 필요한 데이터가 있으면 디스크에 액세스하지 않도록 설계되었습니다. Linux 캐시를 지우면 운영 체제가 디스크에서 데이터를 찾아야 하기 때문에 약간 느리게 실행됩니다.

자동 캐시 삭제

cron 작업 스케줄러를 이용하여 매일 새벽 2시에 자동으로 메모리 캐시를 지우는 방법을 살펴보겠습니다.

먼저 생성해보자 배시 스크립트다음 내용으로:

sudo vi /usr/local/bin/clearcache.sh

동기화; 에코 1 > /proc/sys/vm/drop_caches

페이지 캐시가 가장 많이 차지하므로 페이지 캐시만 지울 것입니다. 시스템 성능이 불필요하게 저하되지 않도록 다른 유형은 건드리지 않겠습니다.

sudo chmod 755 /usr/local/bin/clearcache.sh

남은 것은 크론 스케줄러에 작업을 추가하는 것뿐입니다. 이렇게 하려면 다음 명령을 실행하세요.

그리고 열리는 편집기에서 다음 줄을 추가합니다.

0 2 * * * /usr/local/bin/clearcache.sh

이제 이 스크립트는 매일 밤 실행되어 서버가 정상적으로 실행될 수 있도록 메모리를 정리합니다.

메모리 캐시 크기 설정

매번 캐시를 지우지 않는 것이 훨씬 편리하지만 제한을 설정하면 초과하면 시스템 자체에서 불필요한 페이지가 삭제됩니다. 시스템이 캐시에 사용할 수 있는 메가바이트 수를 명시적으로 제한할 수는 없습니다. 사용 가능한 모든 메모리는 필요에 따라 사용되지만 만료된 페이지가 캐시에서 제거되는 속도는 조정할 수 있습니다.

/proc/sys/vm/vfs_cache_press 파일이 이를 담당합니다. 여기에는 캐시에서 페이지를 얼마나 적극적으로 제거해야 하는지에 대한 상대적인 측정값이 포함되어 있습니다. 기본적으로 매개변수는 100으로 설정됩니다. 이 매개변수를 줄이면 커널이 페이지를 덜 자주 삭제하게 되고 이로 인해 캐시가 매우 빠르게 증가하게 됩니다. 0으로 설정하면 페이지가 전혀 삭제되지 않습니다. 값이 100보다 크면 캐시 크기가 더 느리게 증가하고 사용하지 않는 페이지가 즉시 제거됩니다.

예를 들어 최소 캐시 크기를 만들어 보겠습니다.

에코 1000 > /proc/sys/vm/vfs_cache_press

데이터가 캐시 대신 디스크에서 읽혀지기 때문에 시스템 성능이 크게 저하된다는 점을 잊지 마십시오.

스왑 메모리를 지우는 방법

스왑 공간을 지우는 것은 매우 쉽습니다. 이렇게 하려면 다음을 실행하세요.

swapoff -a && swapon -a

스왑을 지우면 모든 데이터가 RAM으로 다시 전송된다는 점을 명심하세요.

결론

그게 다야. Linux 캐시를 지우고 메모리를 확보하는 방법을 이미 알고 있습니다. 이 문서에 제공된 모든 명령은 수퍼유저로 실행되어야 한다는 점을 잊지 마십시오. 그렇지 않으면 아무 것도 작동하지 않습니다. 궁금한 점이 있다면 댓글로 질문해주세요!

관련 게시물:


최근 한 곳에서 가상 서버디스크에 쓰는 데 시간이 오래 걸리는 문제가 발생했습니다. 그리고 이 주제에서 저는 Linux에서 디스크 쓰기 작업 캐싱의 기능을 자세히 설명하는 흥미로운 주제를 발견했습니다. 오늘은 이 글의 번역이 있을 예정입니다.

Linux의 캐싱

(모든 프로그램에 의해) 데이터가 디스크에 기록되면 Linux는 이 정보를 페이지 캐시라는 메모리 영역에 캐시합니다. 이 메모리 영역에 대한 정보는 다음 명령을 사용하여 볼 수 있습니다. 무료, vmstat또는 맨 위. 이 메모리 영역에 대한 전체 정보는 파일에서 찾을 수 있습니다. /proc/meminfo. 다음은 4GB RAM이 있는 서버에 있는 이 파일의 예입니다.

MemTotal: 3950112kB MemFree: 622560kB 버퍼: 78048kB 캐시됨: 2901484kB SwapCached: 0kB 활성: 3108012kB 비활성: 55296kB HighTotal: 0kB HighFree: 0kB LowTotal: 3950112kB LowFree: 62256 0kB 스왑 총계: 4198272kB 스왑 프리 : 4198244kB 더티: 416kB 쓰기 저장: 0kB 매핑됨: 999852kB 슬래브: 57104kB Committed_AS: 3340368kB 페이지 테이블: 6672kB VmallocTotal: 536870911kB VmallocUsed: 35300kB VmallocChunk: 611kB HugePages_Total: 0 HugePages_Free: 0 Hugepagesize: 2048 kB

페이지 캐시 크기는 "캐시됨" 매개변수에 표시되며, 이 예에서는 2.9GB입니다. 페이지가 메모리에 기록되면 "Dirty" 매개변수의 크기가 늘어납니다. 디스크에 직접 쓰기를 시작하면 기록이 끝날 때까지 "Writeback" 매개변수가 증가합니다. 입/출력(I/O) 작업이 대기열에 있지만 아직 디스크에 기록되지 않은 폴링 중에만 값이 증가하기 때문에 "Writeback" 매개 변수가 높다고 보기는 매우 어렵습니다.
Linux는 일반적으로 프로세스를 사용하여 캐시에서 디스크로 데이터를 씁니다. pdflush. 언제든지 시스템에는 2~8개의 스레드가 실행됩니다. pdflush. 파일에 있음 /proc/sys/vm/nr_pdflush_threads현재 활성화된 활성 스레드 수를 확인할 수 있습니다. 기존의 모든 pdflush 스레드가 최소 1초 동안 사용 중일 때마다. 새 스레드는 장치 대기열을 비우기 위해 데이터를 쓰려고 시도하므로 각 활성 장치에 대해 캐시에서 데이터를 플러시하는 1개의 스레드가 있습니다. pdflush에서 아무런 활동 없이 1초가 지날 때마다 1개의 스레드가 제거됩니다. Linux에서는 pdflush 스레드의 최소 및 최대 수를 구성할 수 있습니다.

PDFlush 설정

각 pdflush 스트림은 다음의 여러 매개변수로 제어됩니다. /proc/sys/vm:

  • /proc/sys/vm/dirty_writeback_centisecs(기본값 500): 100분의 1초 단위입니다. 이 설정은 pdflush가 디스크에 데이터 쓰기를 재개하는 빈도를 나타냅니다. 기본적으로 5초마다 2개의 스레드가 재개됩니다.
    pdflush 프로세스가 데이터를 보다 적극적으로 캐시할 수 있도록 dirty_writeback_centisecs를 줄이려는 시도를 방해하는 문서화되지 않은 동작이 있을 수 있습니다. 예를 들어, 2.6 Linux 커널의 초기 버전에서 mm/page-writeback.c 파일에는 "디스크 쓰기가 dirty_writeback_centisecs 매개변수보다 오래 걸리는 경우 간격을 1초로 설정하십시오"라는 논리가 포함되어 있습니다. 이 로직은 커널 코드에만 설명되어 있으며, 그 동작은 리눅스 커널 버전에 따라 다릅니다. 이는 그다지 좋지 않기 때문에 이 매개변수를 줄이지 않도록 보호됩니다.
  • /proc/sys/vm/dirty_expire_centiseconds(기본값 3000): 100분의 1초 단위입니다. 이 매개변수는 데이터를 디스크에 쓰기 전에 캐시에 남아 있을 수 있는 기간을 지정합니다. 기본값은 매우 길며 30초입니다. 이는 정상적인 작동 중에 다른 pdflush 메소드를 호출하기에 충분한 데이터가 캐시에 기록될 때까지 Linux가 30초 미만 동안 캐시에 있었던 디스크에 데이터를 쓰지 않음을 의미합니다.
  • /proc/sys/vm/더티_배경_비율(기본값 10): 디스크에 데이터를 쓰기 전에 페이지 캐시로 채울 수 있는 RAM의 최대 비율입니다. Linux 커널의 일부 버전에서는 이 매개변수를 5%로 설정할 수 있습니다.

    대부분의 문서에서는 이 설정을 전체 RAM의 백분율로 설명하지만 Linux 커널 소스 코드에 따르면 그렇지 않습니다. meminfo를 보면 dirty_ground_ratio 매개변수는 다음 값에서 계산됩니다. MemFree + 캐시됨 - 매핑됨. 따라서 데모 시스템의 경우 10%는 250MB보다 약간 작지만 400MB는 아닙니다.

전체: pdflush는 언제 녹음을 시작합니까?

기본 구성에서 디스크에 기록된 데이터는 다음과 같은 경우까지 메모리에 유지됩니다.

  • 30초 이상 메모리에 남아 있습니다.
  • 캐시된 페이지는 작업 메모리의 10% 이상을 차지합니다.

서버에서 쓰기 작업이 자주 발생하는 경우 언젠가는 dirty_ground_ratio 매개변수에 도달하게 되며, dirty_expire_centiseconds 매개변수가 만료될 때까지 기다리지 않고 디스크에 대한 모든 쓰기가 이 매개변수를 통해서만 진행되는 것을 볼 수 있습니다.

페이지 작성 과정

매개변수 /proc/sys/vm/dirty_ratio(기본값 40): pdflush가 데이터를 디스크에 쓰기 전에 페이지 캐시에 할당할 수 있는 총 RAM의 최대 비율입니다.

메모: 디스크에 쓰는 동안 쓰기 버퍼를 채운 프로세스뿐만 아니라 모든 프로세스의 쓰기가 차단됩니다. 이로 인해 하나의 프로세스가 시스템의 모든 I/O 작업을 차단할 수 있습니다. 이것을 수행하다

빈번한 녹화가 필요한 작업에 Linux를 최적화하기 위한 권장 사항

일반적으로 사람들은 디스크 하위 시스템의 성능을 높이려고 할 때 Linux가 한 번에 너무 많은 정보를 버퍼링한다는 문제에 직면합니다. 이는 fsync 호출을 사용하여 파일 시스템 동기화가 필요한 작업의 경우 특히 어렵습니다. 이러한 호출 중에 캐시에 많은 데이터가 있으면 이 호출이 끝날 때까지 시스템이 정지될 수 있습니다.
또 다른 일반적인 문제는 물리적 디스크에 쓰기가 시작되기 전에 너무 많은 내용을 써야 하기 때문에 발생합니다. I/O 작업은 일반 작업보다 더 자주 발생합니다. 대용량 캐시가 가득 찰 때까지 디스크 쓰기가 발생하지 않는 기간이 길어지며, 이 시점에서 pdflush 트리거 중 하나가 실행되고 데이터가 최대 속도로 기록됩니다.

더러운 배경_비율: 기본 조정 도구로, 일반적으로 이 매개변수를 줄입니다. 목표가 캐시에 저장되는 데이터의 양을 줄여서 데이터가 한꺼번에 기록되지 않고 점진적으로 디스크에 기록되도록 하는 것이라면 이 매개변수를 줄이는 것이 가장 효과적인 방법입니다. RAM이 많고 디스크가 느린 시스템에서는 기본값이 더 적합합니다.

더러운 비율: 구성해야 할 두 번째로 중요한 매개변수입니다. 이 설정을 크게 줄이면 디스크에 써야 하는 응용 프로그램이 모두 차단됩니다.

dirty_expire_centisecs: 줄이려고 노력하지만 많이는 아닙니다. 페이지가 디스크에 기록되기 전에 캐시에서 소비하는 시간을 줄일 수 있지만 이렇게 하면 디스크에 기록하는 평균 속도가 크게 감소합니다. 덜 효율적입니다. 이는 디스크 속도가 느린 시스템에서 특히 두드러집니다.

매개변수 설정 지침

파일에 있음 /etc/sysctl.conf예를 들어 다음과 같이 입력합니다.

Vm.dirty_Background_ratio = 10 vm.dirty_ratio = 40

그런 다음 캐시와 디스크 데이터를 동기화하고 캐시를 지우고 설정을 저장합니다.

동조; 에코 3 > /proc/sys/vm/drop_caches; sysctl -p

성능 최적화의 경우 리눅스 시스템, 물리적 메모리가 가장 중요한 요소입니다. 당연히 Linux는 소중한 메모리 리소스의 사용을 제어할 수 있는 다양한 옵션을 제공합니다. 다양한 도구는 모니터링 세분성(예: 시스템 전체, 프로세스별, 사용자별), 인터페이스(예: 그래픽, 명령줄, ncurses) 또는 작동 모드(예: 대화형, 배치 모드).

다음은 프로그램의 일부 목록입니다. 그래픽 인터페이스또는 명령줄을 사용하여 Linux 플랫폼에서 사용된 메모리와 사용 가능한 메모리를 확인할 수 있습니다.

1. /proc/meminfo

RAM 사용량을 확인하는 가장 쉬운 방법은 /proc/meminfo를 이용하는 것입니다. 동적으로 업데이트되는 이 가상 파일은 실제로 free, top 및 ps 도구와 같은 다른 많은 메모리 관련 도구에 대한 표시 정보의 소스입니다. 사용 가능 수량부터/ 물리적 메모리디스크에 다시 기록될 것으로 예상되는 버퍼의 양까지 /proc/meminfo에는 사용법에 대해 알고 싶은 모든 것이 있습니다. 시스템 메모리. 프로세스 메모리 정보는 /proc/에서도 확인할 수 있습니다. /statm 및 /proc/ /상태

$ 고양이 /proc/meminfo

2. 꼭대기에

atop 명령은 ncurses 기반 대화형 시스템이자 터미널 환경을 위한 프로세스 관찰자입니다. 시스템 소스(CPU, 메모리, 네트워크, I/O, 커널)에 대해 동적으로 업데이트된 요약 정보를 색상으로 구분된 경고와 함께 표시합니다. 높은 부하시스템. 또한 리소스를 가장 많이 소비하는 순서대로 프로세스(또는 사용자)를 정렬할 수 있습니다. 시스템 관리자어떤 프로세스나 사용자가 시스템 부팅을 담당하는지 알 수 있습니다. 메모리 통계 보고서에는 전체/사용 가능한 메모리, 캐시된/버퍼된 메모리 및 메모리 정보가 포함됩니다. 가상 메모리.

$ sudo 꼭대기에

3. 무료

free 명령은 /proc/meminfo에서 수집한 메모리 사용량 개요를 얻는 빠르고 쉬운 방법입니다. 전체/사용 가능한 물리적 메모리와 시스템 스왑은 물론 커널의 사용/사용 가능한 버퍼 공간에 대한 스냅샷을 보여줍니다.

4. 그놈 시스템 모니터

그놈 시스템 모니터는 그래픽 응용표시되는 것 짧은 역사사용 시스템 리소스 CPU, 메모리, 스왑 공간 및 네트워크용. 또한 CPU 및 메모리 사용량에 대한 모니터링 프로세스도 제공합니다.

$gnome-시스템-모니터

5.htop

htop 명령은 프로세스별 메모리 사용량을 실시간으로 보여주는 ncurses 기반 대화형 프로세스 뷰어입니다. 실행 중인 모든 프로세스에 대해 주 메모리(RSS)의 프로세스 메모리 공간, 메모리의 총 프로그램 크기, 라이브러리 크기, 총 페이지 크기 및 더티 페이지 크기(캐시)를 보고할 수 있습니다. 모든 프로세스의 (정렬된) 목록을 가로 또는 세로로 스크롤할 수 있습니다.

6. KDE 시스템 모니터

GNOME 데스크탑에는 GNOME 시스템 모니터가 있는 반면, KDE 데스크탑에는 그에 해당하는 KDE 시스템 모니터가 있습니다. 그 기능은 대부분 GNOME 버전과 유사합니다. 즉, 시스템 리소스 사용의 실시간 기록은 물론 개별 프로세스의 CPU/메모리 소비도 표시합니다.

$ksysguard

7. 메모리스타트

memstat 유틸리티는 실행 가능한 프로세스와 공유 라이브러리가 가상 메모리를 소비하고 있는지 식별하는 데 유용합니다. 프로세스 ID를 획득함으로써 memstat는 해당 프로세스와 관련된 실행 코드, 데이터 및 공유 라이브러리에서 사용되는 가상 메모리의 양을 표시합니다.

$ memstat -p

8.n몬

nmon 유틸리티는 CPU, 메모리, 디스크 I/O, 커널, 파일 시스템그리고 온라인 소스. 메모리 사용량을 기준으로 전체/여유 메모리, 스왑 공간, 버퍼링/캐시된 메모리, 로드/언로드된 가상 메모리 통계 등의 정보를 모두 실시간으로 표시할 수 있습니다.

9.ps

ps 명령은 개별 프로세스의 메모리 사용량을 실시간으로 표시할 수 있습니다. 표시되는 메모리 사용량 정보에는 %MEM(사용된 물리적 메모리의 백분율), VSZ(사용된 가상 메모리의 총량) 및 RSS(사용된 물리적 메모리의 총량)가 포함됩니다. "–sort" 옵션을 사용하여 프로세스 목록을 정렬할 수 있습니다. 예를 들어 RSS 내림차순으로 정렬하려면 다음을 수행합니다.

$ ps aux --sort -rss

10. 스셈

smem 명령을 사용하면 /proc에서 사용 가능한 정보를 기반으로 다양한 프로세스와 사용자의 물리적 메모리 사용량을 측정할 수 있습니다. 이 유틸리티는 PSS(Proportional Set Size) 메트릭을 사용하여 Linux 프로세스의 유효 메모리 사용량을 정확하게 추정합니다. 메모리 사용량 분석을 그래픽 막대 및 조각 차트로 내보낼 수 있습니다.

$ sudo smem --pie 이름 -c "pss"

11. 상단

top 명령은 리소스 사용량에 관한 다양한 프로세스 통계와 함께 실행 중인 프로세스에 대한 실시간 모니터링을 제공합니다. 메모리 관련 정보에는 %MEM(사용된 메모리 백분율), VIRT(총 가상 메모리 사용량), SWAP(스왑된 가상 메모리 양), CODE(코드 실행을 위해 할당된 물리적 메모리 양), DATA(물리적 메모리 사용량)가 포함됩니다. 비실행에 할당된 메모리), -실행 가능한 데이터), RES(사용된 총 물리적 메모리 양, CODE+DATA) 및 SHR(다른 프로세스와 잠재적으로 공유되는 메모리 양). 메모리 사용량이나 크기를 기준으로 프로세스 목록을 정렬할 수 있습니다.

12. vmstat

vmstat 명령줄 유틸리티는 CPU, 메모리, 인터럽트 및 디스크 I/O를 포함한 다양한 시스템 활동에 대한 즉각적이고 평균적인 통계를 표시합니다. 메모리 정보 소스로서 이 명령은 물리적 메모리 사용량(예: 전체/사용된 메모리, 메모리 버퍼/캐시)뿐만 아니라 가상 메모리 통계(예: 페이지 로드/페이지 메모리, 페이지/로드)도 표시합니다.

vmstat 명령줄 유틸리티는 CPU, 메모리, 인터럽트, 그리고 디스크 I/O. 메모리 정보의 경우, 이 명령은 물리적 메모리 사용량(예: 전체/사용된 메모리, 버퍼/캐시 메모리)뿐만 아니라 가상 메모리 통계(예: 페이지 인/아웃된 메모리, 스왑 인/아웃된 메모리)도 표시합니다.

$ vmstat -s

© 2024 ermake.ru - PC 수리 정보 - 정보 포털