Performance
Linux 伺服器上的高記憶體使用率
我有一個具有以下配置的 LAMP 伺服器。
CPU : Intel(R) Xeon(R) CPU
記憶體:32 GB
硬碟:80 GB
在虛擬環境中執行。
伺服器中的所有東西都執行順利。但我注意到記憶體使用量是伺服器每天都在無緣無故地增加。
這是我伺服器上的目前記憶體使用情況。
# free -g total used free shared buffers cached Mem: 31 13 17 0 0 10 -/+ buffers/cache: 1 29 Swap: 2 0 2
您可以在下面看到過去 8 週的記憶體使用情況。 http://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 伺服器。但結果是一樣的。重新啟動整個伺服器將解決問題,但我想知道真正的問題是什麼。
如果您對此問題有任何想法,請告訴我。
謝謝,
阿倫小號
-/+ buffers/cache: 1
您僅使用1 GB。剩下的就是系統記憶體。
這是完全正常的。如果您不想使用記憶體,請將其從伺服器中取出並放在您的辦公桌上。空閒記憶體是浪費的記憶體。
與大多數現代作業系統一樣,Linux 可以直接將記憶體從一種用途轉換為另一種用途。在中間免費使用它會帶來成本,而不會帶來任何好處。所以明智的作業系統不會這樣做,除非他們必須這樣做。
僅在某些非常特殊的情況下才需要空閒記憶體。例如,需要空閒記憶體來臨時保存通過網路接收的數據,直到作業系統可以處理它。因為空閒記憶體具有與之相關的高成本(就性能而言,就好像該記憶體不存在),系統只保留這些特殊情況所需的空閒記憶體。