线上jvm假死问题排查

1.线上告警接口超时

看接口是用户服务,查看nacos服务实例,发现有一个节点已经下线了

3.找到对应节点所在服务器,jps -l 命令发现用户服务还在,初步判断是假死

4.使用 jstat -gc 进程id 1000 每秒打印gc情况,发现频繁full gc,平均3秒一次,然后每次gc时间大概3~4秒

5.jmap -heap 进程id发现新生代和老年代都满了,紧急生成堆转储 jmap -dump:format=b,file=heapdump.hprof ,然后重启服务

6.使用MAT分析堆栈信息,排查内存泄漏的问题,看到分析是mysql查询时有占用了1.1G左右,jvm才配置了2G,当时想到可能是无条件查询导致查询了大量数据

7.继续排查看到线程的堆栈指向的业务代码是查询用户,看了下相关逻辑是有传手机号码查询用户的

8.由于是查询数据库占用了大量堆内存,所以判断当时查询肯定是很慢的,所以看了阿里云数据库的慢sql记录,果然发现查询返回了150多万数据

9.看了具体SQL是手机号码传1,使用的是模糊匹配,导致所有用户都查出来了

复制代码
select * from user where mobile LIKE '%1%'

10.调整代码为不使用模糊搜索,解决问题

复制代码
select * from user where mobile = '1'
相关推荐
boy快快长大4 小时前
【JVM】线上JVM堆内存报警,占用超90%
jvm
鼠鼠我捏,要死了捏4 小时前
深度解析JVM GC调优实践指南
java·jvm·gc
IT·陈寒4 小时前
当 JVM 开始“内卷”:一次性能优化引发的 GC 战争
java·jvm·性能优化
No8g攻城狮7 小时前
【异常解决】使用DateUtil.isSameDay()方法判断秒级时间戳是否属于同一天踩过的坑
java·jvm·spring boot·java-ee·springboot
天若有情6738 小时前
TFword:从字符到片段,解析一个“小而精”的字符串处理工具的设计智慧
java·jvm·算法
那我掉的头发算什么8 小时前
【数据结构】反射、枚举、lambda表达式以及补充知识
java·jvm·数据结构·intellij idea
沐浴露z1 天前
【JVM】详解 Class类文件的结构
java·jvm·class
爬虫程序猿1 天前
把“天猫”装进 JVM:Java 关键词商品爬虫从 0 到 1(含完整可运行代码)
java·jvm·爬虫
stillaliveQEJ1 天前
【JVM】基础概念之为什么要使用JVM
jvm
维诺菌1 天前
k8s java应用pod内存占用过高问题排查
java·jvm·云原生·容器·性能优化·kubernetes