123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- package linux
- import (
- "io/ioutil"
- "strconv"
- "strings"
- )
- type VMStat struct {
- NrFreePages uint64 `json:"nr_free_pages"`
- NrAllocBatch uint64 `json:"nr_alloc_batch"`
- NrInactiveAnon uint64 `json:"nr_inactive_anon"`
- NrActiveAnon uint64 `json:"nr_active_anon"`
- NrInactiveFile uint64 `json:"nr_inactive_file"`
- NrActiveFile uint64 `json:"nr_active_file"`
- NrUnevictable uint64 `json:"nr_unevictable"`
- NrMlock uint64 `json:"nr_mlock"`
- NrAnonPages uint64 `json:"nr_anon_pages"`
- NrMapped uint64 `json:"nr_mapped"`
- NrFilePages uint64 `json:"nr_file_pages"`
- NrDirty uint64 `json:"nr_dirty"`
- NrWriteback uint64 `json:"nr_writeback"`
- NrSlabReclaimable uint64 `json:"nr_slab_reclaimable"`
- NrSlabUnreclaimable uint64 `json:"nr_slab_unreclaimable"`
- NrPageTablePages uint64 `json:"nr_page_table_pages"`
- NrKernelStack uint64 `json:"nr_kernel_stack"`
- NrUnstable uint64 `json:"nr_unstable"`
- NrBounce uint64 `json:"nr_bounce"`
- NrVmscanWrite uint64 `json:"nr_vmscan_write"`
- NrVmscanImmediateReclaim uint64 `json:"nr_vmscan_immediate_reclaim"`
- NrWritebackTemp uint64 `json:"nr_writeback_temp"`
- NrIsolatedAnon uint64 `json:"nr_isolated_anon"`
- NrIsolatedFile uint64 `json:"nr_isolated_file"`
- NrShmem uint64 `json:"nr_shmem"`
- NrDirtied uint64 `json:"nr_dirtied"`
- NrWritten uint64 `json:"nr_written"`
- NumaHit uint64 `json:"numa_hit"`
- NumaMiss uint64 `json:"numa_miss"`
- NumaForeign uint64 `json:"numa_foreign"`
- NumaInterleave uint64 `json:"numa_interleave"`
- NumaLocal uint64 `json:"numa_local"`
- NumaOther uint64 `json:"numa_other"`
- WorkingsetRefault uint64 `json:"workingset_refault"`
- WorkingsetActivate uint64 `json:"workingset_activate"`
- WorkingsetNodereclaim uint64 `json:"workingset_nodereclaim"`
- NrAnonTransparentHugepages uint64 `json:"nr_anon_transparent_hugepages"`
- NrFreeCma uint64 `json:"nr_free_cma"`
- NrDirtyThreshold uint64 `json:"nr_dirty_threshold"`
- NrDirtyBackgroundThreshold uint64 `json:"nr_dirty_background_threshold"`
- PagePagein uint64 `json:"pgpgin"`
- PagePageout uint64 `json:"pgpgout"`
- PageSwapin uint64 `json:"pswpin"`
- PageSwapout uint64 `json:"pswpout"`
- PageAllocDMA uint64 `json:"pgalloc_dma"`
- PageAllocDMA32 uint64 `json:"pgalloc_dma32"`
- PageAllocNormal uint64 `json:"pgalloc_normal"`
- PageAllocMovable uint64 `json:"pgalloc_movable"`
- PageFree uint64 `json:"pgfree"`
- PageActivate uint64 `json:"pgactivate"`
- PageDeactivate uint64 `json:"pgdeactivate"`
- PageFault uint64 `json:"pgfault"`
- PageMajorFault uint64 `json:"pgmajfault"`
- PageRefillDMA uint64 `json:"pgrefill_dma"`
- PageRefillDMA32 uint64 `json:"pgrefill_dma32"`
- PageRefillMormal uint64 `json:"pgrefill_normal"`
- PageRefillMovable uint64 `json:"pgrefill_movable"`
- PageStealKswapdDMA uint64 `json:"pgsteal_kswapd_dma"`
- PageStealKswapdDMA32 uint64 `json:"pgsteal_kswapd_dma32"`
- PageStealKswapdNormal uint64 `json:"pgsteal_kswapd_normal"`
- PageStealKswapdMovable uint64 `json:"pgsteal_kswapd_movable"`
- PageStealDirectDMA uint64 `json:"pgsteal_direct_dma"`
- PageStealDirectDMA32 uint64 `json:"pgsteal_direct_dma32"`
- PageStealDirectNormal uint64 `json:"pgsteal_direct_normal"`
- PageStealDirectMovable uint64 `json:"pgsteal_direct_movable"`
- PageScanKswapdDMA uint64 `json:"pgscan_kswapd_dma"`
- PageScanKswapdDMA32 uint64 `json:"pgscan_kswapd_dma32"`
- PageScanKswapdNormal uint64 `json:"pgscan_kswapd_normal"`
- PageScanKswapdMovable uint64 `json:"pgscan_kswapd_movable"`
- PageScanDirectDMA uint64 `json:"pgscan_direct_dma"`
- PageScanDirectDMA32 uint64 `json:"pgscan_direct_dma32"`
- PageScanDirectNormal uint64 `json:"pgscan_direct_normal"`
- PageScanDirectMovable uint64 `json:"pgscan_direct_movable"`
- PageScanDirectThrottle uint64 `json:"pgscan_direct_throttle"`
- ZoneReclaimFailed uint64 `json:"zone_reclaim_failed"`
- PageInodeSteal uint64 `json:"pginodesteal"`
- SlabsScanned uint64 `json:"slabs_scanned"`
- KswapdInodesteal uint64 `json:"kswapd_inodesteal"`
- KswapdLowWatermarkHitQuickly uint64 `json:"kswapd_low_wmark_hit_quickly"`
- KswapdHighWatermarkHitQuickly uint64 `json:"kswapd_high_wmark_hit_quickly"`
- PageoutRun uint64 `json:"pageoutrun"`
- AllocStall uint64 `json:"allocstall"`
- PageRotated uint64 `json:"pgrotated"`
- DropPagecache uint64 `json:"drop_pagecache"`
- DropSlab uint64 `json:"drop_slab"`
- NumaPteUpdates uint64 `json:"numa_pte_updates"`
- NumaHugePteUpdates uint64 `json:"numa_huge_pte_updates"`
- NumaHintFaults uint64 `json:"numa_hint_faults"`
- NumaHintFaults_local uint64 `json:"numa_hint_faults_local"`
- NumaPagesMigrated uint64 `json:"numa_pages_migrated"`
- PageMigrateSuccess uint64 `json:"pgmigrate_success"`
- PageMigrateFail uint64 `json:"pgmigrate_fail"`
- CompactMigrateScanned uint64 `json:"compact_migrate_scanned"`
- CompactFreeScanned uint64 `json:"compact_free_scanned"`
- CompactIsolated uint64 `json:"compact_isolated"`
- CompactStall uint64 `json:"compact_stall"`
- CompactFail uint64 `json:"compact_fail"`
- CompactSuccess uint64 `json:"compact_success"`
- HtlbBuddyAllocSuccess uint64 `json:"htlb_buddy_alloc_success"`
- HtlbBuddyAllocFail uint64 `json:"htlb_buddy_alloc_fail"`
- UnevictablePagesCulled uint64 `json:"unevictable_pgs_culled"`
- UnevictablePagesScanned uint64 `json:"unevictable_pgs_scanned"`
- UnevictablePagesRescued uint64 `json:"unevictable_pgs_rescued"`
- UnevictablePagesMlocked uint64 `json:"unevictable_pgs_mlocked"`
- UnevictablePagesMunlocked uint64 `json:"unevictable_pgs_munlocked"`
- UnevictablePagesCleared uint64 `json:"unevictable_pgs_cleared"`
- UnevictablePagesStranded uint64 `json:"unevictable_pgs_stranded"`
- THPFaultAlloc uint64 `json:"thp_fault_alloc"`
- THPFaultFallback uint64 `json:"thp_fault_fallback"`
- THPCollapseAlloc uint64 `json:"thp_collapse_alloc"`
- THPCollapseAllocFailed uint64 `json:"thp_collapse_alloc_failed"`
- THPSplit uint64 `json:"thp_split"`
- THPZeroPageAlloc uint64 `json:"thp_zero_page_alloc"`
- THPZeroPageAllocFailed uint64 `json:"thp_zero_page_alloc_failed"`
- }
- func ReadVMStat(path string) (*VMStat, error) {
- b, err := ioutil.ReadFile(path)
- if err != nil {
- return nil, err
- }
- content := string(b)
- lines := strings.Split(content, "\n")
- vmstat := VMStat{}
- for _, line := range lines {
- fields := strings.Fields(line)
- if len(fields) != 2 {
- continue
- }
- name := fields[0]
- value, _ := strconv.ParseUint(fields[1], 10, 64)
- switch name {
- case "nr_free_pages":
- vmstat.NrFreePages = value
- case "nr_alloc_batch":
- vmstat.NrAllocBatch = value
- case "nr_inactive_anon":
- vmstat.NrInactiveAnon = value
- case "nr_active_anon":
- vmstat.NrActiveAnon = value
- case "nr_inactive_file":
- vmstat.NrInactiveFile = value
- case "nr_active_file":
- vmstat.NrActiveFile = value
- case "nr_unevictable":
- vmstat.NrUnevictable = value
- case "nr_mlock":
- vmstat.NrMlock = value
- case "nr_anon_pages":
- vmstat.NrAnonPages = value
- case "nr_mapped":
- vmstat.NrMapped = value
- case "nr_file_pages":
- vmstat.NrFilePages = value
- case "nr_dirty":
- vmstat.NrDirty = value
- case "nr_writeback":
- vmstat.NrWriteback = value
- case "nr_slab_reclaimable":
- vmstat.NrSlabReclaimable = value
- case "nr_slab_unreclaimable":
- vmstat.NrSlabUnreclaimable = value
- case "nr_page_table_pages":
- vmstat.NrPageTablePages = value
- case "nr_kernel_stack":
- vmstat.NrKernelStack = value
- case "nr_unstable":
- vmstat.NrUnstable = value
- case "nr_bounce":
- vmstat.NrBounce = value
- case "nr_vmscan_write":
- vmstat.NrVmscanWrite = value
- case "nr_vmscan_immediate_reclaim":
- vmstat.NrVmscanImmediateReclaim = value
- case "nr_writeback_temp":
- vmstat.NrWritebackTemp = value
- case "nr_isolated_anon":
- vmstat.NrIsolatedAnon = value
- case "nr_isolated_file":
- vmstat.NrIsolatedFile = value
- case "nr_shmem":
- vmstat.NrShmem = value
- case "nr_dirtied":
- vmstat.NrDirtied = value
- case "nr_written":
- vmstat.NrWritten = value
- case "numa_hit":
- vmstat.NumaHit = value
- case "numa_miss":
- vmstat.NumaMiss = value
- case "numa_foreign":
- vmstat.NumaForeign = value
- case "numa_interleave":
- vmstat.NumaInterleave = value
- case "numa_local":
- vmstat.NumaLocal = value
- case "numa_other":
- vmstat.NumaOther = value
- case "workingset_refault":
- vmstat.WorkingsetRefault = value
- case "workingset_activate":
- vmstat.WorkingsetActivate = value
- case "workingset_nodereclaim":
- vmstat.WorkingsetNodereclaim = value
- case "nr_anon_transparent_hugepages":
- vmstat.NrAnonTransparentHugepages = value
- case "nr_free_cma":
- vmstat.NrFreeCma = value
- case "nr_dirty_threshold":
- vmstat.NrDirtyThreshold = value
- case "nr_dirty_background_threshold":
- vmstat.NrDirtyBackgroundThreshold = value
- case "pgpgin":
- vmstat.PagePagein = value
- case "pgpgout":
- vmstat.PagePageout = value
- case "pswpin":
- vmstat.PageSwapin = value
- case "pswpout":
- vmstat.PageSwapout = value
- case "pgalloc_dma":
- vmstat.PageAllocDMA = value
- case "pgalloc_dma32":
- vmstat.PageAllocDMA32 = value
- case "pgalloc_normal":
- vmstat.PageAllocNormal = value
- case "pgalloc_movable":
- vmstat.PageAllocMovable = value
- case "pgfree":
- vmstat.PageFree = value
- case "pgactivate":
- vmstat.PageActivate = value
- case "pgdeactivate":
- vmstat.PageDeactivate = value
- case "pgfault":
- vmstat.PageFault = value
- case "pgmajfault":
- vmstat.PageMajorFault = value
- case "pgrefill_dma":
- vmstat.PageRefillDMA = value
- case "pgrefill_dma32":
- vmstat.PageRefillDMA32 = value
- case "pgrefill_normal":
- vmstat.PageRefillMormal = value
- case "pgrefill_movable":
- vmstat.PageRefillMovable = value
- case "pgsteal_kswapd_dma":
- vmstat.PageStealKswapdDMA = value
- case "pgsteal_kswapd_dma32":
- vmstat.PageStealKswapdDMA32 = value
- case "pgsteal_kswapd_normal":
- vmstat.PageStealKswapdNormal = value
- case "pgsteal_kswapd_movable":
- vmstat.PageStealKswapdMovable = value
- case "pgsteal_direct_dma":
- vmstat.PageStealDirectDMA = value
- case "pgsteal_direct_dma32":
- vmstat.PageStealDirectDMA32 = value
- case "pgsteal_direct_normal":
- vmstat.PageStealDirectNormal = value
- case "pgsteal_direct_movable":
- vmstat.PageStealDirectMovable = value
- case "pgscan_kswapd_dma":
- vmstat.PageScanKswapdDMA = value
- case "pgscan_kswapd_dma32":
- vmstat.PageScanKswapdDMA32 = value
- case "pgscan_kswapd_normal":
- vmstat.PageScanKswapdNormal = value
- case "pgscan_kswapd_movable":
- vmstat.PageScanKswapdMovable = value
- case "pgscan_direct_dma":
- vmstat.PageScanDirectDMA = value
- case "pgscan_direct_dma32":
- vmstat.PageScanDirectDMA32 = value
- case "pgscan_direct_normal":
- vmstat.PageScanDirectNormal = value
- case "pgscan_direct_movable":
- vmstat.PageScanDirectMovable = value
- case "pgscan_direct_throttle":
- vmstat.PageScanDirectThrottle = value
- case "zone_reclaim_failed":
- vmstat.ZoneReclaimFailed = value
- case "pginodesteal":
- vmstat.PageInodeSteal = value
- case "slabs_scanned":
- vmstat.SlabsScanned = value
- case "kswapd_inodesteal":
- vmstat.KswapdInodesteal = value
- case "kswapd_low_wmark_hit_quickly":
- vmstat.KswapdLowWatermarkHitQuickly = value
- case "kswapd_high_wmark_hit_quickly":
- vmstat.KswapdHighWatermarkHitQuickly = value
- case "pageoutrun":
- vmstat.PageoutRun = value
- case "allocstall":
- vmstat.AllocStall = value
- case "pgrotated":
- vmstat.PageRotated = value
- case "drop_pagecache":
- vmstat.DropPagecache = value
- case "drop_slab":
- vmstat.DropSlab = value
- case "numa_pte_updates":
- vmstat.NumaPteUpdates = value
- case "numa_huge_pte_updates":
- vmstat.NumaHugePteUpdates = value
- case "numa_hint_faults":
- vmstat.NumaHintFaults = value
- case "numa_hint_faults_local":
- vmstat.NumaHintFaults_local = value
- case "numa_pages_migrated":
- vmstat.NumaPagesMigrated = value
- case "pgmigrate_success":
- vmstat.PageMigrateSuccess = value
- case "pgmigrate_fail":
- vmstat.PageMigrateFail = value
- case "compact_migrate_scanned":
- vmstat.CompactMigrateScanned = value
- case "compact_free_scanned":
- vmstat.CompactFreeScanned = value
- case "compact_isolated":
- vmstat.CompactIsolated = value
- case "compact_stall":
- vmstat.CompactStall = value
- case "compact_fail":
- vmstat.CompactFail = value
- case "compact_success":
- vmstat.CompactSuccess = value
- case "htlb_buddy_alloc_success":
- vmstat.HtlbBuddyAllocSuccess = value
- case "htlb_buddy_alloc_fail":
- vmstat.HtlbBuddyAllocFail = value
- case "unevictable_pgs_culled":
- vmstat.UnevictablePagesCulled = value
- case "unevictable_pgs_scanned":
- vmstat.UnevictablePagesScanned = value
- case "unevictable_pgs_rescued":
- vmstat.UnevictablePagesRescued = value
- case "unevictable_pgs_mlocked":
- vmstat.UnevictablePagesMlocked = value
- case "unevictable_pgs_munlocked":
- vmstat.UnevictablePagesMunlocked = value
- case "unevictable_pgs_cleared":
- vmstat.UnevictablePagesCleared = value
- case "unevictable_pgs_stranded":
- vmstat.UnevictablePagesStranded = value
- case "thp_fault_alloc":
- vmstat.THPFaultAlloc = value
- case "thp_fault_fallback":
- vmstat.THPFaultFallback = value
- case "thp_collapse_alloc":
- vmstat.THPCollapseAlloc = value
- case "thp_collapse_alloc_failed":
- vmstat.THPCollapseAllocFailed = value
- case "thp_split":
- vmstat.THPSplit = value
- case "thp_zero_page_alloc":
- vmstat.THPZeroPageAlloc = value
- case "thp_zero_page_alloc_failed":
- vmstat.THPZeroPageAllocFailed = value
- }
- }
- return &vmstat, nil
- }
|