Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

多进程程序运行后内存获取不正确 #35

Open
boxjan opened this issue Aug 2, 2019 · 5 comments
Open

多进程程序运行后内存获取不正确 #35

boxjan opened this issue Aug 2, 2019 · 5 comments

Comments

@boxjan
Copy link

boxjan commented Aug 2, 2019

在 沙箱中运行

stress --vm-bytes 256m --vm-keep --vm 2 --timeout 3s

命令可以发现沙箱输出的内存使用量约为 256m;但是根据命令的帮助,以及使用 cgroup 的辅助统计,在肉眼查看 top 等监控数值,可得出内存使用量应该为 512m 左右,是否是 getrusage 的原因?以及是否有什么方式进行改进?

P.S. Stress 的进程结构为 主进程派生出子进程;主进程在前台运行,负责管理子进程,父子进程之间有心跳,一旦父进程down,子进程会打出错误日志后退出(观察后猜想)

@virusdefender
Copy link
Contributor

--vm 2 是指有两份 256m 么,要不试一下只有一个进程的情况呢

@boxjan
Copy link
Author

boxjan commented Aug 2, 2019

是的,--vm 2指的是两个子进程,这意味着会有两份 256m;我也试过了 只有一个子进程的情况,命令为 stress --vm-bytes 256m --vm-keep --vm 1 --timeout 3s,这时候获取的内存也约为 256m。

@boxjan
Copy link
Author

boxjan commented Aug 2, 2019

PS. 每次要求 root 好麻烦

@boxjan
Copy link
Author

boxjan commented Aug 4, 2019

重新翻阅了一下 man 中关于 getrusage 的的介绍发现,ru_maxrss 的值代表的是单个子进程最大的内存使用量,而不是进程树的最大内存使用量。是否有获取进程树最大内存使用值的 API 或者方法,我还在找。

@virusdefender
Copy link
Contributor

因为 judger 的环境受限,用于算法题运行,所以这样可能也没问题。

感觉只能自己去 /proc 下面解析一下了?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants