![Linux 服务器上的高内存使用率](https://linux22.com/image/576180/Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E9%AB%98%E5%86%85%E5%AD%98%E4%BD%BF%E7%94%A8%E7%8E%87.png)
我有一个具有以下配置的 LAMP 服务器。
中央处理器: 英特尔(R) 至强(R) 中央处理器
内存:32 GB
硬盘:80 GB
在虚拟环境中运行。
服务器中的所有东西都运行顺利。但我注意到服务器的 RAM 使用量每天都在无缘无故地增加。
这是我的服务器当前的内存使用情况。
# free -g
total used free shared buffers cached
Mem: 31 13 17 0 0 10
-/+ buffers/cache: 1 29
Swap: 2 0 2
您可以在下面看到过去 8 周的内存使用情况。 https://i.stack.imgur.com/543jh.png
我执行了以下命令来查找每个进程消耗了多少内存。
# ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }'
0.00 Mb COMMAND
2253.62 Mb /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --socket=/var/lib/mysql/mysql.sock
1171.66 Mb java -jar /etc/vmagent/bin/VMAgent.jar
138.27 Mb /sbin/audispd
127.75 Mb /usr/sbin/named -u named -c /etc/named.conf -u named -t /var/named/run-root
74.29 Mb auditd
73.03 Mb automount
43.14 Mb /usr/bin/spamd --username=popuser --daemonize --nouser-config --helper-home-dir=/var/qmail --max-children 5 --create-prefs --virtual-config-dir=/var/qmail/mailnames/%d/%l/.spamassassin --pidfile=/var/run/spamd/spamd_full.pid --socketpath=/tmp/spamd_full.sock
43.14 Mb spamd child
43.14 Mb spamd child
37.13 Mb /usr/sbin/httpd
37.02 Mb /usr/sbin/httpd
36.52 Mb /usr/sbin/httpd
36.46 Mb /usr/sbin/httpd
36.23 Mb /usr/sbin/httpd ................
为了进行故障排除,我重新启动了 MySQL 和 APACHE 服务器。但结果是一样的。重新启动整个服务器将解决问题,但我想知道真正的问题是什么。
如果您对此问题有任何想法,请告诉我。
谢谢,
阿伦·S
答案1
-/+ buffers/cache: 1
你是使用只有 1 GB。其余的是系统缓存。
答案2
这很正常。如果您不想使用内存,请将其从服务器中取出并放在您的办公桌上。空闲的内存就是浪费的内存。
Linux 和大多数现代操作系统一样,可以直接将内存从一种用途转换为另一种用途。在中间释放内存会产生相关成本,却不会带来任何好处。因此,明智的操作系统不会在必要的情况下这样做。
仅在某些非常特殊的情况下才需要空闲内存。例如,需要空闲内存来暂时保存通过网络接收的数据,直到操作系统可以处理它为止。由于空闲内存的成本很高(就性能而言,就好像没有内存一样),因此系统只会保留这些特殊情况下所需的空闲内存。
答案3
阅读此文:Linux 占用了我的内存