按进程交换使用情况

按进程交换使用情况

我们有 CentOS 5.11(64 位),它有 64G 物理内存和 4G 交换区,我看到900MB交换区已被使用,但试图找出谁在使用它。我尝试过以下操作,但它显示了zero用法。

      smem -t -p
      ...
      ...
     4758 root     /usr/bin/python2.6 /usr/bin    0.00%    0.03%    0.03%    0.03%
    21846 root     /usr/bin/ruby /usr/bin/pupp    0.00%    0.06%    0.06%    0.06%
    -------------------------------------------------------------------------------
      920 12                                      0.00%    7.30%   10.04%  161.37%

我已经尝试过top命令,但它显示错误的数据,所以它毫无用处。

我也尝试过以下脚本,但它也显示zero

#!/bin/bash
for i in `ls /proc`
do
        if [ -f /proc/$i/smaps ]
                then
                grep -H Swap /proc/$i/smaps | awk '( $2 != "0" ) { print }'
        fi
done

没有工具能够找出谁在使用SWAP,所以不知道这里的问题是什么。但在其他相同的情况下,我上面的 bash 脚本可以工作,但在这台服务器上则不然,那么会出现什么问题呢?

topswap命令在列中显示以下数据,并且我们有总4G交换,所以这是完全错误的

top - 09:38:55 up 111 days, 14:23,  1 user,  load average: 2.09, 2.34, 2.20
Tasks: 994 total,   4 running, 990 sleeping,   0 stopped,   0 zombie
Cpu(s): 12.3%us,  0.9%sy,  0.0%ni, 86.0%id,  0.0%wa,  0.0%hi,  0.7%si,  0.0%st
Mem:  98820240k total, 75660440k used, 23159800k free,  1056112k buffers
Swap:  4192924k total,  4192496k used,      428k free, 59936024k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
 6292 postgres  15   0 50.0g 109m 100m S  1.5  0.1   0:02.95  49g postmaster
 6797 postgres  15   0 50.0g  10m 8228 S  1.5  0.0  33:35.32  49g postmaster
10300 postgres  15   0 50.0g  60m  53m S  1.5  0.1   0:01.18  49g postmaster
12280 root      15   0 13428 1836  844 R  1.5  0.0   0:00.25  11m top
   26 root      10  -5     0    0    0 S  0.7  0.0 215:11.17    0 events/0
 1969 postgres  15   0 50.0g 141m 132m S  0.7  0.1   0:04.42  49g postmaster
 2549 postgres  15   0 50.0g 141m 132m S  0.7  0.1   0:04.24  49g postmaster
 2550 postgres  15   0 50.0g 141m 132m S  0.7  0.1   0:04.37  49g postmaster
 2699 postgres  15   0 50.0g 141m 132m S  0.7  0.1   0:04.45  49g postmaster
 3128 postgres  15   0 50.0g 131m 123m S  0.7  0.1   0:03.91  49g postmaster
 4556 postgres  15   0 50.0g 115m 107m S  0.7  0.1   0:03.20  49g postmaster
 4560 postgres  15   0 50.0g 116m 108m S  0.7  0.1   0:03.23  49g postmaster
 4669 postgres  15   0 50.0g 113m 105m S  0.7  0.1   0:03.28  49g postmaster
 4671 postgres  15   0 50.0g 114m 106m S  0.7  0.1   0:03.27  49g postmaster

这是我的tmpfs输出,现在的问题是它48G来自哪里,在 postgresql.conf 中我指定的shared_buffer=48G是 tmpfs 显示的内容?我对吗?

[root@db ~]# df -h -t tmpfs
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                  48G   12K   48G   1% /dev/shm

相关内容