Mysql
MySQL程序太多
在他告訴我他的 MySQL 使用了太多記憶體之後,我試圖幫助他的伺服器的朋友……事實證明,它不僅使用了很多記憶體,而且還有太多的 mysql 程序正在執行!
這是結果
ps auxww|grep mysql
: http: //pastebin.com/kYrHLXVW所以基本上有13個MySQL程序,按照mysqladmin連接的只有1個客戶端……
一段時間後,這些程序中的每一個都會消耗多達 50mb 的記憶體,因此最終會消耗大量記憶體……
我直接從 /usr/share/mysql 使用 my-medium.cnf 配置模板…我重新啟動了 mysql 伺服器,但是一旦啟動,13 個程序又回來了…我不知道是什麼問題可能是……任何想法/建議將不勝感激!
mysql 9804 0.0 0.6 58556 22960 pts/0 S 12:43 0:00 \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock mysql 9807 0.0 0.6 58556 22960 pts/0 S 12:43 0:00 \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock mysql 9808 0.0 0.6 58556 22960 pts/0 S 12:43 0:00 \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock mysql 9809 0.0 0.6 58556 22960 pts/0 S 12:43 0:00 \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock mysql 9810 0.0 0.6 58556 22960 pts/0 S 12:43 0:00 \_ /usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --pid-file=/var/lib/mysql/myhostname.pid --skip-external-locking --port=3306 --socket=/var/lib/mysql/mysql.sock [ ... repeated output truncated ... ]
他們沒有使用 13 * 50mb 的記憶體——他們可能總共使用了 70mb 之類的東西。請記住,Linux 將在程序之間共享未修改的記憶體頁面,因此如果您的伺服器是新啟動的,那麼大部分記憶體都將被共享。事實上,由於 mysql 是執行緒化的,因此每個執行緒分配的記憶體可能會更少。如果您關心每個 mysql 程序的記憶體使用情況,請查看
/etc/mysql/my.cnf
,並查看 mysqld 部分中的變數:
key_buffers
thread_stack
thread_cache_size
max_connections
query_cache_limit
query_cache_size
但請注意,這些變數是非常強大的調整變數,如果將它們設置得太低,您很容易殺死您的 mysql 性能,或者通過將它們設置得太高來浪費可以在其他地方使用的記憶體。
找出調整 mysql 實例的最佳方法的一個簡單起點是執行您的應用程序一點點,然後執行 mysqltune 腳本,該腳本將分析您的性能計數器,然後就您應該在伺服器中更改的內容提出建議配置。