我有一台配备160GB内存和40个CPU内核的ubuntu 15.04服务器。我正在运行一个高流量的wordpress网站,每天有近20万访客。网络服务器是nginx,缓存服务器是清漆。我的www.conf php配置是
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配置尝试了不同的值,但实际上没有任何调整。
日志中也没有任何内容。如何调试这两种服务之间的连接问题?
答案 0 :(得分:0)
使用mysqltuner调整您的mysql配置。您很可能耗尽了已分配的资源,导致数据库连接超时/失败。
答案 1 :(得分: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_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)
因此解决了问题。