어떻게 리 눅 스 기계 의 메모리 사용 상황 을 정확하게 봅 니까?

3677 단어 shell
배경
업무 상 리 눅 스 기기 와 관련 되 기만 한다 면 기본적으로 이러한 수요 가 있 고 메모리 사용 상황 을 살 펴 볼 수 있 지만 어떻게 봐 야 정확 합 니까?이전에 사 용 된 것 은 top 명령 으로 잘못된 부분 이 있 었 습 니 다.
왜 top 명령 으로 메모리 에 오류 가 있 습 니까?
top 은 프로 세 스, cpu 사용률, 메모리 사용률 등 을 실시 간 으로 볼 수 있 는 좋 은 시스템 분석 도구 입 니 다. windows 의 작업 관리자 와 같 습 니 다.나 는 예전 에 top 이 본 것 이 진정한 메모리 사용 상황 이 라 고 생각 했 는데 나중에 baidugoogle 은 오 랜 만 에 자신의 그림 을 발견 했다.  먼저 top 명령 을 내 린 후에 보 여 준 메모리 사용 상황 을 보고 저 는 제 기와 공 vps 로 시범 을 보 여 드 리 겠 습 니 다.
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:     73728k total,    70048k used,     3680k free,        0k buffers
Swap:    16384k total,     4696k used,    11688k free,    64716k cached

Mem: 73728 k total, 70048 k used, 3680 k free, 0k buffers 라 는 줄 을 볼 수 있 습 니 다. 바로 메모리 사용 상황 입 니 다.처음 엔 나 도 이 줄 만 봤 어.나중에 회사 의 생산 기계 에서 보 았 을 때 의 심 스 러 웠 습 니 다. 한 동안 작 동 된 기계 라면 메모리 의 totalk 과 used 는 항상 매우 가 깝 고 free 값 이 적 습 니 다. 즉, '메모리 사용률' 이 매우 높 습 니 다. 제 가 각종 서 비 스 를 모두 껐 더 라 도.그러나 그럼 에 도 서버 는 아무런 문제 가 없 었 고 tomcat 서 비 스 를 다시 시작 하여 작은 압력 측정 을 하 는 것 도 정상 이 었 다.그러면 문제 가 생 겼 다. 메모리 상황 이 이렇게 긴 장 했 는데 어떻게 이렇게 많은 서 비 스 를 실행 할 수 있 고 심지어 스트레스 테스트 를 할 수 있 습 니까? ->답 은 간단 합 니 다. 많이 사 용 된 메모리 중 하 나 는 캐 시 입 니 다. 이것 은 리 눅 스 의 메모리 관리 체제 라 고 할 수 있 습 니 다.
Linux 의 Cache 메모리
캐 시 메모리 (캐 시 메모리):
파일 을 읽 고 쓸 때 리 눅 스 커 널 은 읽 기와 쓰기 성능 과 속 도 를 높이 기 위해 파일 을 메모리 에 캐 시 합 니 다. 이 부분 메모 리 는 Cache Memory (캐 시 메모리) 입 니 다.프로그램 이 끝 난 후에 도 Cache Memory 는 자동 으로 방출 되 지 않 습 니 다.이것 은 리 눅 스 시스템 에서 프로그램 이 파일 을 자주 읽 고 쓴 후에 사용 가능 한 물리 적 메모리 가 매우 적 다 는 것 을 알 게 될 것 이다.  사실 이 캐 시 메모리 (Cache Memory) 는 메모 리 를 사용 해 야 할 때 자동 으로 방출 되 기 때문에 메모리 가 사용 되 지 않 을 까 걱정 할 필요 가 없습니다.  free 에서 cached 를 뺀 나머지 메모리 가 부족 할 때 만 프로그램 이 메모리 사용 이 충분 하지 않 을 수 있 습 니 다.
그래서 사실 방금 top 에서 본 메모리 사용 상황 중 일 부 는 캐 시 입 니 다. 그 캐 시 는 얼마나 됩 니까?마지막 으로 mem 줄 뒤에 buffers 가 있 습 니 다. swap 줄 뒤에 cached 가 있 습 니 다. 이 두 개가 캐 시 크기 입 니 다.따라서 응용 프로그램 이 실제 물리 적 메모 리 를 사용 하 는 상황 을 계산 하려 면 used - cached - buffers 여야 합 니 다. 그래서 방금 top 에서 본 물리 적 메모리 의 사용 상황 은 70048 k - 64716 k = 5332 k 입 니 다.그래서 별로 안 썼 잖 아!
또한 단순히 메모리 사용 상황 을 보고 싶다 면 free 명령 을 사용 하 는 것 이 직관 적 입 니 다.
total       used       free     shared    buffers     cached
Mem:         73728      70940       2788          0          0      64840
-/+ buffers/cache:       6100      67628
Swap:        16384       4500      11884

이러한 정보의 설명 은 대체로 다음 과 같다.  그 중 첫 번 째 줄 은 시스템 이 사용 하 는 메모리 상 태 를 전역 적 으로 설명 합 니 다.  total - 총 물리 적 메모리  used - 메모리 가 사용 되 었 습 니 다. 일반적으로 이 값 은 cache + 응용 프로그램 이 사용 하 는 메모리 가 포함 되 어 있 기 때 문 입 니 다.  free - 전혀 사용 되 지 않 은 메모리  shared - 응용 프로그램 공유 메모리  buffers - 캐 시, 주로 디 렉 터 리, inode 값 등에 사 용 됩 니 다. (ls 큰 디 렉 터 리 는 이 값 이 증가 하 는 것 을 볼 수 있 습 니 다)  cached - 캐 시, 열 린 파일 에 사용  주의 -/+ buffers/cache: 6100 67628 줄 입 니 다.  이전 값 은 - bufffers/cache - – > 캐 시 를 포함 하지 않 습 니 다. 응용 프로그램의 물리 적 메모리 사용 상황, 즉 - bufffers/cache = used - buffers - cached 입 니 다. 그래서 이 때 응용 프로그램 은 6100 k 메모 리 를 사 용 했 습 니 다.  다음 값 은 + buffers/cache - – > 모든 공급 가능 한 프로그램 에서 사용 할 메모리 크기 를 표시 합 니 다. free 에 캐 시 값, 즉 + buffers/cache = free + buffers + cached 를 추가 하여 프로그램 에서 사용 할 수 있 습 니 다.  또한 free 명령 도 '- m' 인 자 를 사용 할 수 있 습 니 다. 이렇게 표 시 된 메모리 정 보 는 KB 가 아 닌 MB 로 계산 합 니 다. 큰 메모리 상황 에서 더욱 직관 적 입 니 다.
free -m
-----------
             total       used       free     shared    buffers     cached
Mem:            72         69          2          0          0         63
-/+ buffers/cache:          5         66
Swap:           16          4         11

총결산
top 명령 이나 free 명령 을 사용 하여 보 이 는 메모리 사용량 used 에는 캐 시 가 포함 되 어 있 습 니 다. 프로그램의 실제 메모리 사용 상황 을 보 려 면 used - cached - bufffers 또는 free 명령 결 과 를 직접 보 는 -/+ buffers/cache 줄 정보 가 있어 야 합 니 다.

좋은 웹페이지 즐겨찾기