解决部署在k8s上spring cloud gateway 无故假死的情况
解决部署在k8s上spring cloud gateway 无故假死的情况
线上发现gateway 会无故假死,测试环境使用jmeter 几分钟后,gateway 也会复现假死的情况
开始排查
获取容器列表
kubectl get pod -o wide 

进入gateway
kubectl exec -it gateway-7dbc5d8d6d-wtbs5 -- bash

将jdk拷贝进容器
kubectl cp /home/jdk8u402-b06 gateway-6896d59846-6r5sl:/home/

生成dump文件_dump文件生成和分析查看
查看进程id(容器没有ps 的情况)
ls -l /proc/*/exe

cat /proc/7/exe

制作dump
jstack
打印线程的栈信息,制作线程Dump。
jstack <进程ID> >> <输出文件>
jstack 2316 >> c:\thread.txt
Linux下使用Kill命令制作线程Dump,输出线程Dump到目标Java进程的标准输出
kill -quit <进程ID>
kill -3 <进程ID>
chmod +x jstack
./jstack 7 >> /home/thread.txt

jmap
使用jmap命令制作堆Dump
打印存活的对象大小和个数
jmap -histo:live 
jmap -histo:live 64421 > live.log
chmod +x jmap
./jmap -dump:file=gateway.hprof,format=b 7
./jmap -histo:live 7 > /home/live.log

二进制方式存储堆文件
jmap -dump:format=b,file=文件名.hprof <进程ID>
以二进制方式生成文件/opt/wkt/wkt1.hprof,进程PID=64421
jmap -dump:format=b,file=/opt/wkt/wkt1.hprof 64421
./jmap -dump:file=gateway.hprof,format=b 7

将dump拷贝出来
kubectl cp gateway-6896d59846-6r5sl:/home/thread.txt ./thread.txt
kubectl cp gateway-6896d59846-6r5sl:/home/live.log ./live.log
kubectl cp gateway-6896d59846-6r5sl:/home/jdk8u402-b06/bin/gateway.hprof ./gateway.hprof
gzip gateway.hprof
将文件拷贝到本地电脑
问题分析



http-nio 线程有200个
打开 visualvm

点击 load 加载 gateway.hprof 文件



可能是发现问题, 搜索 java.lang.Thread.State: WAITING (parking)
https://www.jianshu.com/p/c4a75ca20abe

看本地代码



找下原因
https://www.alibabacloud.com/help/en/redis/use-cases/jedispool-optimization

默认是永不超时
结论
配置后,设置了超时时间,不至于所有线程都等待,而耗光app的资源
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号