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

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步】获取的线程信息,结果定位到具体的线程堆栈。查找代码问题自行修改

文章持续更新…

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


http://www.kler.cn/a/572635.html

相关文章:

  • 基于Asp.net的农产品销售管理系统
  • DeepSeek R1助力,腾讯AI代码助手解锁音乐创作新
  • 使用JMeter(组件详细介绍+使用方式及步骤)
  • YOLO11改进-模块-引入多尺度小波池化变压器MWPT 通过结合小波变换、多尺度池化以及门控机制等技术解决多尺度、小目标、边缘模糊等问题
  • 服务器CPU微架构
  • 国产编辑器EverEdit - 工具栏自定义及认识工具栏上的按钮
  • Linux:文件系统的初步认识
  • 蓝桥杯 之 贪心与排序
  • 大模型gpt结合drawio绘制流程图
  • (二 十 三)趣学设计模式 之 解释器模式!
  • 【单片机】嵌入式系统大纲
  • 关于 QPalette设置按钮背景未显示出来 的解决方法
  • Jmeter简单的压力测试
  • 探索AIGC未来:通义万相2.1与蓝耘智算平台的完美结合释放AI生产力
  • K8s控制器Deployment详解
  • linux文件系统,文件管理
  • WebP2P技术在嵌入式设备中的应用:EasyRTC音视频通话SDK如何实现高效通信?
  • 一文读懂Redis分布式锁
  • AI浏览器BrowserUse:安装与配置(四)
  • 【AD】PCB增加相关图层——以机械层为例