성능 분석 | 리눅스 메모리 풋 프린트 분석

이 블로그는 리눅스 환경을 소개하고, 두 가지의 메모리 사용량을 참조하십시오, 최고 명령을 PS를 사용하여, 아래의은 / proc / [PID] / 파일을 참조하십시오. 이 문서에서는 간단히 동안은 / proc / [PID] / 콘텐츠 파일을 만든 몇 가지 세부 사항, 명령 및 일부 매개 변수의 의미의 사용에 대해 설명합니다. 부적절한 경우 구글에서 기사 내용과 자기 요약, 비판을 환영합니다.

보기 리눅스 방법 메모리

리눅스 메모리는 아래와 같은 명령 PS, 톱, 무료, PMAP 등 또는 / 프록 시스템으로 다양한 채널을 볼 수있다. 당신은 / proc 디렉토리 시스템을 통해보다 상세하고 정확한 지식 또는 전체 프로세스의 메모리 사용량의 메모리를 필요로하는 경우, 요구 사항을 충족 할 수없는 정상적인 상황, PS, 상단에서 pmap, 아래에서.

명령을 사용하여

무료 : 사용 된 디스플레이 시스템 사용 가능한 메모리 및 메모리 정보

PS :보기 프로세스 정보, 정적, 즉 현재 상태입니다

최고 :보기 프로세스 정보, 동적

pstree : 프로세스 트리를보기

PMAP : 방법에 따라 ID보기 프로세스 정보

상단 대 PS

  1. ps 명령 - 과거에 정보를 제공하는 시스템의 일회성 스냅 샷, 즉 시스템 정보의 과정을 볼 수있는 단지 ps 명령입니다.
  2. 상위 명령 응답은 동적 시스템 정보, 기본적으로 매 10 초마다 업데이트를 처리합니다.
  3. PS와 상단이 과정은 / proc 디렉토리 상태 정보에서 읽기, 현재 시스템 프로세스에 대한 유용한 정보를 커널 다양한이 가상 디렉토리에 배치됩니다.

일반적인 ps 명령 :

추신 -aux : 모든 프로세스보기

추신 -l : 당신의 bash는 관련 프로세스로 확인

자세한 top 명령, http://www.jb51.net/article/40807.htm을 참조하시기 바랍니다

기본 명령 :

  • 키보드의 숫자 "1", 각각의 논리적 CPU의 상태를 모니터링하기 :
  • 키보드 "B"(오픈 / 하이라이트를 닫습니다)
  • 키보드 "X"(오픈 / 하이라이트 정렬 열을 닫습니다)
  • 또는 "쉬프트 + <" "+> 시프트"일 수있는 권리 또는 정렬 열을 변경 왼쪽
  • 탭 표시 란 "F"키, 기초 레이아웃 도면
  • 의 화면 갱신 빈도를 변경
  • L, 확대 또는 제 외형의 제 1 부분은 정보를 나타내는 열
  • t는 확대 또는 두 번째 행과 세 번째 행 작업 정보의 제 1 부분을 열은 CPU를 나타내고
  • m, 확대 된 MEM 또는 정보 교환을 나타내는 제 열 다섯 번째 행의 첫 부분을 열

용도, 사람 [cmd를]도 사용할 수있다.

관련 매개 변수

VSZ & VIRT

  1. 모든 코드, 데이터, 공유 라이브러리를 포함하여 프로세스에서 사용하는 가상 메모리의 총 가치는 스왑 아웃되었다. VIRT = SWAP + RES.
  2. VSZ는 ps 명령, VIRT는 상부로부터 명령 모두는 프로세스 가상 메모리의 크기에 의해 점유 나타냈다.
  3. 응용 프로그램 프로세스 메모리 100m,하지만 10m의 실제 사용은 100m는 오히려 실제 사용량보다 증가 할 경우

