当前位置: 首页 > news >正文

Cpu100%问题处理(包括-线上docker服务)

🍓 简介:java系列技术分享(👉持续更新中…🔥)
🍓 初衷:一起学习、一起进步、坚持不懈
🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏
🍓 希望这篇文章对你有所帮助,欢迎点赞 👍 收藏 ⭐留言 📝

🍓 更多文章请点击
在这里插入图片描述在这里插入图片描述

文章目录

  • 一 、Linux中jar部署CPU问题查看
    • 1.1 查看CPU使用情况
    • 1.2 查看线程级别的CPU使用情况
    • 1.3 将10进制线程ID转为16进制
    • 1.4 使用jstack获取堆栈信息
      • 1.4.1 直接查看
      • 1.4.2 下载查看
  • 二 、Docker 中部署的java程序CPU查看
    • 2.1 思路分析
    • 2.2 首先查看CPU实时占用情况
      • 2.2.1 top 查看cpu占用率
      • 2.2.2 docker stats查看Docker容器的cpu占用率
    • 2.3 使用 docker inspect 命令(获取指定容器的详细信息)
    • 2.4 打印进程下所有线程的占用情况
    • 2.5 找到主进程PID问题后,进入对应java容器
    • 2.6 抓取对应线程堆栈信息
      • 2.6.1 直接查看
      • 2.6.2 下载查看

一 、Linux中jar部署CPU问题查看

1.1 查看CPU使用情况

top会按CPU使用率排序,帮助快速定位问题进程

top

在这里插入图片描述

在这里插入图片描述

1.2 查看线程级别的CPU使用情况

top -Hp <PID> -H 选项显示线程信息 -p 指定进程ID

top -Hp <PID>
例:
top -Hp 112285

类似这种,具体线上问题,根据自己项目进行排查

在这里插入图片描述

1.3 将10进制线程ID转为16进制

printf '0x%x\n' <线程id>

1.4 使用jstack获取堆栈信息

1.4.1 直接查看

jstack 进程号 | grep nid=0x+16进制线程号 -A 100

1.4.2 下载查看

那么咱们就可以直接通过以下命令打印线程堆栈

jstack <进程id> >> jstack_out.txt
例如:
jstack 1 >> jstack_out.txt
jstack <进程id> >>jstack_out.txt

二 、Docker 中部署的java程序CPU查看

2.1 思路分析

主要思路就是定位到是哪个进程导致的cpu飙升,然后通过进程号追踪具体的线程。docker命令是为了查出具体哪个容器导致的问题,然后进入容器内部调用jvm相关命令导出堆栈信息。在堆栈信息中查找之前获得的线程相关信息,就能定位到具体的问题了

2.2 首先查看CPU实时占用情况

2.2.1 top 查看cpu占用率

会按CPU使用率排序,找到cpu最高的进程id是否为java容器进程PID

top

2.2.2 docker stats查看Docker容器的cpu占用率

docker stats 
docker stats <容器id>

2.3 使用 docker inspect 命令(获取指定容器的详细信息)

docker inspect <容器id>

在这里插入图片描述找到容器中CPU占用率高的PID是否为top中的进程PID

2.4 打印进程下所有线程的占用情况

查找进程PID占用率高的线程

top -Hp 128720

CPU占用率最高的线程编号为(十进制),然后转化为16进制

printf '0x%x\n' <线程id>

查看cpu那一列,找到异常数据为100%的那一行,并记录

2.5 找到主进程PID问题后,进入对应java容器

进入cpu占用高的docker容器查看容器中具体进程cpu占用率

docker exec -it <container_id> /bin/bash

在容器中使用 top命令或者 jps 命令查看CPU占用情况
我的容器内部没有top命令,这里使用jps进行查看进程情况
在这里插入图片描述

1就是指的当前运行java服务的进程PID。

2.6 抓取对应线程堆栈信息

2.6.1 直接查看

jstack 进程号 | grep nid=0x+16进制线程号 -A 100

2.6.2 下载查看

那么咱们就可以直接通过以下命令打印线程堆栈

jstack <进程id> >> jstack_out.txt
例如:
jstack 1 >> jstack_out.txt

需要下载的话,可以使用 docker cp到宿主机上

docker cp <container_id>:/path/in/container /path/on/host

在这里插入图片描述
在这里插入图片描述

把以上jstack_out.txt下载到本地,通过文本工具打开,结合【第2.4步】获取的线程信息,结果定位到具体的线程堆栈。查找代码问题自行修改

文章持续更新…

在这里插入图片描述在这里插入图片描述

相关文章:

  • 从17款IT项目管理系统中挑选合适的工具
  • 【练习】【二叉树】力扣热题100 102. 二叉树的层序遍历
  • PHP之Cookie和Session
  • Java 大视界 -- Java 大数据在智慧交通信号灯智能控制中的应用(116)
  • 为解决局域网IP、DNS切换的Windows BAT脚本
  • jupyter notebook更改文件存储路径
  • 多线程-锁升级和对象的内存布局
  • [自动驾驶-传感器融合] 多激光雷达的外参标定
  • 面试基础--MySQL SQL 优化深度解析
  • 新能源汽车工厂如何通过安灯系统实现精益生产
  • [场景题]如何实现购物车
  • 给没有登录认证的web应用添加登录认证(openresty lua实现)
  • PPT小黑第26套
  • Android中的触摸事件是如何传递和处理的
  • 服务器数据恢复—raid5阵列中硬盘掉线导致上层应用不可用的数据恢复案例
  • Linux 文件和目录权限管理详解
  • JavaScript数据结构-Set的使用
  • 宇树科技嵌入式面试题及参考答案(春晚机器人的公司)
  • Idea配置注释模板
  • 什么是安全组及其作用?
  • 全网营销建设网站/百度流量统计
  • 做网站买域名多少钱/百度人气榜
  • php网站开发电子书/西安网站建设公司电话
  • 5星做号宿水软件的网站/如何推广小程序平台
  • 医药网站文案编辑是怎么做的/百度移动点击排名软件
  • 我对网站开发的项目反思/如何在百度发广告