如何找到使用linux swap或swap中的内容?

前端之家收集整理的这篇文章主要介绍了如何找到使用linux swap或swap中的内容?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有虚拟 Linux(Fedora 17)服务器,28GB内存和2GB交换.服务器正在运行设置为使用大部分RAM的 MySQL数据库.

运行一段时间后,服务器开始使用swap来交换未用完的页面.这很好,因为我的swappiness默认为60,这是预期的行为.

奇怪的是top / meminfo中的数字与进程中的信息不对应.即服务器报告这些数字:

/proc/meminfo:
SwapCached:        24588 kB
SwapTotal:       2097148 kB
SwapFree:         865912 kB

top:
Mem:  28189800k total,27583776k used,606024k free,163452k buffers
Swap:  2097148k total,1231512k used,865636k free,6554356k cached

如果我使用https://serverfault.com/a/423603/98204中的脚本,它会报告合理的数字(由bash’es交换的几个MB,systemd等)和MysqL的一个大的分配(我省略了很多输出行):

892        [2442] qmgr -l -t fifo -u
896        [2412] /usr/libexec/postfix/master
904        [28382] MysqL -u root
976        [27559] -bash
984        [27637] -bash
992        [27931] SCREEN
1000       [27932] /bin/bash
1192       [27558] sshd: admin@pts/0
1196       [27556] sshd: admin [priv]
1244       [1] /usr/lib/systemd/systemd
9444       [26626] /usr/bin/perl /bin/innotop
413852     [31039] /usr/libexec/MysqLd --basedir=/usr --datadir=/data/MysqL --plugin-dir=/usr/lib64/MysqL/plugin --log-error=/data/MysqL/err --open-files-limit=8192 --pid-file=/data/MysqL/pid --socket=/data/MysqL/MysqL.sock --port=3306
449264   Total Swap Used

因此,如果我得到正确的脚本输出,则总交换使用量应为449264K = ca. 440MB用MysqL使用ca. 90%的掉期.

问题是为什么这与top和meminfo数字有很大不同?有没有办法如何“转储”交换信息,看看它实际上是什么,而不是总结所有进程的交换使用?

在分析问题时,我提出了不同的想法,但它们似乎都是错误的:

>脚本输出不是KB.即使它是512或4KB单位也不会匹配.实际上,比率(1200:440)约为3:1,这是“奇怪的”数字.
>交换中有一些页面在流程之间以某种方式共享,如https://serverfault.com/a/477664/98204所述.如果这是真的,我怎么能找到这样使用的实际内存数量?我的意思是它需要使cca 800MB的差异.在这种情况下,这听起来不对.
>已完成的进程使用交换中的一些“旧”页面.我不介意,如果我能够找出这个“可以自由”交换多少钱.
>交换中的页面已经被交换回内存并且在交换中,以防它们没有在RAM中更改并且需要再次换出,如https://serverfault.com/a/100636/98204中所述.但SwapCached值仅为24MB.

奇怪的是,交换使用缓慢增加,而脚本的总和输出大致相同.在最近3天内,交换使用量从1100MB增加到目前的1230MB,而总和从430MB增加到目前的449MB(ca.).

服务器有足够的可用(可用)RAM,所以我可以关闭交换并重新打开它.或者我可以将swappiness设置为0,这样只有在没有其他方式时才会使用交换.但我想解决这个问题,或者至少找出原因是什么.

解决方法

Fedora 18及以上版本已经在回购中沾上了瑕疵.您可以从 source下载python脚本并安装.

这是我的机器的示例输出(有点剪切和匿名):

# smem -s swap -t -k -n
  PID User     Command                         Swap      USS      PSS      RSS 
20917 1001     bash                               0     1.1M     1.1M     1.9M 
28329 0        python /bin/smem -s swap -t        0     6.3M     6.5M     7.4M 
 2719 1001     gnome-pty-helper               16.0K    72.0K    73.0K   516.0K 
  619 0        @sbin/mdadm --monitor --sca    28.0K    72.0K    73.0K   248.0K 

[big snip]

32079 42       gnome-shell --mode=gdm         41.9M     1.9M     2.0M     5.0M 
32403 1001     /opt/google/chrome/chrome -    43.1M   118.5M   119.4M   132.3M 
 4844 1002     /opt/google/chrome/chrome      48.1M    38.1M    41.9M    51.9M 
 5411 1002     /opt/google/chrome/chrome -    54.6M    33.4M    33.5M    36.8M 
 5624 1002     /opt/google/chrome/chrome -    72.4M    54.9M    55.5M    65.7M 
24328 1002     /opt/Adobe/Reader9/Reader/i    77.5M     1.9M     2.0M     5.2M 
 4921 1002     /opt/google/chrome/chrome -   147.2M   258.4M   259.4M   272.0M 
-------------------------------------------------------------------------------
  214 14                                       1.1G     1.1G     1.2G     1.7G

该源还提供了smemcap,它将存储所有相关数据,以便稍后可以在其上运行smem.

06001

猜你在找的Linux相关文章