我正在寻找一种方法,从
shell脚本中获取特定进程的交换使用情况. Top可以显示此信息,但仅限于交互模式.批处理模式仅在存在.toprc时显示自定义,但您无法在命令行上指定特定的.toprc.我找到了
this script,但我的服务器上/ proc / * / smaps中没有交换条目:
@H_301_13@解决方法
# find /proc/ -maxdepth 1 -type d -regex '^/proc/[0-9]+$' -exec grep -Hi swap '{}'/smaps \; #
所以脚本只为每个进程输出0.
有没有办法找到这些信息?我在RHEL5.1 2.6.18-53.el5 x86_64.
编辑:
需要说明的是,当我询问“交换使用”时,我的意思是已经被分页到交换文件系统的进程所使用的内存量(当前不在主内存中的内容).假设没有更好的方法,我将通过ps -o vsz,RSS的值默认使用(virtual-RSS)计算它.
一个有趣的问题让我摸不着头脑.
首先,为什么你没有Swap行:虽然理论上是在内核2.6.16中添加的,但直到5.3左右它才出现在RHEL中(内核2.6.18-99.el5).这是提交(遗憾的是在RH Bugzilla中无法访问;如果您碰巧拥有具有适当权限的帐户,则Bugzilla ID为443749). http://sophie2.aero.jussieu.fr/distrib/Scientific%20Linux/5x/i386/by-pkgid/351d529f9beeb4e5d936a6d5e3e7813a/files/645
其次,这意味着顶级数据不可靠,因为它不是从smaps中读取的(即它是virt-res):
case P_SWP: MKCOL(scale_num(PAGES_TO_KB(p->size - p->resident),w,s));
第三,我遗憾地说内核是关于使用了多少交换的One True Oracle,并且据我所知,各种补丁使得信息以smaps和状态可用是暴露该信息的唯一方式.不幸的是,我认为更新内核是获取准确信息的唯一方法;通过自己修补源(sample patch,no warranty)或更新到内核2.6.18-99.el5.
我希望有一个更简单的答案;责备莱纳斯.