vmware下内存丢失查找

有台服务器,4G内存的。 可以显示可用的内存数字有1070MB, 可机器上没有什么进程占用大量的内存啊,于是就慢慢开始找原因了。

然后用了之前yufeng提供的一段内存检查的代码来进行检查,看是否有slapinfo和pagetable占用的多。

#/bin/bash
for PROC in `ls /proc/|grep "^[0-9]"`
do
if [ -f /proc/$PROC/statm ]; then
  TEP=`cat /proc/$PROC/statm | awk '{print ($2)}'`

  RSS=`expr $RSS + $TEP`
fi
done
RSS=`expr $RSS * 4`
PageTable=`grep PageTables /proc/meminfo | awk '{print $2}'`
SlabInfo=`cat /proc/slabinfo |awk 'BEGIN{sum=0;}{sum=sum+$3*$4;}END{print sum/1024/1024}'`

echo $RSS"KB", $PageTable"KB", $SlabInfo"MB"
printf "rss+pagetable+slabinfo=%sMBn" `echo $RSS/1024 + $PageTable/1024 + $SlabInfo|bc`
free -m

可执行下来的结果,显示已用的vmrss+pagetable+slapinfo总共才1.4GB左右

于是想是不是一些inode占用了比较多的内存,于是在sysctl.conf中加入了如下参数将内存的caches,denties和inodes等信息sync到磁盘上

vm.drop_caches = 3

可执行了sysctl后也就清理了50MB内存,那剩下的内存呢。

然后就查看/proc/meminfo,看看是否free命令有bug啊

看来这里也没有啊,这个结果跟free出来的结果是一致的。

于是就开始 /proc/PID/status 里面的vm部分进行累加计算,发现vmsize的累加的值跟这个内存使用的大小还是很接近的。

for PROC in `ls /proc/|grep "^[0-9]"`
do
  if [ -f /proc/$PROC/status ]; then
      TEP=`grep  'VmSize' /proc/$PROC/status |awk '{print ($2)}'`
      if [ ! -n $TEP ];
	  then
	  	TEP=0
	  fi
	  VMSIZE=`expr $VMSIZE + $TEP`
  fi
done
echo $VMSIZE

这个时候想到,这个虚拟机是在vmware之上的,会不会是vmware的一个bug呢。放狗搜索了一把,还真果然很多人提到了这个问题。

https://access.redhat.com/site/solutions/43729

http://forums.opensuse.org/showthread.php/466043-memory-usage-problem-11-4-vmware

无论是opensuse还是rhel都有这个问题啊。 里面也说到最终的解决办法了,它是直接就关闭了,不过由于vmware-tools带了一些比较好的驱动等等,所以我这边还是先重启一下,后期再改一下guest memory manager部分。

关于 Timo
XNIX SA & MYSQL DBA

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: