서버관리, 애플리케이션의 기본은 문제의 식별(모니터링), 문제의 해결(튜닝)에 있습니다.
리눅스 서버관리시 모니터링 유틸에 대해 정리해 보았습니다.
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, 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 )
'서버운영 (TA, ADMIN) > 리눅스' 카테고리의 다른 글
[리눅스] SSL 인증서와 KEY 파일 CN 일치 확인 (0) | 2017.06.02 |
---|---|
[리눅스] vim 컬러스킴 변경 (0) | 2017.05.09 |
[리눅스] 리눅스 Centos7 설치 가이드 (0) | 2017.04.25 |
[리눅스] 리눅스 주요 명령어 모음 (0) | 2017.04.06 |
[리눅스] SSL 적용 방법 (0) | 2017.04.05 |