前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能分析(1)- Java 进程导致 CPU 使用率升高,问题怎么定位?

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

作者头像
小菠萝测试笔记
发布2020-07-27 16:32:44
9010
发布2020-07-27 16:32:44
举报

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

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

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

前提

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

如何定位

Jmeter 聚合报告

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

排查网络是否有瓶颈

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

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

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

代码语言:javascript
复制
top
  • 可以看到是 Java 进程导致 CPU 使用率贼高,已经占满了四个 CPU
  • 记住该进程 PID

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

代码语言:javascript
复制
ps -aux | grep 2838

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

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

2838 是进程 id 哦(pid)

代码语言:javascript
复制
top -Hp 2838
  • 上面的 PID 就是线程的 PID
  • 按照线程的 CPU 使用率从高到低排序
将排在前面的线程 PID 转换成十六进制
代码语言:javascript
复制
printf "%x\n" 4808
打印 Java 线程栈的信息
代码语言:javascript
复制
jstack 2838 | grep 12c8 -A30
  • 2838:java 进程
  • 12c8:线程十六进制
  • -A30:打印 30 行
  • 包含:包名、类名、代码行信息,可以快速定位到某行代码导致该线程 CPU 使用率过高
  • jstack:JDK 自带命令
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提
  • 如何定位
    • Jmeter 聚合报告
      • 排查网络是否有瓶颈
        • 在服务器中,通过 top 查看是否有进程的用户态(us)过高
          • 通过 ps 命令确认具体是哪个进程
            • 通过 top 查看 Java 进程的线程执行情况
              • 将排在前面的线程 PID 转换成十六进制
              • 打印 Java 线程栈的信息
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档