[darksharavim]vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 2551860 8171968 0 2549512 0 0 3 11 0 0 1 0 99 0 0
0 0 2551860 8171912 0 2549512 0 0 0 411 541 998 1 0 99 0 0
0 0 2551860 8171880 0 2549512 0 0 0 0 462 918 0 0 100 0 0
0 0 2551860 8171912 0 2549512 0 0 0 0 523 949 0 1 99 0 0
0 0 2551860 8171880 0 2549512 0 0 0 0 458 905 0 0 100 0 0
Average(명령어 실행 후 첫번째 결과 값)
vmstsat을 수행하면 위와 같이 첫번째 결과는 다른 결과와 다르게 수치가 많이 차이나는 것을 볼 수 있다.
항상 첫번째 줄은 이전의 vmstat 명령어로 수집된 정도에 대한 평균치를 나타내기 때문이다.
즉, 현재의 정보가 아닌 이전에 누적된 정보임을 기억해야 한다.
vmstat 명령의 첫번째 줄은 평균치를 나타내기 때문에 실제 의미가 없는 데이터라고 생각하고 모니터링을 수행한다.
주의할 점은 vmstat으로 script 등을 작성하여 시스템의 평균치 등을 모니터링할 경우 항상 첫번째 줄은 제외하고 통계치를 계산하도록 해야 한다.
Queue (procs)
procs 항목은 os 별로 다른 항목으로 존재하기도 하지만, 그 의미는 동일하다고 볼 수 있다.
현재 CPU내에 존재하는 Queue에 적체된 Command의 수를 의미한다.
r (run queue) | 작업 수행을 위해 CPU 자원을 기다리는 Command 수 |
b (blocked queue) | 메모리나 기타 I/O 등에 대해 대한 자원을 기다리는 Command 수 |
CPU의 Queue에 대한 현재 상태를 보여주는 것으로 모니터링시에 r(run queue)항목이 중요하다.
r 항목의 단위는 건수라고 보면 되고 이 개수가 많으면 많을 수도록 OS 자체의 병목이 존재함을 의미한다.
Memory (memory)
memory 항목에서 주요한 것은 free항목으로 free는 해당 OS의 실제 남은 메모리를 의미한다.
Linux의 경우 Free 사이즈가 곧 남은 KiB 사이즈로 볼 수 있다.
Unix에서는 Free의 단위가 List로 해당 OS의 페이지 개수이다. (free list라는 말중에 list는 실제 해당 free 메모리를 관리하는 자료구조가 list이기 때문) 페이지는 일반적으로 메모리의 최소 단위를 의미하는 것으로 전통적인 Unix에서는 4KB크기이다. 즉 만약 free에 위와 같이 14532라는 숫자가 있다면, free 메모리 = 14532 x 4KB = 56MB정도의 여유메모리가 존재한다.
free의 수가 현저히 적다면 실제 OS의 물리적인 메모리가 부족하다고 판단하여도 큰 무리가 없다. 그럼 실제로 해당 숫자가 적으면 무조건 OS메모리가 부족한 것인지 고민해 봐야 한다.
OS에 따라 다르지만 일반적으로는 물리 메모리가 적을 가능성이 크다고 판단하는 것이 합리적이나 OS에 따라서 File Cache로 사용된 메모리 또한 free-list에서 빠지는 경우도 있다.
즉, File에 대한 Cache가 우선순위가 낮아 메모리가 여유가 있을 경우에는 File Cache로 많이 사용하고 있다가 실제 물리적인 메모리가 부족하면 자동으로 File-Cache영역을 줄여 물리적인 메모리의 크기를 증가시키는 경우도 있다. (주로 IBM AIX의 경우)
System Call (system)
system 항목은 시스템 콜 및 인터럽트에 관련된 정보를 보여준다.
sy (system call) | OS의 시스템영역에서 수행하는 시스템 콜 개수 |
cs (context switch) | CPU내에서 Process간 Context정보를 교체하는 회수 |
cs는 CPU 및 메모리에서 수행되는 Process들의 고유한 정보를 context라고 표현할 수 있으며, sy는 OS에서 사용자의 작업수행 영역이 아닌 OS의 자원을 이용해야 할 필요성이 있는 작업, 파일에 데이터를 기록 한다던지, Socket에 데이터를 전송한다던지 하는 OS적인 작업을 수행할때 호출되는 함수이다.
cs는 CPU자원에 대한 Process들의 경쟁이라고 생각하면 될 것으로 보이며, 또한 cs와 sy의 경우 또한 절대적인 값이라기 보다는 모니터링시의 상대적인 값으로 판단하는 것이 옳다. 즉 이전일보다 cs나 sy의 숫자가 상당히 크다면, 이전일보다 CPU에 대한 Process간 경쟁이 치열하다고 판단할 수 있다. 이러한 경우는 자연스럽게 CPU사용률이 높은 경우라고 판단할 수 있다.
sy의 경우도 마찬가지로 상대적인 숫자값으로 판단할 수 있으며, 이전일보다 sy숫자가 현격히 높다면 OS가 이전보다 사용자의 작업보다는 OS적인 작업을 더 많이 수행한다고 할 수 있다.
[중요] 일반적으로 이 두가지 항목은 상대적으로 OS의 병목을 판단하는데 명확한 데이터는 아니며, 상당히 미묘한 문제가 발생되었을 경우 좀 더 나은 판단을 위해 알고 있어야 할 사항이다.
CPU (cpu)
cpu 항목은 CPU사용률를 나타낸다. 이 항목은 엔지니어들이 가장 많이 보는 항목으로 익숙한 내용이며, CPU사용률에 대한 정보이다.
us (user CPU) | 사용자 영역에서 사용하는 CPU 비율 |
sy (system CPU) | 시스템 콜에 호출에 의해 사용되는 CPU 비율 |
id (idle CPU) | 사용가능한 CPU 비율 (일반적으로 100 – (us + sy) = id |
wa (wait I/O) | disk 혹은 기타 I/O작업으로 인해 대기하는 CPU |
[중요]
항상 고객사에서 CPU 점유율이 높다고 고객이 언급할 경우 필수적으로 해당 CPU가 us인지 sy인지 확인해야 한다.
us와 sy를 확인하는 가장 큰 이유는 어느 CPU가 높으냐에 따라서 원인분석을 위한 명령어가 달라지기 때문이다.
us가 높을경우 일반적으로 OS명령어를 통해 바로 알 수 있는 경우는 많지 않으며,
java인 경우에는 kill -3과 ti명령을 통해 대략적으로 확인할 수 있는 가능성이 높다.
sy가 높은 경우는 java/c 할거 없이 truss(strace : linux)명령을 통해 어떠한 시스템 콜이 수행중인지 확인이 가능하다.
https://waspro.tistory.com/155
'# Operation System > Linux' 카테고리의 다른 글
리눅스 로그관리 loglotate (0) | 2022.11.23 |
---|---|
리눅스 시스템 네트워크 분석 tcpdump command (0) | 2022.11.02 |
리눅스 시스템 모니터링 top command (0) | 2022.10.25 |
[파이썬]centos7x chrome driver 사용 (0) | 2022.10.20 |
vsftp 초기 셋팅 및 ssl설정 (0) | 2022.10.19 |
안녕하세요. 이곳은 IT위주의 잡다한 정보를 올려두는 개인 블로그입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!