free 显示内存偏高的问题

2018-07-23  本文已影响0人  Sanmu_c05f

今天客户反应通过监控,发现服务器内存使用率非常高,超过90%,使用free命令查看确实是这样,但是通过top命令查看,发现内存&cpu使用都非常少,服务器和应用完全没有高压的状况。

网上找了些资料,成功解决了问题,将方式记录如下:

首先使用free命令查看内存使用状况

used=total-free  total=used+free

实际内存占用:used-buffers-cached total-free-buffers-cached

实际可用内存:buffers+cached+free

现在看起来是非常正常的,因为这是处理过的结果。所以从上面的可以看出buffers和cached的量是不用查的,只需要处理used的量就好.

used主要有rss、slab、pagetables

我们实际进程使用的物理页面应该用resident set size来算的,遍历所有的进程,就可以知道所有的所有的进程使用的内存。我们来实验下RSS的使用情况:

$ cat RSS.sh

#/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`

echo $RSS"KB"

$ ./RSS.sh 

从这里可以得到应用使用的内存的结果。

echo `cat /proc/slabinfo |awk 'BEGIN{sum=0;}{sum=sum+$3*$4;}END{print sum/1024/1024}'` MB

从这里可以看到slab的内存使用

echo `grep PageTables /proc/meminfo | awk '{print $2}'` KB

从这里可以看到page tables的大小

我的服务器上看到主要是slab比较大,有10来个g。

然后使用slabtop查看发现dentry的量最大,以下是其它服务器弄来的截图。

这台服务器运行了很长时间了。以前也没有说过这方面问题。一时半会也没法去看是什么原因导致的,只能手动释放一次内存看看结果了。

echo 0 >/proc/sys/vm/drop_caches

设置值说明:

0:不释放(系统默认值)

1:释放页缓存

2:释放dentries和inodes

3:释放所有缓存

我使用了2

然后使用free -m查看。发现已经正常了。然后我重新改成了0。事后发现slaptop里面dentry竟然没有新增了。感觉有点奇怪,但是服务一切正常。就没有去深究了。。

不懂运维技术,只能自己google 百度。欢迎大神留言指教。。

上一篇 下一篇

猜你喜欢

热点阅读