L'éditeur de PHP, Strawberry, va vous présenter aujourd'hui une méthode très pratique, qui consiste à extraire de la mémoire et à échanger des informations depuis /proc/meminfo en Golang. Au cours du processus de développement de Golang, nous avons souvent besoin d'obtenir la mémoire du système et d'échanger des informations afin d'effectuer certaines opérations d'optimisation des performances ou de gestion des ressources. /proc/meminfo est un fichier qui enregistre la mémoire système et les informations d'échange. Nous pouvons obtenir les informations requises en lisant ce fichier. Ensuite, je présenterai en détail comment utiliser Golang pour extraire la mémoire et échanger des informations dans /proc/meminfo. J'espère que cela vous sera utile.
Je souhaite extraire les valeurs de memtotal, memfree, memavailable, swaptotal et swapfree de /proc/meminfo dans golang. Le plus proche que j'ai obtenu jusqu'à présent est d'utiliser fmt.sscanf() qui me donnera la valeur que je veux une à la fois, mais j'obtiens également beaucoup de lignes de sortie avec des zéros. Voici le code que j'utilise :
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) } }
Cela me donne le résultat suivant :
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
Alors première question, existe-t-il un moyen de limiter le résultat à une valeur (non nulle) que je souhaite ? Ou existe-t-il une meilleure façon de résoudre ce problème ?
Mon fichier /proc/meminfo ressemble à ceci :
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
Notez que s.Scan()
逐行读取输入。如果某行与给 fmt.Sscanf
的格式字符串不匹配,则程序将输出 0 作为 var n int
est déclaré dans une boucle. Ma suggestion est de vérifier le premier résultat renvoyé par fmt.Sscanf`, qui est le nombre d'éléments correspondants. Donc, si le premier résultat est 1, cela signifie qu'il y a une correspondance et que cette valeur peut être affichée. Voir un exemple fonctionnel ici : https://www.php.cn/link/25d0a45ccd9e33b6b1ef8760801b6841 p>
EDIT : j’ai essayé d’être aussi proche que possible de votre code. Il peut y avoir d'autres problèmes car les unités de mesure utilisées peuvent varier selon la page de manuel. Cependant, si la valeur pertinente sur votre système est toujours affichée en « Ko », cela peut suffire pour votre cas d'utilisation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!