странные значения get rusage.maxrss для macOS и Linux - PullRequest
0 голосов
/ 26 января 2020

В настоящее время я пишу систему онлайн-оценки golang. Чтобы обнаружить использование памяти пользовательской программой, я решил проанализировать cmd.ProcessState.SysUsage() и проверить Rusage.Maxrss. Теперь я в замешательстве, потому что когда я пытаюсь запустить это на моей ма c результат вызова Rusage.Maxrss странный

Вот код, который я запускал на macOS и Linux (это упрощенно, этот код вызывает Getrusage() текущего процесса) И есть результаты, которые я получил:

package main

import (
    "fmt"
    "syscall"
)

func main() {
    rusage := syscall.Rusage{}
    pageSize := syscall.Getpagesize()
    if err := syscall.Getrusage(syscall.RUSAGE_SELF, &rusage); err != nil {
        fmt.Println(err)
        panic(err)
    }

    fmt.Printf("page size: %d\nrusage.Maxrss: %d\n", pageSize, rusage.Maxrss)
}

И следующие результаты я получил

  • MacOS:
    go run test.go 
    page size: 4096
    rusage.Maxrss: 2007040
    
  • Linux / Ubuntu-18.04:
    go run test.go                     
    page size: 4096
    rusage.Maxrss: 17580
    

Можете ли вы объяснить, почему он возвращает такое большое значение? Как я видел руководство по macOS и linux справочные страницы: rusage.Maxrss (или rusage.ru_maxrss из C языка) считается в килобайтах, поэтому на macOS мой код использовал ~ 2 ГБ памяти, когда на Linux он использовал всего ~ 20 МБ?

И это хорошее решение для измерения памяти, используемой пользовательской программой, с rusage.Maxrss или есть лучший подход?

1 Ответ

1 голос
/ 26 января 2020

На моих компьютерах Mac справочная страница getrusage() гласит: « ru_maxrss максимальный используемый размер резидентного набора ( в байтах )» (выделение добавлено). Кажется, в этом есть смысл ваших результатов.

Справочная страница iOS в устаревшем архиве документации Apple , на которую вы ссылались, говорит о том, что единицы измерения - килобайты. Не ясно, связано ли это с различными поведениями между iOS и macOS или с ошибкой в ​​справочной странице, которая с тех пор была исправлена. Обидно, что Apple не ведет справочные страницы в Интернете.

...