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

JAVA应用服务器如何快速定位CPU问题

如果服务器上部署了多个Java站点服务和Java微服务,并且突然接收到CPU异常告警,我们需要逐步确定是哪个服务进程造成了CPU过载,接着是哪个线程,并最终定位到是哪段代码导致了这个问题
简要步骤如下:

步骤一、找到最耗CPU的进程

工具:top
方法:top
在这里插入图片描述

步骤二、找到最耗CPU的线程

工具:top -Hp
在这里如上图,进程30528内,最耗CPU的线程PID为30743插入图片描述
如上图,进程30528内,最耗CPU的线程PID为30743

步骤三、查看堆栈定位线程

定位进程在干嘛,定位对应代码首先,将线程PID转化为16进制。工具:printf
方法:printf “%x\n” 30743
在这里插入图片描述
如上图,30743对应的16进制是7817,当然,这一步也可以用计算器来实现
在这里插入图片描述
之所以要转化为16进制,是因为堆栈里,线程id是用16进制表示的
图片
步骤四、查看堆栈,找到线程在干嘛。
工具:jstack
安装:

注意:如果是用yum 安装的openjdk ,是不会带java 开发调试工具 jstack jmap 等.若是想要使用jstack命令查看java程序线程信息,安装jstack 直接用 yum install jstack 会报错 No package jstack available

 yum list --showduplicate | grep java-1.8 | grep devel找到合适的jdk后yum install java-1.8.0-openjdk-devel.x86_64

方法:jstack 1076|grep '7817’ -C5 --color
在这里插入图片描述
如上图,找到了耗CPU高的线程对应的线程名称,以及看到了该线程正在执行代码的堆栈。最后,根据堆栈里的信息,找到对应的代码

相关文章:

  • 【vue】@、@/、../和./的区别
  • apollo版本更新简要概述
  • 【机器学习】深入探索机器学习:利用机器学习探索股票价格预测的新路径
  • 现货白银的交易时间有多连贯?
  • 数据结构(六)队列
  • 计算机视觉与模式识别实验1-2 图像的形态学操作
  • PostgreSQL入门教程
  • 【算法】位运算算法——消失的两个数字(困难)
  • FinalShell无法连接Linux
  • 【论文导读】Grid Graph Reduction for Efficient Shortest Pathfinding(2023 Access)
  • 64位和32位对C++ 对long类型的使用造成程序崩溃、内存泄漏问题。
  • 鸿蒙ArkTS声明式开发:跨平台支持列表【显隐控制】 通用属性
  • 【Python爬虫--scrapy+selenium框架】超详细的Python爬虫scrapy+selenium框架学习笔记(保姆级别的,非常详细)
  • HTTPS 原理技术
  • 专科生听劝 这种情况你就不要专转本了
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 78. Subsets
  • co.js - 让异步代码同步化
  • Fabric架构演变之路
  • flutter的key在widget list的作用以及必要性
  • JavaScript设计模式之工厂模式
  • JDK 6和JDK 7中的substring()方法
  • Service Worker
  • Windows Containers 大冒险: 容器网络
  • 分布式任务队列Celery
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端知识点整理(待续)
  • 微信小程序设置上一页数据
  • 线上 python http server profile 实践
  • 说说我为什么看好Spring Cloud Alibaba
  • ​ArcGIS Pro 如何批量删除字段
  • ​低代码平台的核心价值与优势
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (rabbitmq的高级特性)消息可靠性
  • (SpringBoot)第二章:Spring创建和使用
  • (八)Flask之app.route装饰器函数的参数
  • (初研) Sentence-embedding fine-tune notebook
  • (二)hibernate配置管理
  • (六)c52学习之旅-独立按键
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)大型网站架构演变和知识体系
  • (转)母版页和相对路径
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET Core 中的路径问题
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .NET委托:一个关于C#的睡前故事
  • .net下简单快捷的数值高低位切换
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • [ Python ]使用Charles对Python程序发出的Get与Post请求抓包-解决Python程序报错问题