为了账号安全,请及时绑定邮箱和手机立即绑定

macOS 和 Linux 上 get rusage.maxrss 的奇怪值

macOS 和 Linux 上 get rusage.maxrss 的奇怪值

Go
哈士奇WWW 2022-05-10 14:04:24
目前我正在用golang编写在线判断系统。为了检测用户程序内存使用情况,我决定分析cmd.ProcessState.SysUsage()和检查Rusage.Maxrss. 现在我很困惑,因为当我尝试在我的 mac 上运行它时,Rusage.Maxrss调用结果很奇怪这是我在 macOS 和 Linux 上运行的代码(它已简化,Getrusage()当前进程的此代码调用)并且我得到了结果:package mainimport (    "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)}以下是我得到的结果苹果系统:go run test.go page size: 4096rusage.Maxrss: 2007040Linux/Ubuntu-18.04:go run test.go                     page size: 4096rusage.Maxrss: 17580你能解释一下为什么它会返回这么大的价值吗?正如我所看到的 macOS 手册和 linux 手册页:rusage.Maxrss(或rusage.ru_maxrss来自C语言)以千字节为单位,所以在 macOS 上我的代码使用了 ~2GB 的内存,而在 Linux 上它只使用了 ~20MB?这是一个很好的决定来衡量用户程序使用的内存rusage.Maxrss 还是有更好的方法?
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

在我的 Mac 上,getrusage()手册页说:“ ru_maxrss使用的最大驻留集大小(以字节为单位)”(添加了重点)。这似乎对你的结果有意义。

您所指的Apple遗留文档档案中的iOS手册页确实说单位是千字节。目前尚不清楚这是由于 iOS 和 macOS 之间的行为不同,还是由于手册页中的错误已得到纠正。遗憾的是,Apple 没有在线维护维护手册页。


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信