【此文抄自同事的郵件,當(dāng)作筆記學(xué)習(xí)】
環(huán)境描述
Mysql 5.5.21
OS centos 5.8
zabbix agent 2.4.3
情況描述
現(xiàn)象數(shù)據(jù)庫(kù)處于運(yùn)行狀態(tài),但是無(wú)法創(chuàng)建新的連接,監(jiān)控報(bào)警數(shù)據(jù)庫(kù)無(wú)法連接,連接不上MySQL,一直處于等待狀態(tài)。
Mysql的error日志報(bào)錯(cuò):
[ERROR] /usr/sbin/mysqld: Can't find file: './wukong_customs/wukong_task_info.frm' (errno: 23)[ERROR] Error in accept: Too many open files in system
?
Mysqld進(jìn)程打開(kāi)的文件句柄數(shù):
lsof(list open files)是一個(gè)列出當(dāng)前系統(tǒng)打開(kāi)文件的工具。
[root@db11149 ~]# lsof -p 24504 | wc -l 4805
沒(méi)有超過(guò)MySQL設(shè)置的限值。
查看操作系統(tǒng)的日志:
localhost kernel: VFS: file-max limit 65536 reachedlocalhostnrpe[6665]: Network server accept failure (23: Too many open files in system)
日志顯示操作系統(tǒng)的連接數(shù)已經(jīng)達(dá)到了最大值65535了,但是服務(wù)器上運(yùn)行的業(yè)務(wù)應(yīng)用只有數(shù)據(jù)庫(kù)服務(wù),而mysql打開(kāi)的文件句柄數(shù)不到5000個(gè)。因此推斷是有哪個(gè)正在運(yùn)行的服務(wù)打開(kāi)的句柄數(shù)過(guò)多導(dǎo)致的。
顯示shell中的資源限制:
ulimit命令修改的數(shù)值只對(duì)當(dāng)前登錄用戶的目前使用環(huán)境有效(只對(duì)當(dāng)前會(huì)話有效),系統(tǒng)重啟或者用戶退出后就會(huì)失效.
[root@db11149 ~]# ulimit -acore file size (blocks, -c) 0dataseg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 268288max locked memory (kbytes, -l) 32max memory size (kbytes, -m) unlimitedopen files (-n) 65536pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 10240cpu time (seconds, -t) unlimitedmax user processes (-u) 268288virtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited
?
對(duì)所有會(huì)話永久生效,修改limits.conf:
[root@db11149 ~]# cat /etc/security/limits.conf | tail -3# End of file* soft nofile 65536* hard nofile 65536
?
這個(gè)當(dāng)中的硬限制是實(shí)際的限制,而軟限制,是warnning限制,只會(huì)做出warning.其實(shí)ulimit命令本身就有分軟硬設(shè)置,加-H就是硬,加-S就是軟
默認(rèn)顯示的是軟限制,如果運(yùn)行ulimit命令修改的時(shí)候沒(méi)有加上的話,就是兩個(gè)參數(shù)一起改變.
查看目前運(yùn)行的所有進(jìn)程打開(kāi)的句柄數(shù):
# fori in `ps -ef| egrep -v 'UID PID PPID' | awk '{print $2}'` ; do echo "pid=$i, open_files=`lsof -p $i | wc -l`" >>1 ;donepid=27644, open_files=35pid=27646, open_files=35pid=27647, open_files=7614pid=27648, open_files=7614pid=27649, open_files=7666pid=27650, open_files=7379pid=27651, open_files=7479pid=27652, open_files=7214pid=27653, open_files=7916pid=27654, open_files=7804#for i in `ps -ef| egrep -v 'UID PID PPID' | awk '{print $2}'` ; do echo "open_files=`lsof -p $i | wc -l` &&& whole=`ps -ef | awk '{if($2=="'"$i"'"){print $0}}'`" ;done
查看打開(kāi)句柄數(shù)最多的進(jìn)程:
確定是zabbix進(jìn)程打開(kāi)的
[root@db11149 ~]# ps -ef | grep zabbixroot 27644 1 0 Jul27 ? 00:00:00 zabbix_agentd -c /etc/zabbix/zabbix_agentd.confroot 27646 27644 0 Jul27 ? 00:00:00 zabbix_agentd: collector [idle 1 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 [waiting for connection]
?
產(chǎn)生原因
重啟zabbix agent后,打開(kāi)的文件被釋放。
https://support.zabbix.com/browse/ZBX-9251
由此確定是由于zabbix agent的異常導(dǎo)致的。
?
如何處理
查找zabbix的資料后確定是zabbix agent的BUG,目前在zabbix agent 2.4.3和2.4.4版本中發(fā)現(xiàn)了這個(gè)BUG,在2.2和2.5版本中已經(jīng)修復(fù)了。
然后更新zabbix agent的版本。
?
來(lái)源:http://www.icode9.com/content-2-166751.html聯(lián)系客服