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

环境描述
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. 模块——Getopt::Long接收客户命令行参数和Smart::Comments输出获得的命令行参数内容

     我们在linux常常用到一个程序需要加入参数,现在了解一下 perl 中的有关控制参数的模块 Getopt::Long ,比直接使用 @ARGV 的数组强大多了.我想大家知道在 Linux 中有的参 ...

  2. Codefoces 277 E. Binary Tree on Plane

    题目链接:http://codeforces.com/problemset/problem/277/E 参考了这篇题解:http://blog.csdn.net/Sakai_Masato/articl ...

  3. maven 如何使用

    以前没有用过maven管理过项目的依赖,最后使用上了maven,发现通过不能方式建立出来的web应用程序目录结构基本都不一样,既然每次都要到网上搜索如何建立maven管理的Web应用程序,不如自己找百 ...

  4. GO | KEGG的注释是怎么来的?

    但凡是做过基因表达数据分析的(芯片.RNA-seq,scRNA-seq),肯定是跑过基因集功能注释和通路富集的,因为它是研究未知基因集的利器. 但跑过之后老板肯定会给反馈,通常得到的注释都是没有太多意 ...

  5. selenium选择器_css属性选择器

    搜索 <button class="btn-search tb-bg" type="submit" data-spm-click="gostr= ...

  6. .net代码修改webconfig

    /// <summary> /// 写入web.config /// </summary> /// <param name="item">app ...

  7. Lua 语言基本语法

    第一个 Lua 程序 .交互式编程 Lua 提供了交互式编程模式.我们可以在命令行中输入程序并立即查看效果. Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用 .脚本式编程 我们可 ...

  8. webpack配置接口路径

    比如在webpack.config.js中的plugins中加入 new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify(' ...

  9. K2在Gartner 2017 iBPMS魔力象限报告中上升为“挑战者”

    在Gartner近期发布的iBPMS MQ报告中,Gartner分析了入选的19家厂商,将K2列为智能业务流程管理系统(iBPMS)MQ(魔力象限)的“挑战者”.从下列图中可以看出,相比上期,K2从魔 ...

  10. 包的作用域(public、private)

    包的作用域一共有三种情况 修饰符public:标记为public的部分可以被任意的类使用: 修饰符private:标记为private的部分只能被定义他们的类使用: 没有指定修饰符的部分:这部分(类. ...