DATA 전문가로 가는 길

[Unix/Linux] CentOS 7 실시간 프로세스 점검 및 시스템 자원 모니터링 정리 본문

OS/Fundamental

[Unix/Linux] CentOS 7 실시간 프로세스 점검 및 시스템 자원 모니터링 정리

EstenPark 2018. 3. 8. 16:53

1. System 모니터링 관련 RPM 설치

1.1. RPM 파일 다운 로드


1.2. RPM 설치

[2018-03-07 19:07:49]-[root@estenparksvr:/opt/linux_edu_rpm]
# rpm -ivh lm_sensors-libs-3.4.0-4.20160601gitf9185e5.el7.x86_64.rpm

[2018-03-07 19:07:49]-[root@estenparksvr:/opt/linux_edu_rpm]
# rpm -ivh lsof-4.87-4.el7.x86_64.rpm

[2018-03-07 19:07:49]-[root@estenparksvr:/opt/linux_edu_rpm]
# rpm -ivh multitail-6.4.2-1.el7.x86_64.rpm

[2018-03-07 19:07:49]-[root@estenparksvr:/opt/linux_edu_rpm]
# rpm -ivh strace-4.12-4.el7.x86_64.rpm

[2018-03-07 19:07:49]-[root@estenparksvr:/opt/linux_edu_rpm]
# rpm -ivh sysstat-10.1.5-12.el7.x86_64.rpm


2. 프로세스 실시간 점검 및 디버깅

2.1. CPU TOP 10

[2018-03-07 16:05:20]-[root@estenparksvr:~]
# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm --sort -pcpu |head -11
USER       PID  PPID   RSS  SIZE    VSZ %MEM %CPU     TIME COMMAND
hiwdbusr  2176  1299 927876 2464032 2508196 46.3 0.2 00:00:44 mysqld
root         1     0  3680  1316  41288  0.1  0.0 00:00:01 systemd
root         2     0     0     0      0  0.0  0.0 00:00:00 kthreadd
root         3     2     0     0      0  0.0  0.0 00:00:00 ksoftirqd/0
root         6     2     0     0      0  0.0  0.0 00:00:00 kworker/u2:0
root         7     2     0     0      0  0.0  0.0 00:00:00 migration/0
root         8     2     0     0      0  0.0  0.0 00:00:00 rcu_bh
root         9     2     0     0      0  0.0  0.0 00:00:00 rcuob/0
root        10     2     0     0      0  0.0  0.0 00:00:00 rcu_sched
root        11     2     0     0      0  0.0  0.0 00:00:00 rcuos/0
  • USER : 프로세스를 실행시킨 사용자 ID
  • PID : 프로세스 ID
  • PPID : Parent 프로세스 ID
  • RSS : Non-swapped Physical 메모리(KB)
  • SZ : 대략적인 필요한 SWAP 공간
  • VSZ : 프로세스의 가상 메모리 (1024 Byte 단위)

2.2. Memory TOP 10

[2018-03-07 16:07:20]-[root@estenparksvr:~]
# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm --sort -pmem |head -11
USER       PID  PPID   RSS  SIZE    VSZ %MEM %CPU     TIME COMMAND
hiwdbusr  2176  1299 927876 2464032 2508196 46.3 0.2 00:00:44 mysqld
root         1     0  3680  1316  41288  0.1  0.0 00:00:01 systemd
root         2     0     0     0      0  0.0  0.0 00:00:00 kthreadd
root         3     2     0     0      0  0.0  0.0 00:00:00 ksoftirqd/0
root         6     2     0     0      0  0.0  0.0 00:00:00 kworker/u2:0
root         7     2     0     0      0  0.0  0.0 00:00:00 migration/0
root         8     2     0     0      0  0.0  0.0 00:00:00 rcu_bh
root         9     2     0     0      0  0.0  0.0 00:00:00 rcuob/0
root        10     2     0     0      0  0.0  0.0 00:00:00 rcu_sched
root        11     2     0     0      0  0.0  0.0 00:00:00 rcuos/0

2.3. 프로세스 정보 (/proc)

  - /proc 디렉토리에는 프로세스 정보를 가지는 디렉토리가 존재하며, 각 프로세스의 PID 디렉토리가 구성 되어 있으며, 다음과 같은 다양한 정보들을 제공합니다.

2.3.1. 프로세스 PID 상세 정보 분석

  - /proc/PID/ 해당 디렉토리 안에는 다양한 정보가 있으며, ps 명령어 기반을 해당 디렉토리에서 본다고 생각하시면 됩니다.

