IT
Linux 서버 상태 확인하기
1. uptime
현재 대기중인 프로세스가 얼마나 있는지 나타내는 load average 값을 확인하는 가장 쉬운 방법
uptime
23:51:26 up 21:31, 1 user, load average: 30.02, 26.43, 19.02
|
2. dmesg |tail
시스템 메시지를 확인할 수 있는 명령어. 부팅시부터 모든 커널메시지가 출력되기 때문에 tail을 이용해서 마지막 10줄 만 출력해서 확인
dmesg |tail
[1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
[...]
[1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
[1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
[2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request. Check SNMP counters.
|
3. vmstat 1
virtual memory stat
# r: CPU에서 동작중인 프로세스의 숫자입니다. CPU 자원이 포화(saturation)가 발생하는지 확인할때에 좋은 값. r 값이 CPU의 값보다 큰 경우에 포화되어 있다고 해석된다.
# free: free memory를 kb단위로 나타냄. free memory가 너무 자리수가 많은 경우 free -m를 이용하면 조금더 편하게 확인할 수 있다.
# si, so: swap-in과 swap-out에 대한 값. 0이 아니라면 현재 시스템에 메모리가 부족한것이다.
# us, sy, id, wa, st: 모든 CPU의 평균적인 CPU time을 측정할 수 있다. 각각 user time, 커널에서 사용되는 system time, idle, wait I/O 그리고 stolen time순이다(stolen time은 hypervisor가 가상 CPU를 서비스 하는 동안 실제 CPU를 차지한 시간을 이야기한다.).
vmstat 1
procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
34 0 0 200889792 73708 591828 0 0 0 5 6 10 96 1 3 0 0
32 0 0 200889920 73708 591860 0 0 0 592 13284 4282 98 1 1 0 0
32 0 0 200890112 73708 591860 0 0 0 0 9501 2154 99 1 0 0 0
32 0 0 200889568 73712 591856 0 0 0 48 11900 2459 99 0 0 0 0
32 0 0 200890208 73712 591860 0 0 0 0 15898 4840 98 1 1 0 0
|
4. mpstat -P ALL 1
CPU time을 CPU별로 측정
# 한 CPU만 일하고 있다는 것은 application이 single thread로 동작한다는 이야기
mpstat -P ALL 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:38:49 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
07:38:50 PM all 98.47 0.00 0.75 0.00 0.00 0.00 0.00 0.00 0.00 0.78
07:38:50 PM 0 96.04 0.00 2.97 0.00 0.00 0.00 0.00 0.00 0.00 0.99
07:38:50 PM 1 97.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 2.00
07:38:50 PM 2 98.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00
07:38:50 PM 3 96.97 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 3.03
|
5. pidstat 1
process 당 top 명령을 수행하는 것과 비슷. 지속적으로 변화하는 상황을 띄워줌
# %CPU의 항목은 모든 CPU의 사용량을 이야기한다.
pidstat 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
07:41:02 PM UID PID %usr %system %guest %CPU CPU Command
07:41:03 PM 0 9 0.00 0.94 0.00 0.94 1 rcuos/0
07:41:03 PM 0 4214 5.66 5.66 0.00 11.32 15 mesos-slave
07:41:03 PM 0 4354 0.94 0.94 0.00 1.89 8 java
07:41:03 PM 0 6521 1596.23 1.89 0.00 1598.11 27 java
07:41:03 PM 0 6564 1571.70 7.55 0.00 1579.25 28 java
07:41:03 PM 60004 60154 0.94 4.72 0.00 5.66 9 pidstat
|
6. iostat -xz 1
block device(HDD, SDD등)가 어떻게 동작하는지 확인
# r/s, w/s rkB/s, wkB/s: read 요청과 write 요청, read kB/s, write kB/s를 나타낸다. 어떤 요청이 가장 많이 들어오는지 확인해볼 수 있는 중요한 지표다. 성능 문제는 생각보다 과도한 요청때문에 발생하는 경우도 있기 때문이다.
# await: I/O처리 평균 시간을 밀리초로 표현한 값이다. application한테는 I/O요청을 queue하고 서비스를 받는데 걸리는 시간이기 때문에 application이 이 시간동안 대기하게 된다. 일반적인 장치의 요청 처리 시간보다 긴 경우에는 블럭장치 자체의 문제가 있거나 장치가 포화된 상태임을 알 수 있다.
iostat -xz 1
Linux 3.10.0-327.18.2.el7.x86_64 (C1-L-MIG-WORKER-002) 2018년 03월 11일 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.15 0.00 0.08 0.01 0.00 99.77
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 3.11 3.74 0.77 0.21 23.34 15.84 80.71 0.00 2.05 0.73 6.95 0.59 0.06
dm-0 0.00 0.00 0.29 0.07 8.98 0.38 51.93 0.00 1.34 1.08 2.43 0.45 0.02
dm-1 0.00 0.00 3.58 3.77 14.30 15.09 8.00 0.13 17.81 0.48 34.23 0.03 0.02
dm-2 0.00 0.00 0.01 0.11 0.05 0.38 7.55 0.00 1.65 1.52 1.66 1.50 0.02
|
7. free -m
# buffers: Block 장치 I/O의 buffer 캐시, 사용량
# cached: 파일 시스템에서 사용되는 page cache의 양
# 위 값들이 0에 가까워지면 안됨. 이는 높은 I/O가 발생하고 있음을 의미(iostat으로 확인 가능)
# -/+ buffers/cache 는 사용중인 메모리와 여유 메모리의 양을 나타낸다.
free -m
total used free shared buffers cached
Mem: 3930 3666 264 0 143 556
-/+ buffers/cache: 2966 964
Swap: 4091 990 3101
|
8. sar -n DEV 1
network throughput 측정
# %ifutil은 nicstat로도 측정 가능한 네트워크 장치 사용률이다. 하지만 nicstat에서도 그렇듯 정확한 값을 가져오는게 어려워서 잘 동작하지 않는다.
sar -n DEV 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:16:48 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:16:49 AM eth0 18763.00 5032.00 20686.42 478.30 0.00 0.00 0.00 0.00
12:16:49 AM lo 14.00 14.00 1.36 1.36 0.00 0.00 0.00 0.00
12:16:49 AM docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
9. sar -n TCP,ETCP 1
TCP 통신량을 요약해서 보여준다
# active/s: 로컬에서부터 요청한 초당 TCP 커넥션 수를 보여준다 (예를들어, connect()를 통한 연결).
# passive/s: 원격으로부터 요청된 초당 TCP 커넥션 수를 보여준다 (예를들어, accept()를 통한 연결).
# retrans/s: 초당 TCP 재연결 수를 보여준다.
# active와 passive 수를 보는것은 서버의 부하를 대략적으로 측정하는데에 편리하다. acitve를 outbound, passive를 inbound 연결로 판단할 수 있는데, 꼭 그렇지만은 않다.(ex : localhost에서 localhost로 연결같은 connection)
# retrans는 네트워크나 서버의 이슈가 있음을 이야기한다. 신뢰성이 떨어지는 네트워크 환경이나(공용인터넷), 서버가 처리할 수 있는 용량 이상의 커넥션이 붙어서 패킷이 드랍되는것을 이야기한다.
sar -n TCP,ETCP 1
Linux 3.13.0-49-generic (titanclusters-xxxxx) 07/14/2015 _x86_64_ (32 CPU)
12:17:19 AM active/s passive/s iseg/s oseg/s
12:17:20 AM 1.00 0.00 10233.00 18846.00
12:17:19 AM atmptf/s estres/s retrans/s isegerr/s orsts/s
12:17:20 AM 0.00 0.00 0.00 0.00 0.00
|
10. top
위에서 체크해본 다양한 측정치를 쉽게 체크 가능
# 화면이 지속적으로 업데이트 된다.
# Ctrl + S : 화면 업데이트 중지
# Ctrl + Q : 화면 업데이트 시작
top
top - 00:15:40 up 21:56, 1 user, load average: 31.09, 29.87, 29.92
Tasks: 871 total, 1 running, 868 sleeping, 0 stopped, 2 zombie
%Cpu(s): 96.8 us, 0.4 sy, 0.0 ni, 2.7 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 25190241+total, 24921688 used, 22698073+free, 60448 buffers
KiB Swap: 0 total, 0 used, 0 free. 554208 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20248 root 20 0 0.227t 0.012t 18748 S 3090 5.2 29812:58 java
4213 root 20 0 2722544 64640 44232 S 23.5 0.0 233:35.37 mesos-slave
66128 titancl+ 20 0 24344 2332 1172 R 1.0 0.0 0:00.07 top
5235 root 20 0 38.227g 547004 49996 S 0.7 0.2 2:02.74 java
4299 root 20 0 20.015g 2.682g 16836 S 0.3 1.1 33:14.42 java
1 root 20 0 33620 2920 1496 S 0.0 0.0 0:03.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.35 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:06.94 kworker/u256:0
8 root 20 0 0 0 0 S 0.0 0.0 2:38.05 rcu_sched
|
'IT' 카테고리의 다른 글
C# Registry (기본값) 읽기/쓰기 (2) | 2024.03.05 |
---|---|
Apple, 강력한 M3 칩을 탑재한 새로운 MacBook Air 13 및 15 공개 (0) | 2024.03.05 |
ElasticSearch Heap 메모리 설정 (0) | 2024.03.04 |
C# Windows 방화벽 정책 추가/삭제 (0) | 2024.03.04 |
대규모 언어 모델(LLM)을 위한 검색-증강 생성(RAG) (0) | 2024.02.28 |
댓글