RES & RSS

  1. 이 과정은 현재 메모리 크기를 사용하지만, 스왑을 포함하지 않습니다. RES = CODE + DATA를.
  2. 다른 프로세스가 공유 포함
  3. 상부 명령 RES, ps 명령 RSS, 표현을 의미 차이없이 모두, 정보 / 고양이 / PROC로부터 판독 / [PID] / STAT 파일이다.
  4. 만약 응용 프로그램 메모리 100m, 10m 실제 사용 만 10m의 증가, 그리고 반대로 VIRT
  5. 도서관의 경우 메모리를 점유 정보, 통계적로드 라이브러리 파일은 메모리 크기를 공유

암호

실행 코드가 차지하는 물리적 메모리 크기

데이터

  1. 데이터를 저장하는 물리적 메모리 크기, 프로그램은 사용할 필요가에서 실행
  2. 가기 커맨드가 표시되지 않은 경우, F를 표시하는 버튼을 눌러

SHR

  1. 공유 메모리 크기
  2. 공유 메모리의 자체 프로세스뿐만 아니라, 공유 메모리는 다른 프로세스를 포함
  3. 프로세스는이 차지하는 물리적 메모리 크기 계산 : RES를 - SHR을
  4. 밖으로 스왑 후, 값이 감소합니다.

프로세스 메모리 정보의 단계를보기

1. 공정 PID를 얻

$ 추신 -aux | 그렙는 / usr / sbin에 / 네트워크 매니저의 
루트 845 0.0 0.0 387,084 13,332? SSL 3月28 0시는 / usr / sbin에 / NetworkManager는 --no-데몬

2. 모든 스레드의 처리를 검토

$ 추신 MP 845 -o THREAD, TID를 
사용자 %의 CPU PRI SCNT WCHAN USER 시스템 TID의
루트 0.0 - - - - - -
루트 0.0 19 - - - - 845
루트 0.0 19 - - - - 1,025
루트 0.0 19 - - - - 1,027

모든 자식 프로세스를 확인합니다

$ pstree -p 845 
네트워크 매니저 (845) ─┬─dhclient (30278)
├─dnsmasq (1123)
├─ {gdbus} (1027)
└─ {gmain} (1025)

/ proc 디렉토리 파일의 사용에서

은 / proc / [PID] / 메모리의 과정과 관련된 문서는 주로지도, 현재 smaps 상태이다.

지도 : 파일은 가상 주소에 해당하는 프로세스의 코드 세그먼트, 스택 영역, 스택 영역, 동적 라이브러리, 커널 영역을 볼 수 있습니다

현재 smaps : 각 파티션 디스플레이보다 자세한 메모리 사용 데이터

상태 : 활성 CPU 모든 정보를 포함하고, 파일의 모든 값은 현재 시스템의 시작시에 처음부터 누적되는

유명한 익명 :

파일이 메모리 프로세스의 영역에 매핑 할 수 있으며, vm_area_struct-> vm_file 도메인에 저장 매핑 파일 기술자는 메모리의 영역은 반대로 익명 매핑 된 메모리 영역은 메모리의 알려진 영역을했다.

맵 파일 분석

PROC / [PID] / 맵은 메모리 액세스 권리의 영역을 매핑하는 과정을 보여줍니다. 커널에 해당하는 작업의 집합은 proc_pid_maps_op, 특정 내보내기 기능의 show_map입니다. 일부 커널 주소 공간은 주소 공간의 모두는 task-> MM->의 mmap 목록에 저장되어, 프로세스의 vm_area_struct 구조로 표현된다.

다음과 같이 선 촬영 :

7f4e3f5ca000-7f4e3f674000 R-XP 00000000 8시 2분 525202 /usr/lib/x86_64-linux-gnu/NetworkManager/libnm-device-plugin-wifi.so

Vm_area_struct는 각각 다음 표를 해결하기 위해 해당 :

리눅스 메모리 풋 프린트 분석

맵 파일은 SMAP 파일이 각 파티션에 대해보다 자세한 메모리 사용 데이터를 표시 할 수있는 간단한 파티션을 표시 할 수 있습니다.

SMAP 파일 분석