[2018-03-07 16:09:15]-[root@estenparksvr:~]
# cat /proc/2176/status
Name:   mysqld # 프로세스가 실행된 명령어 이름
State:  S (sleeping) # 프로세스의 현재 상태(RSDZTW) 
Tgid:   2176 # 스레드 GROUP ID 또는 PID
Ngid:   0
Pid:    2176 # 스레드 ID.
PPid:   1299
TracerPid:      0  # 프로세스 추척을 위한 PID 
Uid:    1002    1002    1002    1002
Gid:    501     501     501     501
FDSize: 256
Groups: 501
VmPeak:  2508196 kB  # 최고로 할당된 가상메모리 크기
VmSize:  2508196 kB  # 가상 메모리 크기
VmLck:         0 kB  # lock된 메모리 크기
VmPin:         0 kB
VmHWM:    940788 kB  # swap되지 않고 설정된 가장 큰 크기
VmRSS:    927876 kB  # swap되지 않고 설정된 크기
VmData:  2463896 kB
VmStk:       136 kB
VmExe:     14424 kB
VmLib:      4160 kB  # 공유라이브러리 code의 크기
VmPTE:      2004 kB  # 페이지 테이블 엔트리 크기
VmSwap:        0 kB
Threads:        32   # 프로세스에 포함된 스래드들의 개수.  
SigQ:   0/7743
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000087007
SigIgn: 0000000000001006
SigCgt: 00000001800066e9
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 0000001fffffffff
Seccomp:        0
Cpus_allowed:   1
Cpus_allowed_list:      0
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        504
nonvoluntary_ctxt_switches:     80

2.4. strace 명령어(프로세스 디버깅 툴)

  - strace는 애플리케이션 여러개를 사용하는 system call과 signal 등을 추적해서 성능 저하를 일으키는 부분은 없는지, 에러가 나는 부분은 없는지 확인 하는데 사용하는 디버깅 툴입니다.

2.4.1. strace 명령어를 활용한 디버깅

# [설명] "-e trace=" 옵션을 사용하면 여려 개의 시스템 콜을 출력할 수 있습니다. 다음 예제는 open과 read 시스템 콜 추적을 보여줍니다.
[root@localhost 1731]# strace -e open,read /estenpark/dbms/engine/mariadb-10.1.12-linux-x86_64/bin/mysqld

# [설명] strace 결과를 output.txt 파일에 저장하는 것을 보여줍니다.	
[root@localhost 1731]# strace  -o output.txt -e open,read /estenpark/dbms/engine/mariadb-10.1.12-linux-x86_64/bin/mysqld

# [설명] 특정 프로세스 정보 확인 하는 방법입니다.
[root@localhost ~]# strace -p 1731

# [설명] 다음과 같이 -t 옵션을 사용해 strace의 라인 별 시간 정보를 출력할 수 있습니다.
[root@localhost ~]# strace -t -e open ls /home
       
# [설명] ls /home 수행에 대한 call 통계를 확인 가능 합니다.   
[root@localhost ~]# strace -c -e open ls /home
	hiwdbusr
	% time     seconds  usecs/call     calls    errors syscall
	------ ----------- ----------- --------- --------- ----------------
	100.00    0.000048           4        12           open
	------ ----------- ----------- --------- --------- ----------------
	100.00    0.000048                    12           total

# [설명] t time, -o Output, -p 옵션을 활용해서 프로세스에 대한 전체 스레드를 디버깅 할 수 있습니다.(데이터가 많이 쌓이므로, 사용할 때 주의 하시기 바랍니다.)
[2018-03-07 18:03:51]-[root@estenparksvr:~]
# strace -s 65535 -f -t -o strace_dump.txt -p 2176

2.5. lsof 명령어(프로세스 파일 검출)

  - lsof 는 list open files 의 약자로 시스템에서 열린 파일 목록을 알려주고 사용하는 프로세스, 디바이스 정보, 파일의 종류등 상세한 정보를 출력 합니다.

[root@localhost linux_edu_rpm]# lsof -p 1731
[root@localhost ~]# lsof -i tcp
[root@localhost ~]# lsof -i udp
[root@localhost ~]# lsof -i:22

2.6. top 명령어(자원 시스템 모니터링)

  - Shift + F : Fields Management 모드로 전환 하며, 방향키로 항목을 선택 후 "r"을 선택하면 정렬을 해주며, "스페이스바"를 선택하면 항목을 넣고 뺄 수 있습니다.

  - d : Delay 주기 설정해주는 방법으로 기본으로는 3.5초로 주기로 모니터링을 하는데 경우에 따라서 설정을 바꾸고 싶을 때 유용 합니다.


3. 시스템 성능 모니터링(sysstat)

3.1. sar  

  - sar 명령어는 솔라리스,유닉스,리눅스 등에서 유용하게 쓰는 시스템 모니터링 프로그램입니다.

3.1.1 sar 명령어로 모니터링 가능한 항목 

  - I/O 전송량

  - 페이징

  - 프로세스 생성 숫자

  - 블락 디바이스 활동

  - 인터럽트

  - 네트워크 통계

  - run 큐 및 시스템 부하 평균

  - 메모리와 스왑 공간 활용 통계

  - 메모리 통계

  - CPU 이용도

  - 특정 프로세스에 대한 CPU 이용도

  - inode, 파일, 기타 커널 테이블에 대한 상태

  - 시스템 스위칭 활동(context switch)

  - 스와핑 통계

  - 특정 프로세스 통계

  - 특정 프로세스의 자식 프로세스 통계

  - TTY 디바이스 활동

3.1.2 sar 명령어

