2016-05-01 18 views
1

私は160GBのRAMと40個のCPUコアを備えたubuntu 15.04サーバーを持っています。私は1日あたり約200,000人の訪問者と高トラフィックのWordPressのサイトを実行しています。 Webサーバーはnginxで、キャッシュサーバーはワニスです。マイwww.confのPHPの設定は、PHPとMySQLデータベース接続が頻繁に切断され、それが「エラー確立データベース接続」を示し、MySQLの接続設定がwordpress phpと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 

主な問題はあるある

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のサービスが正しく実行されています。 php5-fpmサービスを再起動すると、サイトは動作し始めますが、後で同じことが起こります。

私は午後のコンフィグレーションに異なる値を試しましたが、実際には調整は一切行っていません。

ログには何もありません。これら2つのサービス間の接続問題をどのようにデバッグできますか?

+2

もし160GBのメモリを持っているのであれば、なぜinnodb_buffer_pool_sizeに8を割り当てるだけですか?そのことは、専用のデータベース・インスタンスで使用可能なメモリーの約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> show variables like 'max_connections'; 

そして結果だった:

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

問題は、最大数のことです実際にMySQLの接続は、私が2000年にそれを設定していても、私はMySQLでのコマンドを使用して、それをチェックするだけで214でした許可される開いているファイルは、だから私は、ファイルオープン限度増加する開いているファイルがを制限する使用されるデフォルトの1024で、小さすぎる:

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

を...とmysqld_safeは実際のmysqldデーモンを呼び出す前にulimitを独自に増加させます。

そして、実行しているMySQLサーバが設定希望のmax_connectionsを明らかにするには、この時間を立ち往生:

mysql> show variables like 'max_connections'; 

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

したがって、問題は解決しました。

関連する問題