ホームページ  >  記事  >  バックエンド開発  >  Golang で /proc/meminfo からメモリを抽出し、情報をスワップする

Golang で /proc/meminfo からメモリを抽出し、情報をスワップする

王林
王林転載
2024-02-12 18:24:09377ブラウズ

从 Golang 中的 /proc/meminfo 中提取内存和交换信息

php editor Strawberry は今日、Golang で /proc/meminfo からメモリを抽出して情報を交換する非常に実践的な方法を紹介します。 Golang の開発プロセスでは、パフォーマンスの最適化やリソース管理操作を実行するために、システムのメモリを取得して情報を交換する必要がよくあります。 /proc/meminfo はシステムメモリやスワップ情報を保存するファイルで、このファイルを読み込むことで必要な情報を取得できます。次に、Golangを使って/proc/meminfo内のメモリとスワップ情報を抽出する方法を詳しく紹介しますので、ご参考になれば幸いです。

質問内容

golangで/proc/meminfoからmemtotal、memfree、memavailable、swaptotal、swapfreeの値を抽出したいと考えています。これまでに得た最も近い方法は fmt.sscanf() を使用することです。これにより、一度に必要な値が得られますが、ゼロが含まれる出力行も多数得られます。これは私が使用しているコードです:

リーリー

これにより、次の結果が得られます:

リーリー

それで最初の質問ですが、結果を必要な 1 つの値 (ゼロ以外) に制限する方法はありますか?それとも、この問題を解決するより良い方法はありますか?

私の /proc/meminfo ファイルは次のようになります:

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)
    }
}

Solution

s.Scan() は入力を 1 行ずつ読み取ることに注意してください。行が fmt.Sscanf に指定されたフォーマット文字列と一致しない場合、プログラムはループ内で宣言された var n int として 0 を出力します。私の提案は、 fmt.Sscanf` によって返される最初の結果、つまり一致する項目の数を確認することです。したがって、最初の結果が 1 であれば、一致があり、その値を出力できることを意味します。ここで実際の例を参照してください: https://www.php.cn/link/25d0a45ccd9e33b6b1ef8760801b6841 p>

編集: できるだけあなたのコードに近づけようとしました。使用される測定単位は Man Page によって異なるため、他にも問題が発生する可能性があります。ただし、システム上の関連する値が常に「kB」で出力される場合は、ユースケースには十分である可能性があります。

以上がGolang で /proc/meminfo からメモリを抽出し、情報をスワップするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。