[2018-03-07 18:22:44]-[root@estenparksvr:~]
# sar 1 3
Linux 3.10.0-327.el7.x86_64 (estenparksvr)  2018년 03월 08일        _x86_64_        (4 CPU)

15시 55분 43초     CPU     %user     %nice   %system   %iowait    %steal     %idle
15시 55분 44초     all     39.85      0.00      3.51      0.00      0.00     56.64
15시 55분 45초     all     40.05      0.00      3.27      0.00      0.00     56.68
15시 55분 46초     all     30.08      0.00      4.76      0.25      0.00     64.91
Average:        all     36.65      0.00      3.85      0.08      0.00     59.41

[2018-03-07 18:31:37]-[root@estenparksvr:~]
# sar -r
Linux 3.10.0-327.el7.x86_64 (estenparksvr)  03/08/18        _x86_64_        (4 CPU)

14:40:01    kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
14:50:01       233584  32483948     99.29        48  16808132  37609488     37.67  20465492  10692520     54788
15:00:01       753676  31963856     97.70        48  16282616  37610376     37.68  19211608  11425796     67556
15:10:01      2003012  30714520     93.88        48  15015228  37640528     37.71  19447684   9946628    226432
15:20:01      2175720  30541812     93.35        48  14806660  37691096     37.76  19356060   9861228     57232
15:30:01      2737236  29980296     91.63        48  14246344  37890576     37.96  19372896   9287452     24484
15:40:01      2257092  30460440     93.10        48  14778232  37616984     37.68  19387604   9755528     34608
15:50:01       467672  32249860     98.57        48  15352052  37628996     37.69  20664644  10263840     29976
16:00:01       873172  31844360     97.33        48  14919908  37651916     37.72  20783696   9741196     41468
Average:      3085846  29631686     90.57        59  13894779  37599841     37.67  19710910   8609890     21291
  • kbmemfree : 사용가능한 총 메모리의 양(k/bytes)
  • kbmemused : 사용중인 총 메모리의 양(k/bytes), 커널에서 사용중인 메모리는 제외
  • %memused : 사용된 메모리의 %양
  • kbmemshrd : 시스템에서 공유메모리로 사용된 총 메모리의 양(k/bytes)
  • kbbuffers : 커널에서 buffer 메모리로 총 사용된 메모리의 양(k/bytes)
  • kbcached : 커널에서 cache data로 사용된 총 메모리의 양(k/bytes)
  • kbswpfree : 사용가능한 스왑 공간의 양(k/bytes)
  • kbswpused : 사용된 스왑 공간의 양(k/bytes)
  • %swpused : 사용된 스왑 공간의 %양

3.2. mpstat 

  - CPU Time을 CPU 별로 측정 함. CPU가 일하는 상태를 확인 가능 합니다.

[2018-03-07 18:31:37]-[root@estenparksvr:~]
# mpstat -P ALL 1

3.3. pidstat 

  - pidstat은 process당 top명령을 수행하는것과 비슷하며, 다만 차이점은 스크린 전체에 표시하는 것이 아니라 지속적으로 변화하는 상황을 띄워주기 떄문에 상황변화를 기록하기 좋습니다.

[2018-03-07 18:41:43]-[root@estenparksvr:~]
# pidstat 1

3.4. iostat 

  - block device(HDD, SSD 등등)가 어떻게 동작하는지 이해할 수 있습니다.

[2018-03-07 18:43:50]-[root@estenparksvr:~]
# iostat -xz 1


4. 실시간 로그 파일 동시 확인

4.1. multitail 

  - tail 명령어는 하나의 파일만 실시간으로 볼수 있는 것을 multitail은 한 번에 여러개의 로그 파일을 분석 또는 모니터링 할 수 있는 툴입니다.

# [설명] Multi Tail 사용 방법(여러개 한번에 보는 방법)
[2018-03-07 18:46:27]-[root@estenparksvr:~]
# cd /var/log
[2018-03-07 18:47:21]-[root@estenparksvr:/var/log]
# multitail messages lastlog maillog

# [설명] 새로 방향으로 보는 방법
[2018-03-07 18:49:11]-[root@estenparksvr:/var/log]
# multitail -s 3 messages lastlog maillog

# [설명] 여러개 Ping 체크 하는 방법
[2018-03-07 18:49:42]-[root@estenparksvr:/var/log]
# multitail -l "ping localhost" -l "ping 192.168.5.1"


5. 문자열 패턴, 조회, 치환 

  - 정규 표현식 : 바로가기 

  - 문자열 찾기, 패턴, 치환 : 바로가기


6. 부록

  - 실시간 로그 파일 확인 후 종료 하는 방법 : 바로가기

  - 터미널 prompt 변경 하는 방법 : 바로가기


7. 출처

출처 : https://www.joinc.co.kr/w/Site/system_programing/proc/GetSMSInfo [proc 상세 설명]

출처 : https://www.lesstif.com/pages/viewpage.action?pageId=20776078 [lsof 명령어]

출처 : http://blog.cafe24.com/2005 [sar 명령어]

출처 : http://blueyikim.tistory.com/555 [mpstat 명령어]

출처 : http://idchowto.com/?p=16831 [multitail 명령어]



Comments