一、该问题的重现步骤是什么?
1. 后台服务运行一段时间后,就停住不动了不再打印新的日志了,但是服务进程没有停止,报错信息如下
2.
3.
二、你期待的结果是什么?实际看到的又是什么?
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
因为线上环境问题
linux 底层会限制每个进程或用户打开的文件句柄数(socket也被视为文件),并且默认值非常小 ,所以 被使用完就会报这个
查看限制文件句柄数大小 fs.file-max
sudo /sbin/sysctl fs.file-max
检查进程打开的文件句柄数
jps
3289 ympark2021.jar
lsof -p 3289 | wc -l
817
如果不确定哪个进程占用了的文件句柄数 可以运行以下命令,该命令将返回每个进程的文件句柄数
lsof | awk '{printt $2}' | sort | uniq -c | sort -n
如果进程句柄的数量大于fs.file-max怎么办?可以按如下方式增加 fs.file-max的值:
sudo /sbin/sysctl -w fs.file-max=<值>
还需要检查的就是socket(套接字)文件的大小
netstat -tulpn | grep pid
从 netstat 输出中 看到少量的TIME_WAIT套接字 这是正常的。
如果你检测到成百上千个活动的 TIME WAIT 套接字,你就应该当心了,如果发生这种情况,
应该做一些内核网络参数配置优化 或者 减少客户端的 TCP 连接
检查内核网络参数 /etc/sysctl.conf文件:
cat /etc/sysctl.conf
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
# see details in https://help.aliyun.com/knowledge_detail/39428.html
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
# see details in https://help.aliyun.com/knowledge_detail/41334.html
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
kernel.sysrq=1
vm.swappiness = 0
内核参数设置和说明请参考阿里云的 这个写的专业的多
https://help.aliyun.com/knowledge_detail/41334.html
2. 因为程序问题
检查你的程序是否有没有正确关闭连接,socket / io / 数据库连接 等等
扫一扫访问 Blade技术社区 移动端