问题描述
在服务器中,我们并没有运行太多程序,但是服务器的内存占用很高。
# 03/06/2017 我们还没干什么呢…………有时间再管他吧
# 03/09/2017 后来我们联系机房,技术人员为我们解释出缘由。其实这个问题的答案还是因为我们无知,如果我们在知道的多一点的话就应该知道虚拟化里有个“动态内存”。
这篇文章剩下的内容,主要是介绍在Linux中分析内存使用的方法
方法一、free
查看服务器的内存使用(有关free命令介绍,点击查看):
#!/bin/sh free -h -w # total used free shared buffers cache available # Mem: 3.9G 2.8G 414M 17M 160M 454M 805M # Swap: 1.0G 9.8M 1.0G # used = total - free - buffers - cache.: 有点高,我们就是不知道被哪些进程用了。 # shared: 由tmpfs使用的,不高(我们比对了其他三台机器)。 # buffers: 内核缓冲使用的,160M 不高。 # cache:page cache和slabs使用的,454M 也是正常的。 #
先drop_caches看下,(实际并不推荐这么做,因为这么做不是在解决问题,buffer 和 cache 本来都是为了减少IO):
#!/bin/sh echo 3 > /proc/sys/vm/drop_caches free -h -w # total used free shared buffers cache available # Mem: 3.9G 2.8G 928M 17M 1.5M 103M 879M # Swap: 1.0G 9.8M 1.0G # 并没有什么用,只是刷掉 buffer 和 cache 了。这么做也不好,因为buffer 和 cache 本来都是为了减少IO的。
方法二、top
我们用top命令吧(关于top命令的介绍,点击查看)
至于我们的top为什么是这样的,而不是常见的那种,是因为我们的 Procps-ng 软件包是自己编译的,并使用了 Ncurses 库。
关于top命令的输出,查看博文《关于top命令的介绍》,这里不再解释了,top的输出已经很详细了,你只需要知道各个输出的含义。
参考文献
Linux Check Memory Usage
Operating System Cache