性能分析(1)- Java 进程导致 CPU 使用率升高,问题怎么定位?

简介: 性能分析(1)- Java 进程导致 CPU 使用率升高,问题怎么定位?

性能分析小案例系列,可以通过下面链接查看哦

https://www.cnblogs.com/poloyy/category/1814570.html

ps:这些分析小案例不能保证完全准确哦,是博主学习过程中的总结,仅做参考

 

前提


本机有一个很占用 CPU 的项目,放在了 Tomcat 下启动着

image.png

如何定位


Jmeter 聚合报告

image.png

  • 可以看到平均响应时间不断的上升,但是吞吐量(TPS)很低
  • 平均响应时间一般超过 1s,就要排除网络有没有瓶颈

 

排查网络是否有瓶颈

在 cmd ping 自己的服务器 ip 地址,看是否有很大的延时或丢包

image.png

可以看到,没有丢包,而且延时也很低,证明网络没有问题

 

在服务器中,通过 top 查看是否有进程的用户态(us)过高

top

image.png

  • 可以看到是 Java 进程导致 CPU 使用率贼高,已经占满了四个 CPU
  • 记住该进程 PID

 

通过 ps 命令确认具体是哪个进程

ps -aux | grep2838

image.png

很明显,就是我们 Java 程序所在的 Tomcat 进程啦

 

通过 top 查看 Java 进程的线程执行情况

2838 是进程 id 哦(pid)

top -Hp 2838

image.png

  • 上面的 PID 就是线程的 PID
  • 按照线程的 CPU 使用率从高到低排序

 

将排在前面的线程 PID 转换成十六进制

printf "%x\n"4808

image.png

打印 Java 线程栈的信息

jstack 2838 | grep 12c8 -A30

  • 2838:java 进程
  • 12c8:线程十六进制
  • -A30:打印 30 行

image.png

  • 包含:包名、类名、代码行信息,可以快速定位到某行代码导致该线程 CPU 使用率过高
  • jstack:JDK 自带命令

 

分析思路过程

  • 使用 Jmeter 进行压测,通过观察聚合报告,发现 TPS 很低只有2.几,但是响应时间很高
  • 响应时间很高首先要排查是否是网路原因,通过 ping 服务器的 IP 发现延时很低,不存在网络问题
  • 通过 top 查看服务端的系统资源情况,发现用户态 CPU 使用率比较高,即存在占用 CPU 高的进程,查看进程列表,发现一个 Java 进程的 CPU 占用率特别高
  • 通过 ps 命令确认该进程的详细信息
  • 通过 top -Hp 查看该进程的所有线程信息
  • 将排在前面的 Java 线程号打印成 16 进制字符串
  • 通过 jstack 打印 Java 线程栈的信息,可以发现是某一行代码的问题
相关文章
|
26天前
CPU过高问题定位
CPU过高问题定位
12 0
|
1月前
|
监控 安全 Java
【JAVA】uwb工厂人员定位系统:人员轨迹实时定位
Uwb人员精准定位系统需要具备实时性,将定位数据及时反馈给用户,方便用户进行人员管理和监控。
58 4
|
2月前
|
JavaScript 前端开发 数据可视化
JAVA人员定位系统源码,Java高精度定位系统源码
1、对各个地图以及各个区域内的人员信息快速查看,以图表的形式展示,更加清晰。 2、主要包括人员动态数据、各类告警事件、员工巡检状态等。
40 3
|
3月前
|
Linux
|
3月前
|
监控 算法 Java
【JavaEE】什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
【JavaEE】什么是多线程?进程和线程的区别是什么?如何使用Java实现多线程?
|
3月前
|
消息中间件 设计模式 Java
Java Review - Java进程内部的消息中间件_Event Bus设计模式
Java Review - Java进程内部的消息中间件_Event Bus设计模式
59 0
|
3月前
|
Linux 调度
linux中进程与cpu核的绑定
linux中进程与cpu核的绑定
67 0
|
5天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
15天前
|
监控 Java Linux
linux下监控java进程 实现自动重启服务
linux下监控java进程 实现自动重启服务
|
2月前
|
网络协议 Linux
【系统DFX】如何诊断占用过多 CPU、内存、IO 等的神秘进程?
【系统DFX】如何诊断占用过多 CPU、内存、IO 等的神秘进程?
106 0