IT

Linux 서버 상태 확인하기

쏘펀 2024. 3. 4.

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

댓글