我正在寻找一种从 shell 脚本获取特定进程的交换使用情况的方法。Top 可以显示此信息,但只能在交互模式下显示。批处理模式只会在 .toprc 存在时显示自定义,但您不能在命令行上指定特定的 .toprc。我找到了这个脚本,但我的服务器上的 /proc/*/smaps 中没有交换条目:
# find /proc/ -maxdepth 1 -type d -regex '^/proc/[0-9]+$' -exec grep -Hi swap '{}'/smaps \;
#
Run Code Online (Sandbox Code Playgroud)
所以脚本只为每个进程输出 0。
有没有办法找到这些信息?我在 RHEL5.1 2.6.18-53.el5 x86_64 上。
编辑:
需要明确的是,当我询问“交换使用情况”时,我的意思是已调出到交换文件系统的进程使用的内存量(当前未位于主内存中的内存)。假设没有更好的方法,我将默认使用 (virtual - rss) 通过ps -o vsz,rss.
小智 3
一个有趣的问题让我摸不着头脑。
首先,为什么没有 Swap 行:虽然理论上它是在内核 2.6.16 中添加的,但直到 5.3 左右(内核 2.6.18-99.el5)它才出现在 RHEL 中。这是提交(遗憾的是无法在 RH Bugzilla 中访问;如果您碰巧拥有具有适当权限的帐户,则 Bugzilla id 为 443749)。 http://sophie2.aero.jussieu.fr/distrib/Scientific%20Linux/5x/i386/by-pkgid/351d529f9beeb4e5d936a6d5e3e7813a/files/645
其次,这意味着顶部数据不可靠,因为它不是从 smap 读取的(即它是 virt - res):
case P_SWP:
MKCOL(scale_num(PAGES_TO_KB(p->size - p->resident), w, s));
Run Code Online (Sandbox Code Playgroud)
第三,我很遗憾地说,内核是关于使用多少交换空间的唯一真正的预言家,据我所知,使信息在 smap 和状态中可用的各种补丁是公开该信息的唯一方法。不幸的是,我认为更新内核是获得准确信息的唯一方法;可以自行修补源代码(示例补丁,无保证)或更新到内核 2.6.18-99.el5。
我希望有一个更简单的答案;责怪莱纳斯。
| 归档时间: |
|
| 查看次数: |
4024 次 |
| 最近记录: |