【此文抄自同事的邮件,当作笔记学习】

环境描述
Mysql 5.5.21
OS centos 5.8
zabbix agent 2.4.3

情况描述
现象数据库处于运行状态,但是无法创建新的连接,监控报警数据库无法连接,连接不上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 open files in system

Mysqld进程打开的文件句柄数:
lsof(list open files)是一个列出当前系统打开文件的工具。

[root@db11149 ~]# lsof -p  | wc -l

没有超过MySQL设置的限值。

查看操作系统的日志:

localhost kernel: VFS: file-max limit  reached
localhostnrpe[]: Network server accept failure (: Too many open files in system)

日志显示操作系统的连接数已经达到了最大值65535了,但是服务器上运行的业务应用只有数据库服务,而mysql打开的文件句柄数不到5000个。因此推断是有哪个正在运行的服务打开的句柄数过多导致的。

显示shell中的资源限制:
ulimit命令修改的数值只对当前登录用户的目前使用环境有效(只对当前会话有效),系统重启或者用户退出后就会失效.

[root@db11149 ~]# ulimit -a
core file size (blocks, -c)
dataseg size (kbytes, -d) unlimited
scheduling priority (-e)
file size (blocks, -f) unlimited
pending signals (-i)
max locked memory (kbytes, -l)
max memory size (kbytes, -m) unlimited
open files (-n)
pipe size ( bytes, -p)
POSIX message queues (bytes, -q)
real-time priority (-r)
stack size (kbytes, -s)
cpu time (seconds, -t) unlimited
max user processes (-u)
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

对所有会话永久生效,修改limits.conf:

[root@db11149 ~]# cat /etc/security/limits.conf | tail -
# End of file
* soft nofile
* hard nofile

这个当中的硬限制是实际的限制,而软限制,是warnning限制,只会做出warning.其实ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变.

查看目前运行的所有进程打开的句柄数:

# fori in `ps -ef| egrep -v 'UID PID PPID' | awk '{print $2}'` ; do echo "pid=$i, open_files=`lsof -p $i | wc -l`" >> ;done
pid=, open_files=
pid=, open_files=
pid=, open_files=
pid=, open_files=
pid=, open_files=
pid=, open_files=
pid=, open_files=
pid=, open_files=
pid=, open_files=
pid=, open_files= #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

查看打开句柄数最多的进程:

确定是zabbix进程打开的

[root@db11149 ~]# ps -ef | grep zabbix
root Jul27 ? :: zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
root Jul27 ? :: zabbix_agentd: collector [idle sec]
root Jul27 ? :: zabbix_agentd: listener # [waiting for connection]
root Jul27 ? :: zabbix_agentd: listener # [waiting for connection]
root Jul27 ? :: zabbix_agentd: listener # [waiting for connection]
root Jul27 ? :: zabbix_agentd: listener # [waiting for connection]
root Jul27 ? :: zabbix_agentd: listener # [waiting for connection]
root Jul27 ? :: zabbix_agentd: listener # [waiting for connection]
root Jul27 ? :: zabbix_agentd: listener # [waiting for connection]
root Jul27 ? :: zabbix_agentd: listener # [waiting for connection]

产生原因

重启zabbix agent后,打开的文件被释放。

https://support.zabbix.com/browse/ZBX-9251

由此确定是由于zabbix agent的异常导致的。

如何处理
查找zabbix的资料后确定是zabbix agent的BUG,目前在zabbix agent 2.4.3和2.4.4版本中发现了这个BUG,在2.2和2.5版本中已经修复了。
然后更新zabbix agent的版本。

