php小編草莓今天要介紹一個非常實用的方法,就是從Golang中的/proc/meminfo中提取記憶體和交換資訊。在Golang開發過程中,我們經常需要取得系統的記憶體和交換訊息,以便進行一些效能最佳化或資源管理的操作。而/proc/meminfo是一個保存了系統內存和交換資訊的文件,我們可以透過讀取該文件來獲取所需的資訊。接下來,我將為大家詳細介紹如何使用Golang來提取/proc/meminfo中的內存和交換信息,希望對大家有所幫助。
我想從 golang 中的 /proc/meminfo 中提取 memtotal、memfree、memavailable、swaptotal 和 swapfree 的值。到目前為止,我得到的最接近的是使用 fmt.sscanf() ,它將一次給出我想要的值,但我也得到了許多帶有零的輸出行。這是我正在使用的程式碼:
package main import ( "bufio" "fmt" "os" ) func main() { f, e := os.open("/proc/meminfo") if e != nil { panic(e) } defer f.close() s := bufio.newscanner(f) for s.scan() { var n int fmt.sscanf(s.text(), "memfree: %d kb", &n) fmt.println(n) } }
這給了我以下結果:
0 11260616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
所以第一個問題,有沒有辦法將結果限制在我想要的一個值(非零)?或者,有沒有更好的方法來解決這個問題?
我的 /proc/meminfo 檔案如下所示:
MemTotal: 16314336 kB MemFree: 11268004 kB MemAvailable: 13955820 kB Buffers: 330284 kB Cached: 2536848 kB SwapCached: 0 kB Active: 1259348 kB Inactive: 3183140 kB Active(anon): 4272 kB Inactive(anon): 1578028 kB Active(file): 1255076 kB Inactive(file): 1605112 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4194304 kB SwapFree: 4194304 kB Dirty: 96 kB Writeback: 0 kB AnonPages: 1411704 kB Mapped: 594408 kB Shmem: 6940 kB KReclaimable: 151936 kB Slab: 253384 kB SReclaimable: 151936 kB SUnreclaim: 101448 kB KernelStack: 17184 kB PageTables: 25060 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 12351472 kB Committed_AS: 6092984 kB VmallocTotal: 34359738367 kB VmallocUsed: 40828 kB VmallocChunk: 0 kB Percpu: 5696 kB AnonHugePages: 720896 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB FileHugePages: 0 kB FilePmdMapped: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB DirectMap4k: 230400 kB DirectMap2M: 11235328 kB DirectMap1G: 14680064 kB
注意,s.Scan()
逐行讀取輸入。如果某行與給 fmt.Sscanf
的格式字串不匹配,則程式將輸出 0 作為 var n int
在循環內宣告。我的建議是檢查 fmt.Sscanf` 傳回的第一個結果,即符合的項目數。因此,如果第一個結果是 1,則表示有匹配項並且可以輸出該值。請參閱此處的工作範例://m.sbmmt.com/link/25d0a45ccd9e33b6b1ef8760801b6841 p>
編輯:我試圖盡可能接近您的程式碼。可能還會有其他問題,因為所使用的測量單位可能會根據 手冊頁。但是,如果系統上的相關值始終以“kB”為單位輸出,那麼它對於您的用例來說可能已經足夠了。
以上是從 Golang 中的 /proc/meminfo 中提取內存和交換信息的詳細內容。更多資訊請關注PHP中文網其他相關文章!