일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- prompt
- perl one-liner
- command & perl
- MySQL
- grid
- rac
- Oracle RAC
- fdisk
- Network
- SQL
- perl string
- solaris
- php5
- RHEL4
- mariaDB
- solaris network
- oracle
- dba
- memory
- perl + 정규표현식
- 오라클
- bash
- 연산자
- Linux
- patch
- sqlplus
- oracle install
- Unix
- PERL
- cygwin
- Today
- Total
DATA 전문가로 가는 길
[Unix/Linux] CentOS 7 실시간 프로세스 점검 및 시스템 자원 모니터링 정리 본문
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 명령어]
'OS > Fundamental' 카테고리의 다른 글
[Unix/Linux] CentOS 7 시스템 자원 및 네트워크 관련 정리 (0) | 2017.11.21 |
---|---|
[Unix/Linux] 프롬프트(prompt)에서 사용하는 명령어 기록 하는 방법 (0) | 2017.10.27 |
[Unix/Linux] 실시간 로그 파일 확인 후 종료 하는 방법(ending tail -f) (1) | 2016.12.16 |
[Unix/Linux] 계정 만료일자 날짜 포멧에 따라 변경하는 방법(usermod) (0) | 2016.03.11 |
[Unix/Linux] awk, perl 문자열 뽑을때 작은 따음표(single guote) 사용 방법 (0) | 2011.02.20 |