MySQL Error--打开过多文件导致数据库无法连接的更多相关文章

  1. mysql逗逼的.frm文件恢复数据库

    mysql数据库用.frm文件进行恢复. 背景:mac系统  .frm文件 (1)打开终端:输入cd /usr/local  回车. (2)输入 ls 回车. 这时候 打开finder ---> ...

  2. mysql导入导出sql文件(包括数据库和数据表的操作)

    废话不多说直接开始. 在windows命令行下登录mysql,创建一个test_01数据库,创建一个user表,并插入一条数据,如下 一.导出数据库test_01 1.退出数据库,在命令行中输入 my ...

  3. ShellExecuteEX打开iqy文件导致excel hang的原因分析

    1. 问题 当在console中调用API ShellExecuteEx打开"test.iqy"文件时,发现excel会hang住,console退出后excel才会响应,但直接双 ...

  4. Java分别与MySQL、Oracle、SQL Server数据库建立连接

    1.与MySQL连接 jar包下载地址: Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动(MySQL的jar包) String u ...

  5. Tomcat9.0.13 Bug引发的java.io.IOException:(打开的文件过多 Too many open files)导致服务假死

    问题背景: 笔者所在的项目组最近把生产环境Tomcat迁移到Linux,算是顺利运行了一段时间,最近一个低概率密度的(too many open files)问题导致服务假死并停止响应客户端客户端请求 ...

  6. MySQL Error Log 文件丢失导致The server quit without updating PID file启动失败的场景

    今天在做mysql sniff测试的时候,中间重启MySQL实例的过程中,出现了"The server quit without updating PID file"这个经典的错误 ...

  7. 网络编程中TCP基础巩固以及Linux打开的文件过多文件句柄的总结

    1.TCP连接(短链接和长连接) 什么是TCP连接?TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. 当网络通信 ...

  8. 【原创】大叔问题定位分享(5)Kafka客户端报错SocketException: Too many open files 打开的文件过多

    kafka0.8.1 一 问题 10月22号应用系统忽然报错: [2014/12/22 11:52:32.738]java.net.SocketException: 打开的文件过多 [2014/12/ ...

  9. mysql 系统用户最大文件打开数限制

    纸上得来终觉浅,绝知此事多宕机...记录一下自己很蠢的一次故障处理过程. 上周的时候,一个刚上线的系统又开始反映登不上了,因为最近这个系统也老是出现这个问题,开发也一直在找问题中,所以也没太在意.于是 ...

随机推荐

  1. xss攻击(转)

    什么是 XSS Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行.利用这些恶意脚本,攻击者可获取用 ...

  2. Java ceil() 方法

    语法: double ceil(double d) double ceil(float f) 参数 double 或 float 的原生数据类型. 返回值 返回 double 类型,返回值大于或等于给 ...

  3. C++句柄解析

    C++句柄类解析 引题:在C++中,对于运行时类型识别问题.在程序中使用引用或者指针在运行时动态识别对象类型.然而使用指针或者引用却增加了用户负担(在继承体系中,没有明确的基类到派生类的转换,必须用户 ...

  4. html5(一)

    HTML5 三个基本特色:结构.样式.功能. <!DOCTYPE html ><html lang="en"><head> <meta c ...

  5. LoadRunner遇到的错误及解决方法

    1.返回的报文太长: intweb_set_max_html_param_len(const char * length); intweb_set_max_html_param_len(") ...

  6. oracle数据库连接 ORA-12638:身份证明检索失败

    连数据库的时候突然报了一个这个 查找各种办法,发现自己从10g换成了11g,不过这个没有什么关系,跟oracle的安全设置有关系, 首先从开始菜单找到Net Manager 打开,选择本地,概要文件, ...

  7. Python之路,Day9 - 异步IO\数据库\队列\缓存

    https://www.cnblogs.com/alex3714/articles/5248247.html http://www.cnblogs.com/wupeiqi/articles/51327 ...

  8. 用setTimeout模拟setInterval的功能

    偶然看到这个题目,稍微写了下,做个笔记,不足之处请指正 //用setTimeout模仿setInterval var MyInterVal = function(fun,tm){ if(this == ...

  9. [SCOI2007]排列

    看了看数据范围...我艹...爆搜可过? 等等,冷静,让我看一眼题解...我艹...真可过... emm...再冷静分析...emm...还是写状压吧... 这题主要的思路就是 f[i][j] 表示 ...

  10. OO课程中IDEA相关插件的使用

    写在前面   由于OO课程博客作业的需要分析代码的复杂度并绘制UML图,但是课件上推荐的分析工具(http://metrics.sourceforge.net )经过自己几个小时的折腾还是没有安装成功 ...