从/proc/$PID/smaps中读取数据很慢

3
我们需要使用cron每分钟监控我们高负载服务的内存使用情况。
为此,我们正在读取/proc/PID/smaps并对其进行解析。
但是我们遇到了定时问题,每分钟都会出现。当关闭监视cron时,就没有时间问题。
在我们的代码中,唯一昂贵和可疑的操作是读取/proc/PID/smaps。
Linux内核中是否有任何锁/互斥锁/其他东西来读取smaps?
还有没有其他更透明的方法来检测内存使用情况?

1
如果你还没有这样做,尝试使用单个read调用读取/proc/PID/smaps - Ian Abbott
@IanAbbott 我们已经通过单个调用阅读了它。但是每分钟都会读取。 - vladon
问题不在于读取调用的数量,而在于内核成本。无论缓冲区大小如何,内核都会以4-8k的块写入。 - Gray
1个回答

2
从我的研究来看,读取/proc/PID/smaps的成本与进程的内存使用量相关。似乎内核忙于检查每个内存页面的状态以生成内容。读取smaps的成本与内存使用量"/proc/[pid]/stat"可以告诉您一些关于内存使用情况的信息。
          (23) vsize  %lu
                    Virtual memory size in bytes.

          (24) rss  %ld
                    Resident Set Size: number of pages the process has
                    in real memory.  This is just the pages which count
                    toward text, data, or stack space.  This does not
                    include pages which have not been demand-loaded in,
                    or which are swapped out.

从这个文件读取非常快速。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接