jar服务导致cpu飙升问题-解决
问题
我们服务器是8核cpu,64G内存按照正常道理,跑几个jar包服务不会造成 cpu飙升300%,
查看问题
使用 top查看,或者HTOP
查看容器
我们是容器里面跑的jar包服务
docker ps
找到运行的java服务
进入到java服务容器里面
docker exec -it xxxx /bin/bash
进入到容器里面使用top命令查看
java服务堆栈日志查看-jstack 命令
1、死循环导致cpu飙高
死循环的例子:https://blog.csdn.net/goldenfish1919/article/details/8755378
步骤:查找进程-》查找线程-》分析threadDump日志-》找出问题代码
生成进程下所有线程的栈日志
jstack 1721 > 1712.txt
查看进程下哪些线程占用了高的cpu
top -p 1712 -H
将十进制pid转换为十六进制的pid
printf %x 8247
网上在线转换十六进制
我这边解决的方法
查看pid
查看进程下哪些线程占用了高的cpu
top -p 7 -H
将十进制pid转换为十六进制的pid
java服务查看日志
动态查看30行日志
jstack 7 | grep 23 -A 30
追加成日志
jstack 7 >> bosCenterService.logs #后面名字自定义
我这边的处理,我是运维改不动他们的代码,我把对应的java服务日志,以上截图给到开发人员,然后把容器里面的java日志,拷贝到宿主机,给到开发,最后由开发处理
docker容器里面拷文件到宿主机
1、从容器里面拷文件到宿主机?
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
2、从宿主机拷文件到容器里面
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
l
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径