转载请注明出处: http://blog.csdn.net/jason_asia/article/details/48621211
Zabbix agent导致的Error in accept: Too many open files in system无法访问msyql数据库
【环境描述】
Mysql 5.5.21
【情况描述】
现象数据库处于运行状态,但是无法创建新的连接,监控报警“Timeout while attempting connection”
[root@db11149 ~]# mysql
连接不上Mysql,一直处于等待状态。
Mysql的error日志报错:
[ERROR] /usr/sbin/mysqld: Can't find file:'./wukong_customs/wukong_task_info.frm' (errno: 23)
[ERROR] Error in accept: Too many openfiles in system
Mysqld进程打开的文件句柄数:
[root@db11149 ~]# lsof -p 24504 | wc-l
4805
没有超过Mysql设置的限值。
[root@db11149 ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 268288
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 268288
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
[root@db11149 ~]# cat/etc/security/limits.conf | tail -3
# End of file
* soft nofile 65536
* hard nofile 65536
查看操作系统的日志:
localhost kernel: VFS: file-max limit 65536reached
localhost nrpe[6665]: Network server acceptfailure (23: Too many open files in system)
日志显示操作系统的连接数已经达到了最大值65535了,但是服务器上运行的业务应用只有数据库服务,而mysql打开的文件句柄数不到5000个。因此推断是有哪个正在运行的服务打开的句柄数过多导致的。
查看目前运行的所有进程打开的句柄数:
# for i in `ps -ef| egrep -v 'UID PID PPID' | awk '{print $2}'` ; do echo "pid=$i, open_files=`lsof -p $i| wc -l`" >> 1 ;done
计算所有进程打开的句柄总数:
# cat 1 | cut -d= -f 3 | awk'BEGIN{i=0}{i=i+$1}END{print i}'
62481
查看打开句柄数最多的进程:
确定是zabbix进程打开的
[root@db11149 ~]# ps -ef | grep zabbix
root 27644 1 0 Jul27 ? 00:00:00 zabbix_agentd -c/etc/zabbix/zabbix_agentd.conf
root 27646 27644 0 Jul27 ? 00:00:00 zabbix_agentd: collector [idle1 sec]
root 27647 27644 0 Jul27 ? 00:02:06 zabbix_agentd: listener #1[waiting for connection]
root 27648 27644 0 Jul27 ? 00:02:06 zabbix_agentd: listener #2[waiting for connection]
root 27649 27644 0 Jul27 ? 00:02:07 zabbix_agentd: listener #3[waiting for connection]
root 27650 27644 0 Jul27 ? 00:02:04 zabbix_agentd: listener #4[waiting for connection]
root 27651 27644 0 Jul27 ? 00:02:06 zabbix_agentd: listener #5[waiting for connection]
root 27652 27644 0 Jul27 ? 00:01:59 zabbix_agentd: listener #6[waiting for connection]
root 27653 27644 0 Jul27 ? 00:02:09 zabbix_agentd: listener #7[waiting for connection]
root 27654 27644 0 Jul27 ? 00:02:07 zabbix_agentd: listener #8 [waitingfor connection]
pid=27644, open_files=35
pid=27646, open_files=35
pid=27647, open_files=7614
pid=27648, open_files=7614
pid=27649, open_files=7666
pid=27650, open_files=7379
pid=27651, open_files=7479
pid=27652, open_files=7214
pid=27653, open_files=7916
pid=27654, open_files=7804
查看zabbix agent打开的文件:
zabbix_ag 27651 root 2w REG 253,2 1948 98307 /tmp/zabbix_agentd.log
zabbix_ag 27651 root 3w REG 253,2 5 98305 /tmp/zabbix_agentd.pid
zabbix_ag 27651 root 4u IPv6 894815352 0t0 TCP *:10050 (LISTEN)
zabbix_ag 27651 root 5u IPv4 894815353 0t0 TCP *:10050 (LISTEN)
zabbix_ag 27651 root 7u sock 0,5 0t0 898398069 can't identify protocol
………. 好多好多 cant’t identifyprotocol
zabbix_ag 27651 root 8u sock 0,5 0t0 898398084 can't identify protocol
【产生原因】
由此确定是由于zabbix agent的异常导致的。
【如何处理】
重启zabbix agent后,打开的文件被释放。
查找zabbix的资料后确定是zabbix agent的BUG,目前在zabbix agent 2.4.3和2.4.4版本中发现了这个BUG,在2.2和2.5版本中已经修复了。
然后更新zabbix agent的版本。
https://support.zabbix.com/browse/ZBX-9251