다음과 같이 파일의 차단은 각 필드 해석 :

RW-P 8시 2분 00026000 7f148b2fa000-7f148b2fb000 2,883,675 /lib/x86_64-linux-gnu/ld-2.23.so 
크기 :. 가상 메모리의 크기 4 개 킬로바이트
RSS : 4 킬로바이트 실제 물리적 메모리 크기 RSS = Shared_Clean + Shared_Dirty + Private_Clean + Private_Dirty
PSS : 개인 메모리 페이지 4 킬로바이트 RSS
Shared_Clean : 0 kB의 RSS 공유 메모리가 아닌 다시 페이지
Shared_Dirty : 0 kB의 RSS 공유 메모리, 다시 페이지
Private_Clean : 개인 메모리 0 kB의 RSS 아니라 다시
Private_Dirty을 : 전용 메모리 4KB의 RSS는 재기록
가 4KB : 참조 된
익명 : 4KB의
AnonHugePages : 0 킬로바이트
Shared_Hugetlb : 0 킬로바이트
Private_Hugetlb : 0 킬로바이트
스왑 : 교환 영역에서 0 킬로바이트 페이지 크기
0 : KB SwapPss
KernelPageSize : 4KB의 OS 페이지 크기
MMUPageSize : 4 킬로바이트 페이지 크기 MMU 아키텍처는
잠금 : 0 kB의
VmFlags : 나 미스터 DW Mw가의 RD WR 교류 SD

어떤 경우 교환 메커니즘이없는 경우 더티 다음 페이지, 그것은 재활용 할 수 없습니다.

스크립트의 분석 :

나는 다음과 같이 필요에 따라 수정할 수있는 스크립트의 간단한 분석을 썼다.

