记录——线上项目运行一段时间后不能正常使用问题解决

记录一次线上项目运行一段时间后不能正常使用问题解决

一.问题描述

一个风和日丽的周末午后,突然有种不详的感觉,公司群消息,突然来了一句“系统登录不进去”。一阵冷汗,不能影响客户使用,立马开机远程办公电脑,通过工具进入到后台主机查看日志,发现不停的打印too many open files,有一种似曾相识的感觉,在此之前,处理过一次,有点驾轻就熟了,首先还是秉着不影响客户使用的原则,重启项目,日志下载下来后面再来研究。

二.问题分析

1. 首先咱们得清楚一点,报错的原因:linux系统中对进程可以调用的文件句柄数进行了限制,超过限制进程将无法获取新的句柄,不能打开新的文件或者网络套接字,就会报错。

2. 咱可以先查询下我们的主机设置的限制是多大,是否有必要对其进行调大:
(centos 6.5 查看/etc/security/limits.d/90-nproc.conf、
centos 7.0 查看/etc/security/limits.d/20-nproc.conf)
在这里插入图片描述
3. 句柄数的限制4096能满足开销了才是,为什么还会超过呢?带着这样的疑问,我们继续分析,通过lsof -p命令查看进程的句柄数,还有类型,发现这次并不是因为FIFO类型的文件在增加,而是IPv6类型的在不断增加。

在这里插入图片描述
4. 通过对这些ip的分析,在后端的日志中发现,这个ip就是使用系统的客户端ip,在后端的日志中发现,用户并没有做什么其他操作,并且后端也并没有涉及到流未关闭的情况,那么只能够自己去系统中操作一番,确认是哪个页面有什么特殊操作导致的,带着这个疑问,说干就干。

5. 通过努力,最终发觉,用户在直接关闭浏览器、或者直接退出登录操作后,服务端都会出现TCP状态为close_wait的句柄数据,沉思片刻后,前段时间同事有在做消息推送的需求,后端通过SseEmitter进行消息推送,会不会是这个问题导致的呢?后面定位前端代码,发觉果真如此,在直接关闭浏览器、或者直接退出登录操作都没有关闭流操作
至此问题,终于定位出来,后续就把问题告诉同事,让前端进行没有感情的修复操作。

三.建议

咱们在写代码的时候,还是要谨慎细心,避免一些不必要的问题出现,让人冷汗直冒。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值