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 的线程。
在这里插入图片描述同理自行查看,自己的线程问题,进行分析处理

文章持续更新…

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大模型】WPS 接入 DeepSeek-R1详解,打造全能AI办公助手

目录 一、前言 二、WPS接入AI工具优势​​​​​​​ 三、WPS接入AI工具两种方式 3.1 手动配置的方式 3.2 Office AI助手 四、WPS手动配置方式接入AI大模型 4.1 安装VBA插件 4.1.1 下载VBA插件并安装 4.2 配置WPS 4.3 WPS集成VB 4.4 AI助手效果测试 4.5 配置模板文…

架构思维:高性能架构_01基础概念

文章目录 概述基础概念性能指标利特尔法则&#xff08;O T L&#xff09;系统优化策略1. 降低耗时&#xff08;L↓&#xff09;2. 增加容量&#xff08;O↑&#xff09;3. 增加时延&#xff08;L↑&#xff09; 场景化指标选择响应时间优先吞吐量/容量优先平衡策略 概述 一个…

解决stylelint对deep报错

报错如图 在.stylelintrc.json的rules中配置 "selector-pseudo-class-no-unknown": [true,{"ignorePseudoClasses": ["deep"]} ]

VScode 中文符号出现黄色方框的解决方法

VScode 中文符号出现黄色方框的解决方法 我的vscode的python多行注释中会将中文字符用黄色方框框处&#xff1a; 只需要打开设置搜索unicode&#xff0c;然后将这一项的勾选取消掉就可以了&#xff1a; 取消之后的效果如下&#xff1a; 另一种情况&#xff1a;中文显示出现黄色…

大模型架构记录2

一 应用场景 1.1 prompt 示例 1.2 自己搭建一个UI界面&#xff0c;调用接口 可以选用不同的模型&#xff0c;需要对应的API KEY 二 Agent 使用 2.1 构建GPT

深度学习实战车辆目标跟踪与计数

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对车辆目标数据集进行训练和优化&#xff0c;该数据集包含丰富的车辆目标图像样本…

升级到Android Studio 2024.2.2 版本遇到的坑

一、上来就编译报错&#xff0c;大概率是因为选择了替换安装&#xff0c;本地配置文件出错 找到本地当前版本的配置文件&#xff0c;删掉&#xff0c;重启studio就好了&#xff1a; 1、打开终端 2、“cd /Users/用户名/Library/Application\ Support/Google” //到Google目录 …

Git - 补充工作中常用的一些命令

Git - 补充工作中常用的一些命令 1 一些场景1.1 场景11.2 场景21.3 场景31.4 场景41.5 场景51.6 场景61.7 场景71.8 场景81.9 场景91.10 场景101.11 场景111.12 场景121.13 场景131.14 场景141.15 场景15 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\-…

【网络安全工程】任务11:路由器配置与静态路由配置

目录 一、概念 二、路由器配置 三、配置静态路由CSDN 原创主页&#xff1a;不羁https://blog.csdn.net/2303_76492156?typeblog 一、概念 1、路由器的作用&#xff1a;通过路由表进行数据的转发。 2、交换机的作用&#xff1a;通过学习和识别 MAC 地址&#xff0c;依据 M…

如何用更少的内存训练你的PyTorch模型?深度学习GPU内存优化策略总结

在训练大规模深度学习模型时&#xff0c;GPU 内存往往成为关键瓶颈&#xff0c;尤其是面对大型语言模型&#xff08;LLM&#xff09;和视觉 Transformer 等现代架构时。由于大多数研究者和开发者难以获得配备海量 GPU 内存的高端计算集群&#xff0c;掌握高效的内存优化技术至关…

Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)

Dify部署参考&#xff1a;Dify Rag部署并集成在线Deepseek教程&#xff08;Windows、部署Rag、安装Ragan安装、安装Dify安装、安装ollama安装&#xff09; DifyDeepSeek - Excel数据一键可视化&#xff08;创建步骤案例&#xff09;-DSL工程文件&#xff08;可直接导入&#x…

linux下ollama离线安装

一、离线安装包下载地址 直接下载地址&#xff1a; https://github.com/ollama/ollama/releases/tag/v0.5.12 网络爬取地址&#xff1a; MacOS https://ollama.com/download/Ollama-darwin.zip Linux curl -fsSL https://ollama.com/install.sh | sh Windows https://olla…

MAC 搭建Dify+DeepSeek-R1整合部署

在开始安装之前&#xff0c;我们需要确保系统满足以下基本要求&#xff1a; CPU至少2核心内存至少4GB&#xff08;建议8GB以上&#xff09;硬盘空间至少20GB&#xff08;为了后续扩展&#xff09;操作系统支持&#xff1a;Windows、macOS或LinuxDocker环境 1. dify的安装步骤…

OpenManus介绍及本地部署体验

1.OpenManus介绍 OpenManus&#xff0c;由 MetaGPT 团队精心打造的开源项目&#xff0c;于2025年3月发布。它致力于模仿并改进 Manus 这一封闭式商业 AI Agent 的核心功能&#xff0c;为用户提供无需邀请码、可本地化部署的智能体解决方案。换句话说&#xff0c;OpenManus 就像…

springboot011基于springboot的课程作业管理系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得难了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等&#xff0c;你想解决的问题&#xff0c;今天…

swift -(5) 汇编分析结构体、类的内存布局

一、结构体 在 Swift 标准库中&#xff0c;绝大多数的公开类型都是结构体&#xff0c;而枚举和类只占很小一部分 比如Bool、 Int、 Double、 String、 Array、 Dictionary等常见类型都是结构体 ① struct Date { ② var year: Int ③ var month: Int ④ …

全域网络安全防御 健全网络安全防护体系

网络安全基本概念 网络安全&#xff08;Cyber Security&#xff09;是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断&#xff0c;使网络处于稳…

记录小白使用 Cursor 开发第一个微信小程序(二):创建项目、编译、预览、发布(250308)

文章目录 记录小白使用 Cursor 开发第一个微信小程序&#xff08;二&#xff09;&#xff1a;创建项目、编译、预览、发布&#xff08;250308&#xff09;一、创建项目1.1 生成提示词1.2 生成代码 二、编译预览2.1 导入项目2.2 编译预览 三、发布3.1 在微信开发者工具进行上传3…

uploadlabs通关思路

目录 靶场准备 复现 pass-01 代码审计 执行逻辑 文件上传 方法一&#xff1a;直接修改或删除js脚本 方法二&#xff1a;修改文件后缀 pass-02 代码审计 文件上传 1. 思路 2. 实操 pass-03 代码审计 过程&#xff1a; 文件上传 pass-04 代码审计 文件上传 p…

CTFHub-FastCGI协议/Redis协议

将木马进行base64编码 <?php eval($_GET[cmd]);?> 打开kali虚拟机&#xff0c;使用虚拟机中Gopherus-master工具 Gopherus-master工具安装 git clone https://github.com/tarunkant/Gopherus.git 进入工具目录 cd Gopherus 使用工具 python2 "位置" --expl…