2016-05-01 21 views
1

我有一個Ubuntu的15.04服務器,160GB的RAM和40個CPU核心。我正在運行一個高流量的wordpress站點,每天有近20萬名訪客。網絡服務器是nginx,緩存服務器是清漆。我www.conf PHP配置是wordpress php和mysql的連接頻繁斷開

pm = ondemand 
pm.max_children = 300 
pm.start_servers = 80 
pm.min_spare_servers = 50 
pm.max_spare_servers = 300 
pm.process_idle_timeout = 10s 
pm.max_requests = 1000 

MySQL連接配置

sam-recover   = BACKUP 
max_connections  = 2000 
query_cache_limit = 0 
query_cache_size = 0 
log_error = /var/log/mysql/error.log 
expire_logs_days = 10 
max_binlog_size = 100M 
innodb_log_file_size=268435456 
innodb_log_buffer_size = 4G 
innodb_buffer_pool_size = 8G 
innodb_fast_shutdown = 0 
innodb_flush_method = O_DIRECT 
innodb_flush_log_at_trx_commit=0 

[mysqldump] 
quick 
quote-names 

[mysql] 
[isamchk] 
key_buffer    = 16M 
sort_buffer_size = 32M 

主要問題是,在PHP和MySQL數據庫的連接經常斷開連接,它顯示「錯誤建立數據庫連接」。 Mysql服務正常運行。當我重新啓動php5-fpm服務時,網站開始工作,但有時候以後會發生同樣的事情。

我已經嘗試了不同的pm配置值,但沒有任何調整實際工作。

日誌中也沒有任何內容。我怎樣才能調試這兩個服務之間的連接問題?

+2

如果你有160GB的內存,你爲什麼只分配8到'innodb_buffer_pool_size'?對於專用數據庫實例,該事物應該佔可用內存的70-80%左右。此外,你需要檢查你的連接限制,「max_connections」應該比你需要的高得多,可能是4096或更多,這取決於系統負載。這一切都基於InnoDB的表格。 MyISAM很難擴展,應該避免。 – tadman

+0

我正在考慮運行其他網站,所以我這樣做。 'innodb_buffer_pool_size'是否必須使用70-80%的內存。我會嘗試提高'max_connctions'的價值。 – uvishere

+0

這不是強制性的,但你可以拋出的內存越多,你的InnoDB性能就會越快。如果你不在MySQL 5.7中,這也是需要考慮的事情,它是最快的版本。 – tadman

回答

0

使用mysqltuner來調整你的mysql配置。您很可能用盡了分配的資源,導致數據庫連接超時/失敗。

0

所以,這就是我如何解決這個問題。其實MySQL連接只有214,即使我把它2000年我檢查MySQL中使用命令:

mysql> show variables like 'max_connections'; 

,結果是:

+-----------------+-------+ 
| Variable_name | Value | 
+-----------------+-------+ 
| max_connections | 214 | 
+-----------------+-------+ 
1 row in set (0.00 sec) 

的問題是,最大數量允許打開的文件太小,默認情況下,1024所以我用打開的文件限制增加文件打開限制:

[mysqld] 
......... 
open_files_limit = 8192 
max_connections = 2000 
......... 

...和在調用實際的mysqld守護進程之前,mysqld_safe會自行增加ulimit。

而且運行MySQL服務器將揭示所需的max_connections設置卡這個時候:

mysql> show variables like 'max_connections'; 

+-----------------+-------+ 
| Variable_name | Value | 
+-----------------+-------+ 
| max_connections | 2000 | 
+-----------------+-------+ 
1 row in set (0.00 sec) 

因此,問題就迎刃而解了。