Как получить размер резидентного набора (RSS) - PullRequest
0 голосов
/ 02 декабря 2019

Мне нужно знать потребление физической памяти моего процесса Go в Linux. Что мне нужно, это Размер резидентного набора (RSS) .

runtime.ReadMemStats не подходит, потому что нет способа получить размер резидентной части виртуальной памяти.

syscall.Getrusage не подходит, потому что он возвращает только Maxrss, который является максимальным RSS за время жизни процесса.

Как я могу запросить RSS в Go?

1 Ответ

0 голосов
/ 02 декабря 2019

Вы можете проанализировать / proc / self / statm файл. Он содержит только целые числа, поэтому его легко разобрать. Второе поле - это RSS, измеренное в страницах.

func getRss() (int64, error) {
    buf, err := ioutil.ReadFile("/proc/self/statm")
    if err != nil {
        return 0, err
    }

    fields := strings.Split(string(buf), " ")
    if len(fields) < 2 {
        return 0, errors.New("Cannot parse statm")
    }

    rss, err := strconv.ParseInt(fields[1], 10, 64)
    if err != nil {
        return 0, err
    }

    return rss * int64(os.Getpagesize()), err
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...