Как измерить объем памяти, используемый исполняемым файлом, который я запускаю через пакет os/exec
в Голанге? Лучше ли это делать с помощью самой ОС?Измерение использования памяти исполняемого файла с использованием golang
ответ
Вам нужно сделать это через ОС. Если вы находитесь на plan9 или posix, Go вернет значения использования из ОС для вас в структуре, возвращаемой ProcessState.SysUsage()
.
cmd := exec.Command("command", "arg1", "arg2")
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
// check this type assertion to avoid a panic
fmt.Println("MaxRSS:", cmd.ProcessState.SysUsage().(*syscall.Rusage).Maxrss)
Примечание: разные платформы могут возвращать это в байтах или килобайтах. Проверьте man getrusage
для деталей.
Любые мысли о решении в реальном времени? т.е. до того, как процесс существовал. Я думаю, что 'cmd.ProcessState' доступен только после завершения программы. –
@KevinBullaughey: см. Http://stackoverflow.com/questions/31879817/golang-os-exec-realtime-memory-usage. Все доступно в '/ proc/$ PID/smaps' – JimB
В режиме реального времени или после исполнения? '/ usr/bin/time -f"% M "ls' может использоваться, если вы хотите получить результат. –
Есть ли кросс-платформенное решение для этого? –