Linux:内存使用和释放交换内存

时间:2014-01-13 05:40:55

标签: linux memory-management swap ram

我在其中一台服务器上观察到以下统计数据。

  1. 从top命令,只有一个进程使用15%的RAM而没有其他进程
  2. 交换中有所有0&换出vmstat输出列
  3. 但我仍然看到Swap和RAM都被“free -m”输出完全占用

    最高输出

    Mem:  16413804k total, 16390264k used,    23540k free,    59604k buffers
    Swap:  2040244k total,  2040244k used,        0k free,   584688k cached
    
    PID USER        PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+     COMMAND                                                                                                                                                                         
    10984 mysql     15   0 3100m 2.4g 5472 S    0 15.5   1129:44    mysqld                                                                                                                                                                          
    12773 root      16   0 18440 7916 1064 S    0  0.0   65:46.67   IPremoted                                                                                                                                                                       
    3108 ntp        16   0 18984 5720 4652 S    0  0.0   54:35.78   ntpd                                                                                                                                                                            
    19694 root      16   0 48996 5708 3656 S    0  0.0   0:00.03    sshd                                                                                                                                                                            
    11084 hpsmh     17   0  371m 3892 2532 S    0  0.0   0:00.00    hpsmhd                                                                                                                                                                          
    

    free -m output

        total  used    free   shared   buffers   cached
    Mem:16029  15983   46     0        52        546
    -/+ buffers/cache:      
                   15384   644
    Swap:1992  1992    0
    

    vmstat输出

     swap usage
     si   so    
     0    0
     0    0
     0    0
     0    0
     0    0
     0    0
     0    0
    

    有人可以解释这个案子吗?

    先谢谢。

2 个答案:

答案 0 :(得分:3)

首先,在使用下面的脚本时,您会发现哪个进程正在使用交换空间。

#!/bin/bash
# Get current swap usage for all running processes
# Erik Ljungstrom 27/05/2011
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"` ; do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep Swap $DIR/smaps 2>/dev/null| awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME )"
let OVERALL=$OVERALL+$SUM
SUM=0

done
echo "Overall swap used: $OVERALL"

然后执行以下操作 swapoff -a 一旦交换清除了 swapon -a

由于 -Arun

答案 1 :(得分:1)

交换在这里不是问题。但使用超过一半RAM的东西是。

交换完全没有完全无用的数据,所以你有2 GB以上的RAM来做重要的事情。对你有益!我怎么知道交换内容没用?嗯,si为零。没有任何进程想要将其读回内存。

现在的问题是:

  • 16 GB总RAM
  • 减去所有流程使用的3 GB左右(我猜你正确排序了最高输出)
  • 减去644 MB的缓存/缓冲区/免费
  • 超过12千兆字节使用了什么?内核或某些slab或共享内存或其他一些匿名页面。奇怪的。我会仔细检查/proc/meminfo以找出原因。

也不要按照评论中的建议查看非活动内存统计信息。 It's useless