提问人:LeshaInc 提问时间:11/17/2023 更新时间:11/17/2023 访问量:22
计算进程的内存使用情况,包括其子进程
Computing memory usage of the process including its children
问:
我正在寻找一种方法,以编程方式获取 Linux 上进程及其子进程的内存使用情况。
我尝试从以下位置阅读RSS:/proc/{pid}/stat
1 (systemd) S 0 1 1 0 -1 4194560 21462 218671 205 576 23 96 127 356 20 0 1 0 15 21913600 3286 18446744073709551615 1 1 0 0 0 0 671173123 4096 1260 0 0 0 17 2 0 0 0 0 0 0 0 0 0 0 0 0 0
这里的第 24 个字段是 3286,这是实际内存中的页数。我可以将其乘以得到以字节为单位的内存使用量,然后递归地对所有子进程执行相同的操作并对结果求和。getpagesize()
但是,这样做会多计进程之间的共享内存,并且不包括交换的页面,这并不理想。
我考虑过解析并以某种方式识别共享内存范围,但这听起来对于实时内存使用采样来说很慢。/proc/{pid}/mem
有没有更快/更简单的方法来获取进程的内存使用情况?我不介意它是否只计算页数而不计算单个分配。
请注意,我不是在寻找基于 shell 脚本的解决方案,因为每秒生成一个 shell 进程不是一种选择,尤其是在系统被数千个进程过载的情况下 - shell 将没有足够的 cpu 时间来计算结果。
答: 暂无答案
评论