#! / 빈이 / 배시 
AWK '는 BEGIN {
= 0 전체;
의 printf ( "SIZE \ tRSS \ tSHARED_CLEAN \ tSHARED_DIRTY \ tPRIVATE_CLEAN \ tPRIVATE_DIRTY \ n")
} {
경우 (NF> 3) {
경우 ($에 2 ~ / [(R) - [w -] [X -] [PS] /) {
경우 ($ 6 == "")
NAME = $ 1;
다른
이름은 $ 6 =;
}
}
동안 (의 getline)
{
경우 (NF> 3) {
경우 ($에 2 ~ / [(R) - [w -] [X -] [PS] /) {
경우 ($ 6 == "")
NAME = $ 1;
다른
이름은 $ 6 =;
}
}
경우 ($ 1 내지 / ^ 사이즈 /) {
크기 = $ 2이고;
총 + = $ 2이고;
}

경우 ($ 1 내지 / RSS /) {
RSS = $ 2이고;
}

경우 ($ 1 내지 / Shared_Clean /) {
shared_clean = $ 2이고;
}
경우 ($ 1 내지 / Shared_Dirty /) {
shared_dirty = $ 2이고;
}

경우 ($ 1 내지 / Private_Clean /) {
private_clean = $ 2이고;
}

경우 ($ 1 내지 / Private_Dirty /) {
private_dirty = $ 2이고;
}
경우 ($ 1 내지 / VmFlags /) {
의 printf ( "% D \ t % D \ t % D \ t % D \ t % D \ t % D \ t %의 \ n", 크기, RSS, shared_clean, shared_dirty , private_clean, private_dirty, 이름);
크기 = 0;
이름 = "";
RSS = 0;
shared_clean = 0;
shared_dirty = 0;
private_clean = 0;
private_dirty = 0;
잇다;
}
}
} {END
의 printf ( "총 ==== % D \ 없음"전체);
} '$ 1

익명 매핑에 대한

mmap에 메커니즘을 사용하여 생성되지만 모든 파일과 연결되지 않은 익명의 현재 smaps 지역의 다수가있을 수 있습니다. 일반적으로, 그들은 주로 힙에 처리 또는 공유 메모리 버퍼가 적용되지 않는 일부 천한 작업을 처리하는 데 사용됩니다. 예컨대 리눅스에서 새로운 스레드의 스택으로 익명의 맵핑 영역을 이용하여 P 스레드위한 공간이 메모리 오버 플로우의 검지를위한 작은 온 - 칩 메모리 (예를 들면, 4KB)이 같은 새로운 스레드 8M 애플리케이션 스택 공간 P 스레드. 각각의 pthread에서 생성되어,이를 0으로 매핑 노드 8 메가 바이트 메모리, 노드 4KB 영역 0에지도가 할당된다.

상태 파일 분석

다음 필드를 구문 분석, 파일을 가로 채기 :

개발> CAT / proc 디렉토리 / 24475 / 상태 
이름 : 실행 프로그램 netio의 이름
/ 수면 / 죽은 실행 R (실행) 작업 상태, : 주
24,475 스레드 그룹 번호 : Tgid
도 (Pid) : 24,475 과정 위에서 언급 한 아이디
PPID : 위에서 아이디 언급 19,635 부모
TracerPid : 0
UID : 0 0 0 0
기드 : 0 0 0 0
FDSize : 파일 기술자의 256 최대 수 그 프로세스
그룹 : 0
VmPeak : 6330708 kB의 메모리 사용량 피크
VmSize : 268876 개 kB의 프로세스 가상 주소 공간
VmLck : 0 kB의 프로세스 잠금 물리 메모리의 크기는 하드 디스크에 물리적 메모리를 잠글 수
16,656 : KB VmHWM
VmRSS : 사용중인 물리적 메모리 11420 개 kB의 프로세스
230,844 kB의 프로세스 데이터 세그먼트의 크기 : VmData
VmStk 136 kB의 사용자 모드 프로세스 스택 크기
VmExe : 760 킬로바이트 처리 코드 세그먼트 크기
vmLib는 : 7772 개 kB의 프로세스 가상 메모리 공간의 크기에 매핑되는 라이브러리를 사용
120KB의 프로세스의 페이지 테이블 크기 : VmPTE
VmSwap : 0 kB의
스레드 :. 신호의 수가 5 공유 태스크 디스크립터 여러 라인 POSIX을 응용 프로그램 신호 디스크립터를 사용하여 동일한 스레드 그룹에있는 모든 쓰레드.
SigQ : 신호의 0/63346 수를 처리 할
SigPnd : 0000000000000000 마스크 비트, 처리 될 신호는 스레드 저장
0000000000000000 마스크 비트, 스레드 그룹에 저장되어 처리 될 수있는 신호 : ShdPnd
SigBlk : 0000000000000000 저장된 신호가 차단
SigIgn을 : 0,000,000,001,000,000 저장된 신호는 무시
SigCgt : 촬상 신호의 0,000,000,180,000,000 저장
CapInh는 : 0000000000000000 능력은 현재 프로세스에 의해 실행될 수있는 프로그램 상속
CapPrm : 능력 FFFFFFFFFFFFFFFF 공정이 사용될 수를 CapEff하지의 기능을 포함 할 수 있으며, 이러한 기능은 처리 자신의 임시 CapEff이 CapPrm의 부분 집합, 보안 개선하는 데 도움이 필요하지 능력을 포기하는 과정입니다 포기
CapEff을 : 효과적인 용량 FFFFFFFFFFFFFFFF 프로세스
CapBnd을 : FFFFFFFFFFFFFFFF
cpus_allowed : 01
Cpus_allowed_list : 0
Mems_allowed : 01
Mems_allowed_list : 0
voluntary_ctxt_switches : (201)
nonvoluntary_ctxt_switches : 909

meminfo 파일 파일 분석

파일 시스템 메모리 사용량은 / proc / meminfo 파일은 제거 다음

> CAT / proc 디렉토리 / meminfo를 개발 
8112280 kB의 모든 사용 가능한 RAM의 크기 (즉, 물리적 메모리를 뺀 이진 코드와 커널 크기에 약간의 예약 비트) : MemTotal를
4188636 kB의 LowFree 및 HighFree 합, 시스템이 사용되지 않는 메모리 유지입니다 : MemFree가
버퍼 : 34,728 킬로바이트 파일 버퍼 크기를 확인하는 데 사용
289,740 킬로바이트는 캐시 메모리 (캐시 메모리)의 메모리 크기 : 캐시
(마이너스 swapCache의 diskcache 동일)
0 킬로바이트는 캐시 메모리 (캐시 메모리) 교환이다 SwapCached을 크기는
메모리의 스왑 된 만, 여전히 스왑 파일에 저장된다.
곧 다시 I / O 포트를 열 필요없이 교체가 필요할 때 사용
활성 : 캐시 페이지 파일의 활성 사용 또는 크기 435,240 킬로바이트 버퍼,
매우 필요한 경우가 아니면 그렇지 않으면 다른 목적으로 사용되지 않을 것이다
비활성 :에서 231,512 kB의 사용 빈도 또는 버퍼 캐시 메모리 페이지 파일의 크기가 다른 방식으로 사용될 수있다.
활성 (아논) 361 252 kB의
비활성 (아논) 120 688 kB의
활성 (파일) (73) 988 kB의
비활성 ( 파일) : (110) 824 kB의
Unevictable : 0 kB의
Mlocked : 0 kB의
SwapTotal : 0 kB의 스왑 공간의 크기를 총
SwapFree : 0 kB의 스왑 공간의 크기를 사용하지
더러운 : 디스크 메모리 크기로 다시 쓰기 위해 대기 0 킬로바이트
0 킬로바이트가 디스크 메모리 크기로 다시 기록되는 : 쓰기 저장
매핑되지 않은 메모리 페이지 크기가 348,408 킬로바이트 : AnonPages
매핑 : 33600 킬로바이트 등의 크기와 같은 장치 및 파일 매핑 된
133 536 : KB shmem과
55,984 킬로바이트 커널 데이터 구조 캐시 크기는 메모리 소비 애플리케이션을 가져다 방출을 저감 할 수 슬래브
25,028 킬로바이트 회수 슬래브 크기 : SReclaimable
SUnreclaim : 30,956 kB의 회복 불가능한을 슬래브 크기 (SUnreclaim + SReclaimable = 슬래브)
KernelStack : 1,896 킬로바이트 커널 스택 영역 크기의
페이지 테이블 : 8156 kB의 메모리 관리 페이지 인덱스 테이블 크기 페이징
페이지 테이블 크기 0 킬로바이트 불안정 : NFS_Unstable
0 : KB 반송
WritebackTmp : 0 킬로바이트
CommitLimit을 : 2,483,276 킬로바이트
Committed_AS : 1,804,104 킬로바이트
VmallocTotal : 34,359,738,367 kB의 가상 메모리의 크기를 위해 vmalloc 수
565,680 kB의 가상 메모리 크기 사용되었다 : VmallocUsed은
34,359,162,876 : KB VmallocChunk
HardwareCorrupted : 0 킬로바이트
HugePages_Total : 1536 페이지의 많은 수의
HugePages_Free : 대형 페이지 무료 0?
0 : HugePages_Rsvd
HugePages_Surp : 0
Hugepagesize : 2048 kB의 큰 페이지 크기
DirectMap4k : 10240 kB의
DirectMap2M : 8302592 kB의

개요

사용되는 응용 프로그램 프로세스의 메모리가 반드시 사실 (의 malloc이나 mmap에의 실현)과 실제가 아니기 때문에 리눅스 메모리에서 공간은 단순히 프로그램 "메모리 사용"크기를 판단하는 하나의 지표를 통해 더 복잡한 개념이다 그것은 (동적 공유 라이브러리 등) 프로세스는 그 자체로 필요없는 메모리를 사용합니다. 우리는 메모리 사용을 분석 할 수있는 특정 요구에 따라 올바른 방법을 선택해야합니다.

추천

출처www.cnblogs.com/wyf0518/p/11456818.html