Linux 시스템 진단의 메모리 기초 깊이 있는 설명

1. 배경


linux 메모리에 관해서는 free, top 등 기초 명령에 주목할 때가 많다.시스템이 이상 상황에 부딪혔을 때 메모리 문제의 근인 트레이스, 현장 진단을 할 때 심층적인 debug 능력이 부족하다.이 편폭은 심층 토론을 하지 않고 현재 시스템의 문제를 명확하게 묘사할 수 있으며 모든 SRE가 갖춰야 할 가장 기초적인 능력이다.

2. free


2.1 free 명령 원리
free는/proc/meminfo를 보고 메모리의 사용 상황을 가져옵니다.그런데/proc/meminfo 이 파일은 어떻게 왔어요?먼저/proc 디렉토리를 살펴보겠습니다.
  • /proc는 가상 파일 시스템으로 이 디렉터리에 있는 모든 파일은 위조 파일이고 이 파일은 메모리에만 존재하며 공간을 차지하지 않는다. du-sh를 사용하면 검증할 수 있다. 이 금형 도로의 디스크 점용은 모두 0이다
  • /proc 아래의 모든 파일은 커널 호출 proc_create () 인터페이스로 만든 가상 항목..
  • /proc의 파일은 대부분 시스템 정보의 실시간 상황(프로세스, 메모리, cpu, 장치 정보 등)을 피드백한다
  • 결론:/proc/meminfo는/proc 파일 시스템에서 메모리 관련 정보를 저장하는'위조 파일'입니다.
    2.2 명령 출력 소개
    모든 발행판의 출력은 일정한 차이가 있다. 우리는 debian8 4.19로 한다.x 발행판을 예로 들다.
    
    [email protected]:~# free -m
      total used free shared buffers cached
    Mem:  1991 1909  81  4 155 836
    -/+ buffers/cache: 917 1073
    Swap:  1023  1 1022
    대부분의 명령 출력 의미는 man 문서에서 해석할 수 있으며, 여기에는 군더더기를 하지 않습니다.
  • used: 이미 사용한 메모리used=total-free-buffers-cached
  • free: 사용하지 않은 메모리memFree & swapFree in/proc/meminfo
  • shared: tmpfs에서 사용하는 메모리shmem in/proc/meminfo
  • buffers: 내부 버퍼에 사용되는 메모리
  • cached: 페이지 캐시와 slabs에 사용되는 메모리입니다
  • buffers/cache:buffers와cache의 총체를 나타낸다
  • swap: 교환 구역의 사용량
  • 2.3 버퍼와cache는 메모리를 사용합니까?
    답은 긍정적입니다. 우선 버퍼와cache를 알아보겠습니다.
  • cache(캐시)의 공식 정의는 고속 장치와 저속 장치 간의 접근 속도가 일치하지 않아 미리 남겨진 공간을 보완하여 자원의 접근을 가속화하는 데 쓰인다.쉽게 말하면 더 빨리 읽는 거지..
  • 버퍼(버퍼)는 자원 쓰기 성형을 위해 컴퓨터가 대량의'소규모 IO'를 만났을 때 소량의'대규모 IO'로 성형하여 쓰기 횟수를 낮춘다.그리고'쓰기 자원'을 합리적으로 이용하는 효과에 도달한다.
  • 그러나free 명령이 보여주는buffer와cache는 약간 좁은 의미를 가진다. free 보여주는buffer는 블록 장치가 차지하는 캐시를 나타내고free 보여주는cache는 일반 파일이 차지하는 the pagecache(캐시 페이지)를 나타낸다.
    한 마디로 하면,buffer와cache가 사용하는 메모리는 모두 Linux 읽기와 쓰기 성능을 가속화하는 데 사용되며, 새로운 프로세스가 메모리를 필요로 한다면, 시스템은 buffer와cache가 차지하는 메모리를 회수하여 프로세스에 다시 분배하여 사용할 것이다.
    2.4 기타 메모리 개념
    RSS & VSZ & PSS & USS
  • RSS(Resident Set Size): 프로세스가 실제로 사용하는 물리적 메모리 크기(sharedMem 포함)..
  • VSZ(Virtual Memory Size): 프로세스가 접근할 수 있는 모든 메모리 크기, 페이지가 끊어져서 swap에서 나가는 메모리 크기, 그리고sharedMem..
  • PSS(Proportional Set Size): 메모리 크기를 RSS에 비례적으로 추가합니다..
  • USS(Unique Set Size): 프로세스가 독점하는 물리적 메모리 크기..
  • usedMem은 active & inactive로 나뉩니다.
  • active: 이 부분의 메모리가 특정한 프로세스에 사용되고 있으며 회수될 수 없음을 나타냅니다
  • inactive: 이 부분의 메모리는 실행 상태가 아닌 프로세스에 분배되어 회수될 수 있음을 나타냅니다
  • Linux는 활성 페이지와 비활성 페이지의 회수를 관리하는 LRU List를 유지합니다.간단하게 말하면 이 목록의 끝에 가까울수록 이 페이지가 회수될 확률이 높고, 반대로 열의 첫 번째 부분에 가까울수록 회수되기 어렵다.linux 커널은 두 종류의 LRUList-activelist와 inactivelist를 유지합니다. 방금 방문한 페이지는 activelist에 넣고, 오랫동안 방문하지 않은 페이지는 inactivelist에 넣고, 커널 라인 kswapd는 정기적으로 activelist의 페이지를  inactivelist로 옮깁니다.
    만약 시스템의 inactive 메모리가 너무 크면 다음과 같은 조작을 통해 회수할 수 있습니다.
    sync; echo 3 >/proc/sys/vm/drop_caches

    3. 가상 메모리


    현대 x86시스템에서 컴퓨터가 사용할 수 있는 메모리는 물리적 메모리의 상한선보다 크고 가상 메모리 메커니즘에 의존한다.Linux는 가상 메모리 메커니즘과 실제 모드 메커니즘을 지원합니다.
    실제 모드에서 컴퓨터는 물리적 메모리를 직접 신청하고 가상 메모리 메커니즘에서 시스템은 디스크를 메모리의 확장으로 삼아 사용할 수 있는 메모리 크기를 증가시킨다.맵을 비추는 메커니즘을 통해 물리적 메모리와 실제 대응 관계를 저장합니다.
    디스크와 메모리 사이에서 페이지를 전송하는 활동을 swapping 또는 페이지 스케줄링(paging)이라고 하고 가상 메모리로 사용되는 디스크 구역을 swap이라고 한다.
    온라인으로 swap를 추가하는 방식으로 메모리 부족 문제를 임시로 완화할 수 있지만, 일반적으로 온라인으로 swap를 줄이는 작업을 직접 할 수 없기 때문에 프로세스의crash를 초래할 수 있습니다.구체적인 swap 설정 방식은 5.1swap 관련 설정을 보십시오.

    4. OOM


    1.What is OOM?
    Out Of Memory Killer는 Linux의 시스템 보호 메커니즘으로 시스템 메모리가 부족할 때kill이 일부 프로세스를 떨어뜨려 시스템이 끊기는 것을 방지합니다.시스템은 채점 메커니즘을 통해 프로세스에 대한 살해 조작을 실시한다.기본 메커니즘은 모든 프로세스의 메모리 점용, cpu 점용 등 요소를 스캔한 다음에   (badness)를 평가하는 것입니다. 점수가 높을수록 프로세스가 kill에 의해 우선순위가 높아집니다.
    2. 어떤 행동이 시스템으로 하여금 프로세스에 대해 점수를 매기게 합니까?
  • 프로세스는 fork(2)를 사용하여 호출되며, 여러 하위 프로세스를 만들 때 추가됩니다(+)
  • 프로세스가 오랫동안 실행되었거나 CPU 시간이 많이 사용되면 감점(-)됩니다
  • 프로세스의nice 값이 비교적 낮으면 플러스(+)가 됩니다
  • 프로세스가 특권 프로세스(privileged)라면 감점(-)됩니다
  • 프로세스가 하드웨어 장치에 직접 액세스하면 감점 (-) 됩니다
  • 3. 프로세스의 점수를 어디서 볼 수 있습니까?
    /proc//oom_score
    4. 수동으로 점수 조정
    /proc//oom_adj 이 파일은oom에서 발생할 때 어떤 프로세스가kill되어야 하는지, 범위-16-+15, 기본값은 0,   
    특수치 -17: 프로세스가 영원히 kill되지 않는다는 것을 나타낸다.
    5. 시스템이 OOM을 터치했는지 어떻게 알아요?
    /var/log/messages,/var/log/syslog 시스템 로그나 dmesg 시스템 로그 진단 도구 등을 찾을 수 있습니다

    5. 메모리 관련 구성


    5.1 swap 관련 구성
    시스템 매개 변수를 조절하여 컴퓨터가 swap 구역을 사용하는 권한을 알려준다
    
    1.  
    swappiness 0-100, 60
    0:  swap
    60:  
    100:  swap
     
    2.  
    # sysctl vm.swappiness=VALUE
    # sysctl vm.swappiness=20
     
    # echo VALUE > /proc/sys/vm/swappiness
    # echo 30 > /proc/sys/vm/swappiness
    온라인을 통해 swap 구역의 크기를 늘리고 메모리 유출을 임시로 제어하며 메모리 부족 등 이상을 일으킨다.
    
    1.  root 
    2.  
    # dd if=/dev/zero of=/home/swap2G bs=1024 count=2M
    3.  
    # chown root:root /home/swap2G
    # chmod 0600 /home/swap2G
    4.  liunx 
    # mkswap /home/swap2G
    5. enable  
    # swapon /home/swap2G
    6.  fstab 【 :  】
    # vim /etc/fstab
    /home/swap2G none swap sw 0 0
    7.  
    #free -m
    8.  swap 
    # swapoff /home/swap2G
    5.2 캐시 관련
    
    sync; echo 3 > /proc/sys/vm/drop_caches
     
    0: 
    1: 
    2:  dentries   inodes
    3: 
    5.3 OOM 관련
  • vm.panic_on_oom
  • oom 메커니즘을 터치할 때kernelpanic를 터치하는지 여부.0은 닫힘 (권장), 1은 열기 입니다.kernel panic는 컴퓨터가 치명적인 오류를 만났고, 그가 어떻게 처리해야 할지 몰랐을 때의 동작인 윈도우즈의 블루스크린을 유추할 수 있는 것을 가리킨다.우리는 당연히 컴퓨터가 oom에 있을 때마다 바로 파란색 화면을 원하지 않는다.권장 설정은 0입니다
  • vm.overcommit_kbytes:
  • 프로세스가 신청할 수 있는 최대 메모리를 제한하는 데 사용됩니다. 0은 설정하지 않음을 나타냅니다. 예를 들어 400을 설정하면 프로세스가 신청할 수 있는 최대 메모리는 swap+400kBytes입니다
  • vm.overcommit_ratio:
  • 프로세스에서 사용할 수 있는 최대 메모리(백분율 모드)를 정의합니다. 기본값은 50입니다.설정 50 이후 프로세스가 swap + 50% * 물리적 메모리 총량 이상의 메모리를 신청할 수 없음을 나타냅니다
  • vm.oom_kill_allocating_task(Linux 2.6.24+ 지원)
  • 이것은 메모리가 부족한 상황에서 OOM 트리거 죽이기 작업을 사용하거나 사용하지 않습니다.0은 비활성화(기본값), 1은 활성화됨을 나타냅니다.oom 메커니즘으로 이해할 수 있는 스위치는 기본적으로 비활성화됩니다. oom 트리거를 정상적으로 실행하도록 표시합니다
  • 기타 관심 있으면 스스로 man proc
  • 이 Linux 시스템 진단의 메모리 기초에 대한 깊이 있는 설명을 드리겠습니다. 더 많은 Linux 시스템 진단의 메모리 기초 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기