- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
1.进阿里云控制台查看故障机器近期的各项指标,但是发现故障机器的指标有重要的几项丢失,内存使用率,cpu使用率,系统负载均不显示 2.控制台看不了只好进服务器内查看各指标 free -m 查看内存,无异常 3.提交阿里工单,授权阿里工程师帮忙修复控制台显示问题,怀疑这个问题对业务有影响 4.控制台修复后掉线问题 依然存在 。
能感觉到执行命令很流畅,所以感觉不是这个原因, top 查看后很正常 。
虽然概率很小,但是看一下, du -sh * 发现磁盘容量还能用到公司倒闭 。
telnet
, mtr -n *.*.*.*
, netstat -nat |grep "TIME_WAIT" | wc -l
这些命令也只能看个大概. echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
修改内核参数,开启TIME_WAIT socket复用能力,提升实例的网络发送请求性能. 后来仔细想想,这个怀疑对象是不是有点离谱了?因为 部署脚本 都是同一个,而且 负载均衡 也是一样的,但其他机器的这个服务都好好的. 。
1.调大每个微服务的内存占用 。
2.添加堆栈打印 。
3.等待一段时间后,异常依然存在,并且,没有堆栈打印???因为进程好好的并没退出.
4.google搜索nacos服务掉线,找到一篇看起来极其靠谱的文章.
5.上文提到我使用的springcloud版本,恰好这个版本的 nacos-client 版本就是 1.4.1 ,于是立马测试升级 。
6.观察几天后,发现 问题依旧 ,只能将探查方向继续转回 微服务本身 . 。
7.使用 arthas 进行勘测各项指标,发现所有正常的服务各指标均 正常 . 。
8.想到服务掉线大概率是因为 心跳包丢失 ,怀疑是 心跳线程因为某些原因被杀死 了. 。
9.翻看 nacos-client 源码,找到 心跳函数 (nacos2.x不是这个),使用 arthas监听 心跳包,尝试能找到心跳丢失的证据,贴上当时的记录 。
10.当异常再次发生...... arthas监听卡死 ,无任何记录和响应........ 。
11.无奈更换思路,写一个 监听服务掉线 的程序,期望可以在工作时间内及时获取到异常 。
12.终于在工作时间捕获到异常,第一时间进入服务器内查看情况.
13.确认服务器基础项没问题后,使用arthas查看服务进程堆栈情况,但是 arthas无法进入进程 !!.
14.用jstat查看 GC情况 ,显示很正常 。
15.用 jmap/jstack 输出堆栈 jstack -l 25944 >heap.txt ,但是提示无法进入进程,无奈使用添加-F(这个参数的堆栈少了很多信息), jstack -F -l 25944 >heap.txt 。
16.查看堆栈文件,上万行记录,眼都看花了,但是没有死锁也没有发现异常 。
17.此时发现监听程序提示 服务上线 了???!!!检查后发现确实掉线的几个微服务 自动恢复 了,心想这就难排查了. 。
18.尝试 复现BUG ,此时离第一次案发已经过去一周多,必须尽快处理好这个BUG,否则可能得被迫离职了... 。
19.当第二次发生异常的时候,使用同 样的方式 ,arthas无法进入->...->jstack输出堆栈,奇迹发生了, 服务又恢复正常了 。
20. 思考/猜测:因为jvm死了(假死),所以导致进程中的一切内容,包括心跳线程,日志等,都hold住. 。
20.Google搜索关键词 jvm停止(假死)排查 ,终于找到一个 极其靠谱 的回答 。
21.连忙查看对比使用的几个机器内核版本号 uname -r 。
22.那个低版本的就是故障机器,确认相关信息后,联系阿里云 提交工单 。
23.升级完内核并重启后机器后,观察两天至今,这个问题不存在了,谁能想到这个问题居然是因为Linux内核的BUG引起的,不得不佩服第一个发现这个BUG的大佬 。
这个问题折磨了一周多,每日如鲠在喉!调试过程也是苦乐参半,乐的是突然有了调试思路,苦的是思路是一条死胡同,还好最终结果是满意的. 作为一名程序员,还是要时刻保持一颗探索的心,学海无涯.
2023-02-03 记于深圳 。
最后此篇关于Java微服务随机掉线排查思路的文章就讲到这里了,如果你想了解更多关于Java微服务随机掉线排查思路的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 Microsoft Azure 中创建了一个新的 Windows Server 2012 R2 虚拟机。该虚拟机上安装的其他内容之一是 IIS 中托管的网站,但我似乎无法让该服务器上的 IIS
引用问题:: EJB weblogic.ejb20.cache.CacheFullException 我试图了解 EJB 容器如何管理实体 bean,我知道 EJBHome 对象上的 create/f
我刚刚继承了一个node.js 项目,我怀疑 Node 项目所需的一些原始样板尚未完成。这也是我第一次使用node.js。 无论如何,当我运行 node app.js 时,正确的端口会启动,但应用程序
我需要查看在 Azure 应用服务中运行的 .Net 应用程序的日志。 我在应用程序源代码中看到了许多我希望在 Application Insights 中看到的日志,但是,转到 Applicatio
我一直在使用 git 将我的本地代码推送到服务器。我有一个名为“origin”的本地 Remote ,我在服务器上有一个名为“github”的 Remote 。通常,提交后,我使用“git push
我用印地 TidHTTPServer和 TidServerIOHandlerSSLOpenSSL在我的服务器组件上处理命令和控制的 HTTPS 请求。 在某些情况下 - 服务器上没有任何记录的错误 -
更新:如果弄清楚了这一点,但我仍然对解释感兴趣。问题是我在运行下面的代码的同时也从 SqlWorkbenchJ 连接到我的 Redshift 集群(两者都在同一台笔记本电脑上运行)。第二次我断开 Sq
使用 CloudFormation 在 AWS 中创建带有附加 AutoScalingPolicy 的 AutoScalingGroup 时,您可能会收到错误 the load balancer do
我是一名优秀的程序员,十分优秀!