자바스크립트를 활성화 해주세요

p019 Linux에서 vmstat내용을 실행하고, Object로 받아오는 Get-VmstatInfo 함수 만들기

 ·  ☕ 2 min read

vmstat은 현재의 메모리의 상태를 출력하는 명령인데, process의 정보, memory의 사용량과 swap, io 및 CPU의 활동 상황에 대한 정보를 출력합니다.

필드의 설명

procs

  • procs_r cpu 접근 대기 중인 실행 가능한 프로세스의 수
  • procs_b I/O 자원을 할당받지 못해 block된 프로세스의 수

memory

  • memory_swapd 사용된 가상메모리의 용량
  • memory_free 사용가능한 여유 메모리의 용량
  • memory_buffer 버퍼에 사용된 메모리의 총량
  • memory_cache 페이지 캐시에 사용된 메모리의 용량

swap

  • swap_si swap-in된 메모리의 양
  • swap_so swap-out된 메모리의 양, swap-out가 지속적으로 발생한다면 메모리 부족을 의심

io

  • io_bi block device로 부터 입력된 block 수
  • io_bo bock device에 쓴 block 수

system

  • system_in 초당 발생한 interrupts의 수
  • system_cs 초당 발생한 context switchs 수

cpu

  • cpu_us CPU가 user 수준 코드를 실행한 시간의 퍼센트
  • cpu_sy CPU가 system 수준 코드를 실행한 시간의 퍼센트
  • cpu_id idele 시간
  • cpu_wa IO wait 시간

vmstat

1
2
3
4
PS /root> vmstat -Sm
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   1305    654    209   2424    0    0   363   296  130  892 20 11 67  2  0

구현

접근할 수 있는 방법은 두 가지 정도 일 것 같습니다.

  • 출력 문자열을 regex로 parse하는 방법
  • 출력 문자열을 공백으로 Split해서 이름을 붙여서 parse하는 방법

regex문자열이 조금 복잡하지만, regex를 사용해서 구해보았습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
Function Get-vmstatInfo() {
   Param(
       [string] $Option = "-Sm"
   )
   If ($IsLinux) {
       $cmd = "/usr/bin/vmstat"
       $res = (& $cmd $Option)
       Write-Debug "`n$($res -join "`n")"
       $record = $res[2]
       if ($record -match '^ (?<procs_r>\d+)\s+(?<procs_b>\d+)\s+(?<memory_swpd>\d+)\s+(?<memory_free>\d+)\s+(?<memory_buff>\d+)\s+(?<memory_cache>\d+)\s+(?<swap_si>\d+)\s+(?<swap_so>\d+)\s+(?<io_bi>\d+)\s+(?<io_bo>\d+)\s+(?<system_in>\d+)\s+(?<system_cs>\d+)\s+(?<cpu_us>\d+)\s+(?<cpu_sy>\d+)\s+(?<cpu_id>\d+)\s+(?<cpu_wa>\d+)\s+(?<cpu_st>\d+)\s*$') {
           return $Matches
       }
   }
}

결과

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
PS /root> $DebugPreference = 'Continue'
PS /root> Get-vmstatInfo
DEBUG:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0   3050    250    108   1969    0    0   703   465  815  191 26 14 58  2  0

Name                           Value
----                           -----
cpu_st                         0
system_cs                      191
memory_cache                   1969
system_in                      815
procs_b                        0
io_bi                          703
cpu_us                         26
io_bo                          465
cpu_id                         58
cpu_wa                         2
swap_si                        0
swap_so                        0
cpu_sy                         14
procs_r                        3
memory_free                    250
memory_swpd                    3050
memory_buff                    108
0                               3  0   3050    250    108   1969    0    0   703   465  815  191 26 14 58  2  0

PS /root>

vmstat명령어로 출력되는 순서대로 나오진 않았지만, hash로 출력하므로 쓸만 할 것 같습니다.

원래 감사한 문자열이 0 이라는 Property에 들어가 있네요. 그 외에는 그냥 쓸만 합니다.

레퍼런스

공유하기

tkim
글쓴이
tkim
Software Engineer