Linux too many open files

Linux too many open files

后端往浏览器推送设备告警事件,使用server sent event(服务器向浏览器发生消息),

代码是从网上copy的,发生程序卡死没反应,浏览器一直在加载转圈圈。登录服务器查看日志,一直在报"too many open files",

解决方法从网上找的,增加程序允许打开的文件数,没卵用,多存活一段时间罢了。

ulimit -a

cat /proc/sys/fs/file-max

cat /proc/进程PID/limit

# 查看某一进程的打开文件数量
lsof -p 进程PID | wc -l
例:lsof -p 1234 | wc -l

在这里插入图片描述

在这里插入图片描述

TCP localhost:webcache->localhost:46910 (CLOSE_WAIT)

服务器出现大量TCP处于CLOSE_WAIT状态,而且在一直缓慢增加,达到程序最大打开文件数后,程序会卡死无反应

在这里插入图片描述

服务器存在大量sock句柄,而且在一直缓慢增加,达到程序最大打开文件数后,程序会卡死无反应

在这里插入图片描述

总结原因:检查了两天发现是server sent event(服务器向浏览器发生消息),按照网上教程写的(copy),超时设置成不过期,导致一直存在。nginx又设置成10分钟过期,变成10分钟永久+1条了。

经过测试程序在打开文件数达到1W条左右时就卡死了,打开网站的人多了很快就没反应了。

// 设置超时时间,0表示不过期。默认30秒,超过时间未完成会抛出异常:AsyncRequestTimeoutException
SseEmitter sseEmitter = new SseEmitter(0L);

解决方法:将SseEmitter设置成超过10分钟主动断开(时间自己定,就是要主动关了,让它重新连接),然后客户端会重新发起连接。这样就基本连接的有几个人就只有几条sse连接了,不会再出现异常增加没关掉的情况。

SseEmitter sseEmitter = new SseEmitter(600000L);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值