目前我正在写关于高朗的在线判断系统。为了检测用户程序内存的使用情况,我决定分析cmd.ProcessState.SysUsage()并检查Rusage.Maxrss。现在我很困惑,因为当我尝试在我的mac上运行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 (或C语言的rusage.ru_maxrss )是以千字节为单位的,所以在macOS上,我的代码使用了~2GB的内存,而它只使用~20 my?
这是衡量用户程序使用rusage.Maxrss使用的内存的一个好决定,还是有更好的方法?
发布于 2020-01-26 04:54:35
在我的Mac上,getrusage()手册页面上写着:"ru_maxrss --使用的最大驻留集大小((以字节为单位))“(重点是添加的)。这似乎对你的结果有意义。
你所指的苹果遗留文档存档中的iOS手册页确实说这些单位是千字节。目前还不清楚这是由于iOS和macOS之间的不同行为所致,还是因为手册页中的错误已经被纠正了。令人遗憾的是,苹果没有将维护的手册页面保持在网上。
https://stackoverflow.com/questions/59913657
复制相似问题