用 CentOS 做 API 接口服务器供其他终端调用时,并发量高会报错:java.io.IOException: Too many open files。

其原因是在 Linux 下默认的Socket最大连接数为 1024(可以通过 ulimit -n 查看)。

于是开始修改Linux的配置文件来增加连接数:

在/etc/rc.local 后增加一行
ulimit -SHn 65535
在/etc/profile 后增加一行 
ulimit -SHn 65535
在/etc/security/limits.conf最后加入两行
* soft nofile 65535
* hard nofile 65535
用'*'号表示修改所有用户的限制;

重启 Linux 服务器,通过 ulimit -a 查看可以发现

用 CentOS 做 API 接口服务器供其他终端调用时,并发量高会报错:java.io.IOException: Too many open files。其原因是在 Linux 下默认的Socket最大连接数为 1024(可以通过ulimit -n查看)。于是开始修改Linux的配置文件来增加连接数:在/etc/rc.local 后增加一行ulimit -SHn 65... linux系统中对进程可以调用的文件句柄数进行了限制,超过限制进程将无法获取新的句柄,不能打开新的文件或者网络套接字,就会报错。 通过命令: lsof -p 进程id|wc -l :查询当前进程 打开文件 的数量 发现这个数量是在不断增加的,通过 lsof -p 进程id:查询当前进程打开的具体文件 TYPE类型为FIFO的文件在不断增 ERROR Error while accepting connect io n (kafka.network.Acceptor) java . io . IOException : 打开的文件 过多 lsof -p kafka-pid 看有上万个文件句柄 使用自写的删除topic工具,删除一部分历史topic后,重启kafka,问题 解决 。之后继续删除topic,文件句柄降到2000。 1.运维规范:kafka历史topic定时清理,可配 [2020-08-06 18:49:52,782] ERROR Error while accepting connect io n (kafka.network.Acceptor) java .lang.ArithmeticExcept io n: / by zero at kafka.network.Acceptor.run(SocketServer.scala:354) at java .lang.Thread.run(Thread. java :748) [2020-08-06 18:49:52,7. 2.同一个节点距离上次gc时间间隔为普遍为13~15天。 然后紧急把剩余未gc的一个节点内存dump下来,使用mat工具打开发现,com.mysql.jdbc.NonRegisteringDriver 对象占了堆内存的大部分空间。 查看对象数量,发现com.mysql.jdbc.NonRegisteringDr