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

Cpu100%问题(包括-线上docker服务以及Arthas方式进行处理)

🍓 简介: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 下载查看
  • 三 、Arthas排查CPU问题(更简洁-`推荐`)
    • 3.1 Arthas 简介
    • 3.2 安装
    • 3.3 启动
    • 3.4 查看 dashboard 全局监控
    • 3.5 使用 thread查看所有线程信息,同时会列出每个线程的 CPU 使用率
      • 3.5.1 thread
      • 3.5.2 thread -n [显示的线程个数]

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

三 、Arthas排查CPU问题(更简洁-推荐)

3.1 Arthas 简介

在这里插入图片描述
官方文档-很详细:https://arthas.aliyun.com/doc/
开源地址:https://github.com/alibaba/arthas

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
同时在开源在的 Github 的项目里的 Issues 里不仅有问题反馈,更有大量的使用案例,也可以进行学习参考。
在这里插入图片描述官方文档很详细,可自行查看

3.2 安装

# github下载
wget https://alibaba.github.io/arthas/arthas-boot.jar
# 或者 Gitee 下载
wget https://arthas.gitee.io/arthas-boot.jar
# 或者 aliyun 下载
curl -O https://arthas.aliyun.com/arthas-boot.jar

3.3 启动

选择应用 java 进程:

启动
java -jar arthas-boot.jar
*  [1]: 71560 app.jar

则输入 1,再输入回车/enter

在这里插入图片描述

3.4 查看 dashboard 全局监控

输入dashboard,按回车/enter,会展示当前进程的信息,按ctrl+c可以中断执行。

$ dashboard
ID     NAME                   GROUP          PRIORI STATE  %CPU    TIME   INTERRU DAEMON
17     pool-2-thread-1        system         5      WAITIN 67      0:0    false   false
27     Timer-for-arthas-dashb system         10     RUNNAB 32      0:0    false   true
11     AsyncAppender-Worker-a system         9      WAITIN 0       0:0    false   true
9      Attach Listener        system         9      RUNNAB 0       0:0    false   true
3      Finalizer              system         8      WAITIN 0       0:0    false   true
2      Reference Handler      system         10     WAITIN 0       0:0    false   true
4      Signal Dispatcher      system         9      RUNNAB 0       0:0    false   true
26     as-command-execute-dae system         10     TIMED_ 0       0:0    false   true
13     job-timeout            system         9      TIMED_ 0       0:0    false   true
1      main                   main           5      TIMED_ 0       0:0    false   false
14     nioEventLoopGroup-2-1  system         10     RUNNAB 0       0:0    false   false
18     nioEventLoopGroup-2-2  system         10     RUNNAB 0       0:0    false   false
23     nioEventLoopGroup-2-3  system         10     RUNNAB 0       0:0    false   false
15     nioEventLoopGroup-3-1  system         10     RUNNAB 0       0:0    false   false
Memory             used   total max    usage GC
heap               32M    155M  1820M  1.77% gc.ps_scavenge.count  4
ps_eden_space      14M    65M   672M   2.21% gc.ps_scavenge.time(m 166
ps_survivor_space  4M     5M    5M           s)
ps_old_gen         12M    85M   1365M  0.91% gc.ps_marksweep.count 0
nonheap            20M    23M   -1           gc.ps_marksweep.time( 0
code_cache         3M     5M    240M   1.32% ms)
Runtime
os.name                Mac OS X
os.version             10.13.4
java.version           1.8.0_162
java.home              /Library/Java/JavaVir
                       tualMachines/jdk1.8.0
                       _162.jdk/Contents/Hom
                       e/jre

3.5 使用 thread查看所有线程信息,同时会列出每个线程的 CPU 使用率

3.5.1 thread

使用 thread查看所有线程信息,同时会列出每个线程的 CPU 使用率

在这里插入图片描述使用命令thread 151查看 CPU 消耗较高的 151 号线程信息

在这里插入图片描述

3.5.2 thread -n [显示的线程个数]

可以直接使用命令 thread -n [显示的线程个数] ,就可以排列出 CPU 使用率 Top N 的线程。
在这里插入图片描述同理自行查看,自己的线程问题,进行分析处理

文章持续更新…

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

相关文章:

  • Android networkSecurityConfig 代码配置
  • Hadoop八股
  • Redis|Springboot集成Redis
  • React基础之useInperativehandlle
  • 【前端】【vue-i8n】【element】Element 框架国际化配置指南:从 element-ui 到 element-plus
  • 运行OpenManus项目(使用Conda)
  • 国家二级运动员证书有什么用·棒球1号位
  • QP 问题(Quadratic Programming, 二次规划)
  • QEMU源码全解析 —— 块设备虚拟化(2)
  • Scade 状态机 - 同步迁移
  • Maven安装和配置详细教程
  • 第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)
  • 游戏引擎学习第145天
  • 基于昇腾MindIE与GPUStack的大模型容器化部署从入门到入土
  • GPU编程实战指南01:CUDA编程极简手册
  • 以太网口的协议与电路波形
  • Python SQLite3 保姆级教程:从零开始学数据库操作
  • 进制的理解与转换
  • Visual-RFT视觉强化微调:用「试错学习」教会AI看图说话
  • 中性点不接地系统单相接地故障Matlab仿真
  • 安陆做网站公司/中山疫情最新消息
  • 洛阳网站建设找洛阳铭信网络/晚上国网app
  • 有免费可以做的网站吗/seo及网络推广招聘
  • 珠海网站推广优化/国内广告投放平台
  • 重庆巴南网站建设/网站策划书模板范文
  • 做网站技术服务费属于什么科目/宁波网站建设与维护