springboot服务假死排查
问题:某个服务运行几天后不可访问,有时3天,有时一周多,重启服务就正常了!
接下来是心酸的几周排查,每次重启完只能烧香求佛祖保佑运行多几天,哈哈哈!
1、排查了最近一个版本代码,没问题!
2、排查日志,这个还真比较麻烦,看了error,info日志,出现问题前后的日志,不好意思,貌似没问题,开始人生怀疑!
有点用的是,发现日志没有打印了,但是进程还在的。有次用jps命令看还在,有次只能用ps看还在,那可以认定是服务假死了。坑爹的是nacos上看服务是在线的!
3、网上找一片比较全的排查思路,推荐给大家
看了cup、内存、网络、磁盘,都正常。期间看出问题前CPU突然飙升异常,但是还在够用范围。
4、看JVM线程是否死锁(jstack)、内存溢出(jstat、jmap),没问题!
期间是调大了堆内存,但是也只是撑时间久一点而已。
-Xms: 设置初始化堆内存大小; -Xmx: 设置最大可分配堆内存大小;
5、ulimit资源限制,发现是默认是4096,而最大值可以调整到65535,不是一个数量级别的啊!
修改此参数,记得貌似调整到了1万多还是改到最大值,目前运行了几个月了,没复现了,验证了是资源限制的锅。小声BB,其实是运维配置服务器时就应该配置好的。
6、还排查了Nginx的连接数大小、时长配置,没问题!
至此,困扰了几周的问题明确的说解决了。