본문 바로가기

서버운영 (TA, ADMIN)/리눅스

[리눅스] 시스템 모니터링 유틸리티

서버관리, 애플리케이션의 기본은 문제의 식별(모니터링), 문제의 해결(튜닝)에 있습니다.

리눅스 서버관리시 모니터링 유틸에 대해 정리해 보았습니다.


1. STAT 시리즈의 완결판, DSTAT ( http://www.smallake.kr/?p=19241 )



디스크별 I/O 사용량 확인, I/O 부하 유발 프로세스 확인, read/write 속도 확인하는 방법입니다.


> dstat --time --disk-util --disk-tps -p -g --top-io-adv --top-cputime-avg --top-latency




2. top 유틸로 시스템 상황 모니터링 하기 ( https://www.conory.com/note_linux/11789 )


리눅스에서는 top라는 유틸리티로 시스템상황을 모니터링 할 수 있습니다. (ex. 윈도우의 "작업관리자")

아래 명령어로 top을 실행시키면 시스템 상황이 5초마다 실시간으로 표시 됩니다.


> top [option]


[option]

-d [시간] : 지정한 시간마다 시스템 상황이 업데이트되어 표시됩니다. (기본값 : 5, 단위 : 초)

-p [PID] : 해당 PID의 프로세스만 보여줍니다.

-c : 프로세스들의 전체 경로를 표시합니다.



* top의 단축키입니다.

q : top을 종료합니다.

shift + P : CPU 사용률이 높은 순서대로 프로세스들을 정렬합니다.

shift + M : 메모리 사용률이 높은 순서대로 프로세스들을 정렬합니다.

shift + T : 실행시간이 가장 오래된 순서대로 프로세스들을 정렬합니다.

shift + N : PID를 오름차순대로 프로세스들을 정렬합니다.

shift + A : PID를 내림차순대로 프로세스들을 정렬합니다.

u [사용자명] : 해당 사용자가 실행시킨 프로세스를 보여줍니다.

k [PID] : 해당 PID의 프로세스를 종료합니다.



3. MyTop, 리눅스의 top처럼 MySQL 상태 모니터링 ( http://coffeenix.net/board_view.php?bd_code=57 )





 표시

의미

관련 show status  변수명

 MySQL on localhost (3.23.49a)

 호스트명과 MySQL 버전 

 

 up 11+23:04:23 [17:17:46]

 MySQL uptime과 현재 시간 

 Uptime 

 Query : 947.4k

 uptime중의 총 쿼리 개수 

 Questions 

 qps: 1         Slow: 0.0

 초당 쿼리 수 평균과 slow 쿼리 수

 Questions, Slow_queries

 * Slow_queries이란 MySQL 서버 설정값이 long_query_time(default는 10초)보다 더 긴 시간동안 질의된 쿼리 수를 의미합니다.

 Se/In/Up/De(%):   70/21/04/00

 총 쿼리 중 각각 Select,
  Insert+Replace,

  Update,

  Delete 비율

 Com_select,

 Com_insert, Com_replace

 Com_update,

 Com_delete

 qps now:   2 Slow   qps: 0.0

 현재 쿼리 수와

  현재 slow 쿼리 수

 Questions

 Slow_queries

 * Slow qps가 자주 나오면 SQL문 최적화가 필요합니다.

 Threads:  11 ( 3 / 0 )

 11은 쓰레드 총 개수

 3은 동작중인 쓰레드

 0은 캐시된 쓰레드

 Thread_connected

 Thread_running

 Threads_cached

 62/12/00/00

 각각 현재의 Select, ... 비율

 Com_select, ... 

 Key Efficiency: 100.0%

 Key 캐시 히트율 

 Key_reads, Key_read_requests 

 * Key Efficiency 높을수록 키 버퍼에서 읽어들인 것입니다. 수치가 99%보다 낮다면 key_buffer_size 조정이 필요합니다.

 Bps in/out:    77.0/537.7

 초당 주고받은 평균 bytes 

 Bytes_received
 Bytes_send 
 Now in/out:   8.4/569.6

 현재 주고받은 bytes 

 Bytes_received

 Bytes_send 


myTop 실행옵션 입니다.

c ( command별 사용 비율과 건수 )

p ( 일시 정지 )

s ( 화면 업데이트 간격 변경 )

q ( 종료 )

i ( sleeping 상태의 쓰레드 표시 여부 변경 )


mytop을 실행시키는데에는 두가지 방법이 있습니다.


1) 커맨드 명령 실행

> mytop -uDB계정 -p패스워드 -d데이터베이스이름 -s1


2) 사용자 설정파일 설정

> vi .mytop


db=mysql
user=root
pass=xxxxx
host=localhost
port=3306
socket=/tmp/mysql.sock
delay=2
color=1
idle=1
header=1
batchmode=0



4. Garbage Collection 모니터링, jstat 

( http://d2.naver.com/helloworld/6043, http://blog.naver.com/solvage/10038025715 )

jstat은 HotSpot JVM에 있는 모니터링 도구입니다. jstat 이외에 Hotspot JVM 모니터링 도구로는 jps와 jstatd가 있습니다. Java 애플리케이션을 모니터링할 때에는 이 세 개의 도구를 모두 사용해야 할 경우도 있습니다.


 옵션

 기능 

 gc

 각 힙(hep) 영역의 현재 크기와 현재 사용량(Eden 영역, Survivor 영역, Old 영역 등), 총 GC 수행 횟수, 누적 GC 소요 시간을 보여 준다.

 gccapacity

 각 힙 영역의 최소 크기(ms), 최대 크기(mx), 현재 크기, 각 영역별 GC 수행 횟수를 알 수 있는 정보를 보여준다. 단, 현재 사용량과 누적 GC 소요 시간은 알 수 없다. 

 gccause

 -gcutil 옵션이 제공하는 정보와 함께 마지막 GC 원인과 현재 발생하고 있는 GC의 원인을 알 수 있는 정보를 보여준다.

 gcnew

 New 영역에 대한 GC 수행 정보를 보여준다.

 gcnewcapacity

 New 영역의 크기에 대한 통계 정보를 보여준다.

 gcold

 Old 영역에 대한 GC 수행 정보를 보여 준다.

 gcoldcapacity

 Old 영역의 크기에 대한 통계 정보를 보여 준다.

 gcpermcapacity

 Permanent 영역에 대한 통계 정보를 보여 준다.

 gcutil

 각 힙 영역에 대한 사용 정도를 백분율로 보여 준다. 아울러 총 GC 수행 횟수와 누적 GC 시간을 알 수 있다.



> jstat -gcutil -h20 -t ${pid} 3000 3000


jstat은 GC 수행 정보를 보는 기능만 제공하지 않습니다. 클래스로더 수행 정보나 Just-in-Time 컴파일러 수행 정보 등도 jstat으로 알 수 있습니다. 해당 링크에서는 GC 수행 정보 모니터링에 대해서만 나와 있습니다.


컬럼 

설명 

jstat 옵션 

 S0C

 Survivor 0 영역의 현재 크기를 KB 단위로 표시 

 -gc -gccapacity -gcnew -gcnewcapacity

 S1C

 Survivor 1 영역의 현재 크기를 KB 단위로 표시

 -gc -gccapacity -gcnew -gcnewcapacity

 S0U

 Survivor 0 영역의 현재 사용량을 KB 단위로 표시

 -gc -gcnew

 S1U

 Survivor 1 영역의 현재 사용량을 KB 단위로 표시

 -gc -gcnew

 EC

 Eden 영역의 현재 크기를 KB 단위로 표시

 -gc -gccapacity -gcnew -gcnewcapacity

 EU

 Eden 영역의 현재 사용량을 KB 단위로 표시

 -gc -gcnew

 OC

 Old 영역의 현재 크기를 KB 단위로 표시

 -gc -gccapacity -gcold -gcoldcapacity

 OU

 Old 영역의 현재 사용량을 KB 단위로 표시

 -gc -gcold

 PC

 Permanent 영역의 현재 크기를 KB 단위로 표시

 -gc -gccapacity -gcold -gcoldcapacity -gcpermcapacity

 PU

 Permanent 영역의 현재 사용량을 KB 단위로 표시

 -gc -gcold

 YGC

 Young Generation의 GC 이벤트 발생 횟수

 -gc -gccapacity -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause

 YGCT

 Young Generation의 GC 수행 누적 시간

 -gc -gcnew -gcutil -gccause

 FGC

 Full GC 이벤트가 발생한 횟수

 -gc -gccapacity -gcnew -gcnewcapacity -gcold -gcoldcapacity -gcpermcapacity -gcutil -gcutil -gccause

 FGCT

 Full GC 수행 누적 시간

 -gc -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause

 GCT

 전체 GC 수행 누적 시간

 -gc -gcold -gcoldcapacity -gcpermcapacity -gcutil -gccause

 NGCMN

 New Generation의 최소 크기를 KB단위로 표시

 -gccapacity -gcnewcapacity

 NGCMX

 New Generation의 최대 크기를 KB단위로 표시

 -gccapacity -gcnewcapacity

 NGC

 New Generation의 현재 크기를 KB단위로 표시

 -gccapacity -gcnewcapacity

 OGCMN

 Old Generation의 최소 크기를 KB단위로 표시

 -gccapacity -gcoldcapacity 

 OGCMX

 Old Generation의 최대 크기를 KB단위로 표시

 -gccapacity -gcoldcapacity

 OGC

 Old Generation의 현재 크기를 KB단위로 표시

 -gccapacity -gcoldcapacity

 PGCMN

 Permanent Generation의 최소 크기를 KB단위로 표시

 -gccapacity -gcpermcapacity

 PGCMX

 Permanent Generation의 최대 크기를 KB단위로 표시

 -gccapacity -gcpermcapacity

 PGC

 현재 Permanent Generation의 크기를 KB단위로 표시

 -gccapacity -gcpermcapacity

 PC

 Permanent 영역의 현재 크기를 KB단위로 표시

 -gccapacity -gcpermcapacity

 PU

 Permanent 영역의 현재 사용량을 KB단위로 표시

 -gc -gcold

 LGCC

 지난 GC의 발생 이유

 -gccause

 GCC

 현재 GC의 발생 이유

 -gccause

 TT

 Tenuring threshold. Young 영역 내에서 이 횟수만큼 복사되었을 경우(S0->S1, S1->S0) Old 영역으로 이동

 -gcnew

 MTT

 최대 Tenuring threshold. Young 영역 내에서 이 횟수만큼 복사되었을 경우 Old 영역으로 이동

 -gcnew

 DSS 

 적절한 Survivor 영역의 크기를 KB 단위로 표시

 -gcnew




5. 트래픽 모니터링 http://blog.naver.com/PostView.nhn?blogId=red31431&logNo=220867870316 )


6. pinpint ( http://javaworld.co.kr/81, https://github.com/naver/pinpoint )


7. 가비아 자체 서버 모니터링 ( https://event.gabia.com/s_event_170221 )