>  기사  >  백엔드 개발  >  Golang의 /proc/meminfo에서 메모리 추출 및 스왑 정보

Golang의 /proc/meminfo에서 메모리 추출 및 스왑 정보

王林
王林앞으로
2024-02-12 18:24:09332검색

从 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()를 사용하여 한 번에 하나씩 원하는 값을 제공하지만 0이 있는 출력 라인도 많이 얻습니다. 제가 사용하고 있는 코드는 다음과 같습니다:

으아악

이 결과는 다음과 같습니다.

으아악

첫 번째 질문입니다. 결과를 내가 원하는 하나의 값(0이 아닌 값)으로 제한하는 방법이 있나요? 아니면 이 문제를 해결하는 더 좋은 방법이 있습니까?

내 /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() 逐行读取输入。如果某行与给 fmt.Sscanf 的格式字符串不匹配,则程序将输出 0 作为 var n int은 루프 내에서 선언됩니다. 내 제안은 일치하는 항목 수인 fmt.Sscanf`에서 반환된 첫 번째 결과를 확인하는 것입니다. 따라서 첫 번째 결과가 1이면 일치 항목이 있고 해당 값이 출력될 수 있음을 의미합니다. 여기에서 실제 예제를 확인하세요: https://www.php.cn/link/25d0a45ccd9e33b6b1ef8760801b6841 p>

EDIT: 가능한 한 귀하의 코드에 가깝게 만들려고 노력했습니다. 사용되는 측정 단위는 man 페이지에 따라 다를 수 있으므로 다른 문제가 있을 수 있습니다. 그러나 시스템의 관련 값이 항상 "kB"로 출력된다면 사용 사례에 충분할 수 있습니다.

위 내용은 Golang의 /proc/meminfo에서 메모리 추출 및 스왑 정보의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제