|
|
|
|
|
|
|
| 이름 : 호석 (121.♡.39.7) |
|
| 날짜 : 2014-02-03 13:20:44 |
|
| 제목 : 리눅스 디버깅과 성능 튜닝 – 5. 시스템 정보: /proc 파일 시스템 |
|
리눅스 디버깅과 성능 튜닝 – 5. 시스템 정보: /proc 파일 시스템
2012/11/09 14:46
http://nix102guri.blog.me/90156320293
전용뷰어 보기
1.1.1. vmstat
메모리, CPU, 디스크 하위 시스템 등에 관한 통계를 간략히 표시하는 프로그램이다.
흔히 원하는 하부 시스템의 사용률 추이를 관찰하기 위해 짧은 기간 단위로 vmstat을 실행한다.
시스템 성능이 예상보다 떨어질 때, vmstat 으로 어느 하위 시스템을 살펴보아야 하는지 파악할 수 있다.
Vmstat은 프로세스,, 가상 메모리, 디스크, 트랩, CPU 사용량에 대한 커널 통계를 보고한다.
여기서 필요한 정보는 /proc/meminfo 에서 가져온다.
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 1540 1333908 566764 469724 0 0 9 5 7 4 1 0 98 0
(1) procs: 실행중이거나(r), 차단되었거나(b), 스왑아웃된(w) 프로세스 수를 나타낸다.
(2) Memory: 스왑 메모리 크기(swapd), 자유메모리 크기(free), 버퍼된 메모리 크기(buff), 캐시된 메모리 크기(cache)를 킬로바이트로 표시
(3) Swap: 디스크로 스왑되어 들어온 메모리 양(si)과 디스크에서 스왑되어 나간 메모리 양(so)을 초당 킬로바이트로 표시
(4) Io는 초당 블록 디바이스로 보낸 블록 수(bi)와 블록 디바이스에서 받은 블록 수(bo)를 표시한다.
(5) System은 초당 인터럽트 수(in)와 문맥전환 횟수(cs)를 나타낸다.
(6) Cpu는 사용자(us), 시스템(sy), 대기시간(id)값으로 CPU 사용률을 표시한다.
Procs r 값은 실행 큐에 들어 있는 프로세스 수이다
이 숫자는 다른 프로세스가 끝날때까지 실행되지 못하고 대기해야 하는 프로세스 수를 뜻한다.ㅏ
부하가 적은 시스템에서는 보통 0~3 이다.
부하가 심한 시스템에서는 15를 넘어간다.
In 값은 시스템에 걸리는 초당 인터럽트 수이다.
네트워크나 디스크 io 부하가 많을 경우 이 값이 크다.
네트워크나 디스크에 읽기 쓰기를 수행할 때마다 인터럽트가 생성되기 때문이다.
Cs는 문맥전환 횟수이다.
문맥 전환이 발생하는 이유
(1) 재 스케줄링 – 프로세스 간 전환이 필요하다.
(2) 커널 호출 – 프로세스 영역과 커널 영역 사이 전환이 필요하다.
(3) 인터럽트 – 프로세스 영역과 커널 영역 사이 전환이 필요하다.
문맥전환은 지연(latency)과 CPU 부하(CPU load)를 일으키는 주요 원인이다.
Vmstat을 사용하면 이런 시스템 활동을 모니터링하고 검토할 수 있다.
예를 들어 free 값이 낮고, 스왑 값 si, so가 크다면, 물리적 메모리가 부족하여 페이징과 스왑이 과도하게 발생하고 있다는 뜻이다.
So 값이 항상 크다면 스왑 영역이나 물리적 메모리가 부족하다는 뜻이다.
이때는 free 명령을 사용해 메모리와 스왑 영역 구성을 확인한다.
swapon –s 명령을 사용하면 스왑 디바이스 구성을 확인할 수 있다.
또한 iostat 명령으로 어느 디스크를 가장 많이 사용하는지도 찾아낼 수 있다.
1.1.2. free
시스템에서 사용된 메모리와 남아있는 자유 메모리 양을 확인할 수 있다.
1.1.3. Mpstat
프로세서 사용률 통계를 살펴볼 수 있는 프로그램이다.
Mpstat은 멀티프로세서 시스템에서 특정 CPU에 대한 통계를 볼 수 있는 옵션을 제공한다.
mpstat 필드의 의미.
(1) CPU: 프로세서의 번호. 키워드 all은 통계 값이 모든 프로세서에 대한 평균 값임을 뜻한다.
(2) %user – 사용자 수준(응용 프로그램)에서 실행하는 동안 CPU 사용률(%)
(3) %nice – nice 우선순위를 사용자 수준에서 실행하는 동안 CPU 사용률(%)
(4) %system – 시스템 수준(커널)에서 실행하는 동안 CPU 사용률(%)
(5) %idle – 시스템에서 별다른 디스크 IO 요청이 없고, CPU가 idle 상태였던 시간(%)
(6) Intr/s – CPU각 받은 초당 인터럽트 수
1.1.4. net
네트워크 층에 대한 정보를 포함하고 있다.
이 디렉토리는 다양한 네트워크 매개변수와 통계 정보를 제공해 준다.
(1) arp – ARP(Address Resolution Protocol)표
(2) dev_mcast – 각 디바이스가 귀를 귀울이는 (listening) 계층2(Layer 2) 멀티캐스트 그룹
(3) mcfilter – 멀티캐스트 필터
(4) netstat – 네트워크 통계
(5) raw – raw device 통계
(6) rt_cache – 라우팅 캐시
(7) snmp – SNMP 데이터 정보
(8) softnet_stat – Softnet 통계
(9) udp – UDP 소켓
(10) dev – 네트워크 디바이스 통계
(11) igmp – IGMP 멀티캐스트 정보
(12) netlink – Pf_NETLINK 소켓 목록
(13) packet – 패킷 정보
(14) route – IP 라우팅 정보
(15) rt_cache_stat – 라우팅 캐시
(16) sockstat - 소켓 통계
(17) tcp – TCP 소켓 정보
(18) unix – UNIX 도메인 소켓 정보
1.1.5. slabinfo
slab 관점에서 메모리 사용에 관한 정보를 제공해준다.
리눅스 커널에서 자체 캐시를 가지고 있는 오브젝트(버퍼 헤더, 아이노드, 디렉토리 엔트리, …)에 관한 정보와 캐시 통계 정보를 제공한다.
1.1.6. stat
CPU, 인터럽트, 문맥 전환 등 일반적인 시스템 통계를 제공한다.
Stat 필드는 다음과 같다.
(1) cpu – user, nice, system, idle, iowait, irq, softirq에서 보낸 jiffy 수
(2) cpu0 – CPU별 통계
(3) intr – 받은 인터럽트 수
(4) ctxt – 문맥 전환 횟수
(5) btime – 컴퓨터 시작 시간
(6) processes – fork 수
(7) procs_running – 실행 프로세스 수
(8) procs_blocked – 차단된 프로세스 수
1.1.7. sys
sys 디렉토리를 사용하면 시스템을 다시 시작하지 않고도, 커널 내 매개변수 일부를 변경할 수 있다.
값을 변경하려면 echo 명령을 사용하여 새 값을 파일로 보내면 된다.
이때 변경된 값은 현재 시작한 시스템에만 적용된다.
매개변수를 영구적으로 변경하려면 부트 스크립트(boot script)를 이용해 값을 변경한다.
1.1.8. dev/fs
파일 시스템-타입 구조에 관한 정보를 제공한다.
(1) aio-max-nr : aio 요청 최대 횟수
(2) aio-nr : 모든 활성 aio 문맥에 대한 io_setup 시스템 호출 이벤트 횟수
(3) dentry-state : 디렉토리 엔트리 정보
(4) dir-notify-enable : 디렉토리 통지
(5) file-max : 동시에 열수 있는 파일 최대 개수
(6) file-nr : 열린 파일
(7) inode-nr : 현재 할당된 아이노드 개수와 자유 아이노드 개수
(8) inode-state : 할당된 아이노드, 자유 아이노드, 기타 값 5개
(9) lease-break-time : lease 시간.
(10) Lease-enable : 리스 활성화
(11) Overflowgid : 그룹ID 정의
(12) Overflowuid : 사용자 ID 정의
(13) Binfmt_misc : 추가 이진 형식 등록 기능
1.1.9. Sys/kernel
커널에 관한 정보를 제공한다.
(1) cad_pid : CTRL+ALT+DELTE PID
(2) cap-bound : 능력 제한 집합(Capability bounding set)
(3) core_pattern : 코어 파일이름에 사용하는 문자열 패턴
(4) core_uses_pid: 코어 파일이름에 PID 사용여부
(5) ctrl-alt-del: CTRL+ALT+DELTE 처리방법
(6) domainname: 시스템 도메인명
(7) hostname: 시스템 호스트명
(8) hotplug: 시스템 구성 변경 시 호출되는 유틸리티 구성 이름, 기본값은 /sbin/hotplug
(9) msgmax: 한 프로세스에서 다른 프로세스로 보낼 수 있는 메시지 최대 크기
(10) msgmnb: 단일 메시지 큐의 최대 바이트 수
(11) msbmni: 메시지 큐 식별자 최대 개수
(12) ngroups_max: 최대그룹수
(13) osrelease: 커널 릴리스 번호
(14) ostype: 운영체제
(15) overflowgid: 오버플로 그룹ID
(16) overflowuid: 오버플로 사용자ID
(17) panic: 커널 패닉이 발생한 경우, 시스템을 재 부팅하기까지 커널이 기다리는 시간(초)
(18) panic_on_oops: 웁스(Oops) 발생시 커널 패닉 발생 여부
(19) pid_max: 최대PID 개수
(20) printk: 오류 메시지 출력에 관련된 다양한 설정 제어
(21) printk_ratelimit: printk 제한 시간 범위
(22) printk_ratelimit_burst: printk 제한 크기 범위
(23) rtsig-max: 시스템에 존재하는 POSIX 실시간 신호 큐 크기
(24) rtsig-nr: 현재 큐에 들어있는 실시간 신호 개수
(25) sem: 세마포어 한계
(26) shmall: 공유 메모리 최대크기(바이트)
(27) shmmax: 공유 메모리 세그먼트 최대 크기(바이트)
(28) shmmni: 공유 메모리 배열 식별자
(29) sysrq: SysRq 활성화
(30) tainted: 커널이 감염된 모듈을 적재했는지 여부
(31) thread-max: 최대 스레드 개수
(32) version: 현재 소스 기반에서 커널을 빌드한 횟수와 커널을 빌드한 날짜/시각
(33) pty: UNIX98 가상 터미널(pseudoterminal) 번호에 대한 정보를 포함하는 디렉토리
(34) random: /dev/random 파일 동작을 제어하는 매개변수를 포함하는 디렉토리
1.1.10. /sys/vm
가상 메모리 하위 시스템이다.
이 디렉토리에 있는 파일은 커널의 가상 메모리 하위 시스템을 튜닝하는데 사용할 수 있다.
(1) block_dump: 이 플래그를 설정하면, 디스크가 spin up 하는 이유를 디버깅할 수 있다.
(2) dirty_background_ratio: pdflush 데몬이 변경된(dirty) 자료를 쓰기 시작하는 페이지 수
(3) dirty_expire_centisecs: 변경된 자료가 이 시간 이상 그대로 남아있으면, pdflush 데몬이 변경된 자료를 쓴다.
(4) dirty_ratio: 디스크 쓰기를 수행하는 프로세스가 자료를 쓰기 시작하는 페이지 수
(5) dirty_writeback_centisecs: 주지적으로 pdflush 를 수행할 시간 간격
(6) laptop_mode: 하드 디스크 스핀 업 시간을 최소화하기 위해 사용한다. 랩탑에서 배터리를 절약할 수 있다.
(7) lower_zone_protection: 보호할 하위 메모리 양
(8) max_map_count: 최대 맵(map)수
(9) min_free_kbytes: 최소 자유 킬로바이트 수
(10) nr_pdflush_threads: pdflush 스레드 개수
(11) overcommit_memory: 커널은 3가지 초과 할당 메모리 처리 모드를 지원한다.
0을 설정하면, 커널은 실제 사용 가능한 메모리보다 더 큰 메모리 할당 요청을 거부한다.
1은 초과 여부를 확인하지 않는다.
2는 할당 가능한 메모리를 RAM 구성값(%) + 스왑 메모리로 제한다.
(12) Overcommit_ratio: overcommit_memory가 2이면, overcommit_ration는 RAM 구성값(%)을 지정한다.
(13) page-cluster: 한 번에 스왑 메모리에 쓰는 페이지 수
(14) swappiness: 스왑하는 양
1.1.11. sysrq-trigger
sysrq-trigger는 sysrq 기능을 활성화한다.
Magic SysRq는 커널이 곧바로 가로채는 키 조합이다.
여러 기능 중, 응급상황에서 시스템을 종료할 때 사용할 수 있다.
마법 sysrq는 ALT-SysRq 명령으로 수행한다.
SysRq 키는 Print Screen 이라는 레이블이 붙기도 한다.
Sysrq-trigger 파일에 문자를 쓰면 물리적인 접촉 없이도 ALT-SysRq-해당 문자를 누르는 작용을 한다.
따라서 원격 사용자도 SysRq 기능을 사용할 수 있다.
이 기능은 키보드를 사용할 수 없는 상황에서 특히 유용하다.
유용한 디버그 키인 ALT-SysRq-T는 현재 실행중인 태스크 정보를 표시한다.
각 프로세스 마다 표시된 프로세스의 스택 추적도 함께 표시한다.
1.1.12. /proc/vmstat
Vmstat은 전역 페이지 통계를 보여준다.
(1) nr_dirty: 쓰기 가능한 변경된 페이지
(2) nr_writeback: writeback한 페이지
(3) nr_unstable: 불안정한 NFS 페이지
(4) nr_page_table_pages: 페이지 테이블용 페이지
(5) nr_mapped: 페이지 테이블로 사상됨
(6) nr_slab: 슬랩 내부 숫자
(7) pgpgin: 디스크 읽기
(8) pgpgout: 디스크 쓰기
(9) pswpin: 스왑 읽기
(10) pswpout: 스왑 쓰기
(11) pgalloc_high: High 영역에서 페이지 할당
(12) pgalloc_normal: Normal 영역에서 페이지 할당
(13) pgalloc_dma: DMA 영역에서 페이지 할당
(14) pgfree: 페이지 해제
(15) pgactivate: 활성에서 비활성으로 이동된 페이지
(16) pagedeactivate: 비활성에서 활성으로 이동된 pv이지
(17) pgfault: 폴트 (주 폴트와 부 폴트)
(18) pgmajfault: 주 폴트
(19) pgrefill_high: refill_inactive_zone에서 검사함
(20) pgrefill_normal: refill_normal_zone에서 검사함
(21) pgrefill_dma: refill_dma_zone에서 검사함
(22) pgsteal_high: 회수된 상위 페이지 총 개수
(23) pgsteal_normal: 회수된 일반 페이지 개수
(24) pgsteal_dma: 회수된 DMA 페이지 총 개숫
(25) pgscan_kswapd_high: kswapd로 스캔된 상위 페이지 총 개수
(26) pgscan_kswapd_normal: kswapd로 스캔된 일반 페이지 총 개수
(27) pgscan_kswapd_dma: kswapd로 스캔된 DMA 페이지 총 개수
(28) pgscan_direct_high: 스캔된 상위 페이지 총 개수
(29) pgscan_direct_normal: 스캔된 일반 페이지 총 개수
(30) pgscan_direct_dma: 스캔된 DMA 페이지 총 개수
(31) pginodesteal: inode 해제로 회수된 페이지
(32) slabs_scanned: 스캔된 슬랩 오브젝트
(33) kswapd_steal: kswapd로 스캔된 페이지
(34) kswapd_inodesteal: kswapd 아이노드 해제로 회수됨
(35) pageoutrun: 페이지를 회수하는 kswapd 호출
(36) alllocstall: 직접 메모리 회수 호출.
(37) pgrotated: LRU 끝으로 회전된 페이지
1.2. 요약
/proc 파일 시스템 매개변수 중 일부는 튜닝이 가능하다
실행중인 커널에서 매개변수를 튜닝할 경우에는 배포판 sysctl.conf 파일에 튜닝한 매개변수를 추가해야 다음에도 계속 사용할 수 있다.
http://www.kernel.org/
커널 소스. 각 /proc 항목에 대한 자세한 내용은 커널 소스의 /Documentation 디렉토리 내부 파일을 참조한다.
예를 들어 /filesystems 디렉토리 내부에 있는 proc.txt 파일은 /proc 파일 시스템에 대한 추가 정보를 포함하고 있다.
http://sebastien.godard.pagesperso-orange.fr/
sysstat 유틸리티(iostat, sara, sadf, mpstat, sa).
Sysstat 유틸리티는 리눅스용 성능 감시 도구 모음이다.
각 도구는 시스템 정보를 /proc 파일시스템에서 가져온다.
| |
|
|
|
|