Translate

12/04/2013

linux server management 2

$ free
total used free shared buffers cached
Mem: 513368 503180 10188 0 3772 332740

-/+ buffers/cache: 166668 346700

Swap: 1028152 84908 943244


리눅스에서는 자동적으로 모든 램의 빈 공간을 버퍼 캐쉬로 사용하여 메모리를 효율성을 높이고 있으며 프로그램에서 많은 메모리를 필요로 하는 경우에는 자동으로 캐쉬의 크기를 줄인다. 그렇다면 위에서 실제로 사용가능한 메모리는 free+buffers+cached 이다. -/+ buffers/cache: 이 줄이 이러한 내용을 반영하고 있다.





ᄋvmstat 등의 프로그램을 이용 I/O연산이 얼마나 분산되어있는지, CPU가 작동하지 않고 노는 시간(idle)은 얼마인지, 정상적인 부하가 걸릴 경우 메모리를 얼마나 사용하고 있는지 확인한다.



ᄋ uptime을 이용하여 시스템의 부하를 확인한다. 시스템의 부하가 어떤 추세로 움직이고 있고 어느 정도 수치로 작동하는지 확인을 한다. 웹서비스의 경우 보통 낮시간대에 접속이 폭주하므로 S자 형태로 시스템 부하가 변화될 것이다. 그런데 최대 접속할 시간이 아닌데도 시스템의 부하가 높아진다면 불필요한 프로그램이 계속 돌면서 시스템의 자원을 소비할 가능성도 있고 DOS 공격 등을 받고 있을 가능성도 크다.

$ uptime
9:23pm up 61 days, 5:23, 1 user, load average: 0.02, 0.05, 0.00





- CPU와 메모리를 가장 많이 사용하는 프로세스를 찾으면 부하를 분산시키는데 도움이 될 것이다.

$ ps auxw
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1120 68 ? S Jun17 0:06 init [3]
root 2 0.0 0.0 0 0 ? SW Jun17 0:00 [keventd]
root 3 0.0 0.0 0 0 ? SW Jun17 0:00 [kswapd]
root 4 0.0 0.0 0 0 ? SW Jun17 0:00 [kreclaimd]
root 5 0.0 0.0 0 0 ? SW Jun17 0:32 [bdflush]
root 6 0.0 0.0 0 0 ? SW Jun17 0:02 [kupdated]
root 351 0.0 0.0 1164 284 ? S Jun17 0:01 syslogd -m 0
root 360 0.0 0.0 1728 356 ? S Jun17 0:00 klogd
root 388 0.0 0.0 1156 220 ? S Jun17 0:00 inetd
root 402 0.0 0.2 3824 1452 ? S Jun17 3:09 /usr/sbin/snmpd
named 416 0.0 0.3 3376 1904 ? S Jun17 0:27 named -u named



$ top
7:34pm up 14:19, 3 users, load average: 1.20, 0.54, 0.20
57 processes: 53 sleeping, 4 running, 0 zombie, 0 stopped
CPU states: 94.6% user, 5.3% system, 0.0% nice, 0.0% idle
Mem: 513368K av, 321260K used, 192108K free, 0K shrd, 9208K buff
Swap: 1028152K av, 115000K used, 913152K free 270924K cached

PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND
12436 root 20 0 6428 6428 1564 R 0 13.1 1.2 0:00 cc1
3570 nobody 12 0 11148 6140 5016 R 0 2.5 1.1 0:09 httpd
12435 root 8 0 1528 1528 388 S 0 1.3 0.2 0:00 cpp
4185 root 9 0 512 328 312 S 0 0.3 0.0 0:01 sshd2
11364 taejun 10 0 876 876 680 R 0 0.3 0.1 0:00 top
1 root 8 0 120 68 68 S 0 0.0 0.0 0:04 init
2 root 9 0 0 0 0 SW 0 0.0 0.0 0:00 keventd
3 root 9 0 0 0 0 SW 0 0.0 0.0 0:03 kswapd
4 root 9 0 0 0 0 SW 0 0.0 0.0 0:00 kreclaimd
5 root 9 0 0 0 0 SW 0 0.0 0.0 0:01 bdflush
6 root 9 0 0 0 0 SW 0 0.0 0.0 0:00 kupdated
348 root 9 0 208 156 156 S 0 0.0 0.0 0:00 syslogd
357 root 9 0 608 4 4 S 0 0.0 0.0 0:00 klogd
371 root 8 0 180 124 120 S 0 0.0 0.0 0:00 crond


ᄋ vmstat를 이용한다. (vmstat 5 5)

$ vmstat 5 5
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
3 0 0 115000 189428 9220 272608 1 28 10 36 108 25 2 0 98
1 0 0 115000 189972 9220 272680 0 0 0 205 196 416 95 5 0
1 0 0 115000 187060 9220 272740 0 0 0 157 156 229 95 5 0
2 0 0 115000 194852 9220 272856 0 0 0 149 142 229 96 4 0


- vmstat에서 첫 번째 줄은 부팅 이후의 각 통계치에 대한 평균치를 보여주는데 이것은 무시해야 한다. 두 번째 줄부터 보면 된다.
- cpu에서 시스템에서 사용하는 cpu시간이 지나치게 높다면(50% 이상) 디스크 I/O에서 문제가 있을 가능성이 크다. 해당 프로그램의 소스코드를 구할 수 있다면 프로그램에서 얼마나 효율적으로 I/O를 사용하는지 확인해 보아야 한다. vmstat에서 sy 항목은 system time을 의미하며 커널모드로 넘어간 상태이다.
- 시스템 전체의 부하가 높은데도 cpu에서 휴지시간(idle time, id 항목)이 일반적으로 10%를 넘는다면 I/O나 메모리에 문제가 있을 가능성이 크다.
- 휴지시간이 항상 0이라면 CPU를 완전하게 100% 사용하고 있는 상태이다. CPU의 기능을 최대한 활용하는 것은 좋은 현상이다. 그런데 항상 100% 로 바쁜 상태라면 어떤 작업이 계속 축적되고 있다는 것이며 CPU의 과부하를 의미한다. CPU를 계속 사용하고 있는 프로세스를 찾아야한다.
- 디스크의 활동이 분산되지 않았다면, I/O 작업을 효율적으로 분산시켜야한다. 그런데 현재 리눅스용 vmstat에서는 이에 대한 정보는 나오지 않는다. 다른 유닉스의 경우에는 iostat나 sar을 이용하는데 인터넷에서 패키지를 받아서 설치할 수 있다. 이러한 프로그램이 sysstat 로 리눅스용 sar, iostat 패키지이다. 사이트 주소는 다음과 같다. (최근 레드햇 배포판 등에는 들어가고 있다)