2014-12-23 2 views
4

Как измерить объем памяти, используемый исполняемым файлом, который я запускаю через пакет os/exec в Голанге? Лучше ли это делать с помощью самой ОС?Измерение использования памяти исполняемого файла с использованием golang

+3

В режиме реального времени или после исполнения? '/ usr/bin/time -f"% M "ls' может использоваться, если вы хотите получить результат. –

+0

Есть ли кросс-платформенное решение для этого? –

ответ

6

Вам нужно сделать это через ОС. Если вы находитесь на 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 для деталей.

+0

Любые мысли о решении в реальном времени? т.е. до того, как процесс существовал. Я думаю, что 'cmd.ProcessState' доступен только после завершения программы. –

+0

@KevinBullaughey: см. Http://stackoverflow.com/questions/31879817/golang-os-exec-realtime-memory-usage. Все доступно в '/ proc/$ PID/smaps' – JimB