В настоящее время я пишу систему онлайн-оценки 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 и linux справочные страницы: rusage.Maxrss (или rusage.ru_maxrss
из C
языка) считается в килобайтах, поэтому на macOS мой код использовал ~ 2 ГБ памяти, когда на Linux он использовал всего ~ 20 МБ?
И это хорошее решение для измерения памяти, используемой пользовательской программой, с rusage.Maxrss
или есть лучший подход?