PHP / MYSQL连接失败在重负载下通过mysql.sock
在问这个问题之前,我已经做了很多阅读,所以让我先说我没有耗尽连接,内存或CPU,从我所知道的,我也没有耗尽文件描述符。
以下是PHP在MySQL负载过重时向我抛出的内容:
无法通过套接字 '/var/lib/mysql/mysql.sock' 连接到本地 MySQL 服务器(11 “资源暂时不可用”)
这在负载下随机发生 - 但是我推送的越多,php就越频繁地向我抛出它。当这种情况发生时,我总是可以通过控制台本地连接,从PHP到127.0.0.1,而不是使用更快的unix套接字的“localhost”。
以下是一些系统变量,用于消除常见问题:
cat /proc/sys/fs/file-max = 4895952
lsof | wc -l = 215778 (during "outages")
可用连接的最高使用率:26% (261/1000)
InnoDB缓冲池/数据大小:10.0G/3.7G(充足的空间)
- 软无文件999999
- 硬无文件999999
我实际上正在运行MariaDB(服务器版本:10.0.17-MariaDB MariaDB Server)
这些结果是在正常负载下生成的,也是在下班时间运行mysqlslap生成的,因此,慢速查询不是问题 - 只是高连接。
有什么建议吗?如有必要,我可以报告其他设置/数据 - mysqltuner.pl 说一切都很好
再一次,这里揭示的是,通过IP连接工作得很好,并且在这些中断期间速度很快 - 我只是不知道为什么。
编辑:这是我的.ini(从我最近的故障排除更改来看,有些值可能看起来有点高,请记住,MySQL日志,系统日志或dmesg中没有错误)
socket=/var/lib/mysql/mysql.sock
skip-external-locking
skip-name-resolve
table_open_cache=8092
thread_cache_size=16
back_log=3000
max_connect_errors=10000
interactive_timeout=3600
wait_timeout=600
max_connections=1000
max_allowed_packet=16M
tmp_table_size=64M
max_heap_table_size=64M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=8M
join_buffer_size=1M
innodb_log_file_size=256M
innodb_log_buffer_size=8M
innodb_buffer_pool_size=10G
[mysql.server]
user=mysql
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
open-files-limit=65535