1.现象 调用某个服务的登录回调服务,有接入进来查询日志,查询关联id下一级服务没有日志
2.麻烦运维提供相关日志以及调用相关接口,telnet发现有时候调用成功有时候调用失败,并且在错误日志中发现OOM错误日志
3.使用jstack命令打印出进程信息
jstack [pid] > 文件名.log
4.使用jmap命令打印出dump信息
jmap -dump:file=文件名.dump [pid]
5.日志打印出来后通过重启先让问题解决
6.查看两个文件是否是线程过多导致,
https://fastthread.io/
上面网站可以辅助分析jstack打印文件查看RUNNABLE状态的线程时候发现redisson前缀的日志很多
MAT解析
安装MAT:
https://www.eclipse.org/mat/previousReleases.php
通过Problem Suspect1
NioEndPoint tomcat线程池太小导致线程堆积
通过Total 可以看出堆空间很小和启动配置不相符 -Xms1024m -Xmx1024m
java -javaagent:/data/jmx_prometheus_javaagent-0.16.1.jar=8488:/data/prometheus-jmx-config.yaml -jar /data/application/face-id.jar -Djava.security.egd=file:/dev/./urandom -Duser.timezone=Asia/Shanghai -Dfile.encoding=UTF-8 -Xms1024m -Xmx1024m --spring.profiles.active=k8s-prod -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:ActiveProcessorCount=2
/bin/bash entrypoint.sh -Xms1024m -Xmx1024m --spring.profiles.active=k8s-prod -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:ActiveProcessorCount=2
java -jar jar文件,当-Xms 在jar文件后面的时候不起效
通过Problem Suspect2
查询资料Redisson OOM 发现低版本(小于3.12.5版本) 可能会导致OOM
https://www.jianshu.com/p/a89dbefb8f74