zoukankan      html  css  js  c++  java
  • 性能分析(1)- Java 进程导致 CPU 使用率升高,问题怎么定位?

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

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

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

    前提

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

    如何定位

    Jmeter 聚合报告

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

    排查网络是否有瓶颈

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

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

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

    top

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

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

    ps -aux | grep 2838

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

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

    2838 是进程 id 哦(pid)

    top -Hp 2838

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

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

    printf "%x
    " 4808

    打印 Java 线程栈的信息

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

    • 包含:包名、类名、代码行信息,可以快速定位到某行代码导致该线程 CPU 使用率过高
    • jstack:JDK 自带命令
     
  • 相关阅读:
    16平衡树
    15二叉检索树
    11用户权限
    10触发器
    8函数
    8存储过程
    linux下如何进入单用户模式
    RHEL6.4 字符模式下安装图形界面图文教程
    杂记
    Java内存管理(一):深入Java内存区域
  • 原文地址:https://www.cnblogs.com/poloyy/p/13376177.html
Copyright © 2011-2022 走看看