---------------------------------------linux下如何定位代码问题-------------------------------

1、先通过top命令找到消耗cpu很高的进程id假设是123

2、执行top -p 123单独监控该进程

3、在第2步的监控界面输入H,获取当前进程下的所有线程信息

4、找到消耗cpu特别高的线程编号,假设是123

5、执行jstack 123456对当前的进程做dump,输出所有的线程信息

6 将第4步得到的线程编号11354转成16进制是0x7b

7 根据第6步得到的0x7b在第5步的线程信息里面去找对应线程内容

8 解读线程信息,定位具体代码位置

-----------------------------分割线----------------------------------------------

最近在压力测试工作中碰到java应用某台机器cpu比较高的情况,特地下笔记以后总结:

一个简单的淘宝认证接口 需要插入读写数据库2次。每次爬取数据,入库。完成。

正常情况下:

应用使用cpu在 :50%--80%

压力高--异常情况下:

cpu利用率在:90%---90%

在网上查了下,一般java应用cpu过高基本上是因为

1.程序计算比较密集

2.程序死循环

3.程序逻请求堵塞
4.IO读写太高

方法一:

分析步骤:

1.登陆应用机器,top -d 1命令查看 当前占用cpu资源最多的,一般排名第一位肯定是java进程

一般也可能存在多个java进程

观察 top 消耗第一的资源是PID=1679的线程

2.查看进程的哪个线程占用cpu比较高,取线上另外一台正常情况下利用cpu比较高的应用:通过

ps -mp pid -o THREAD,tid,time命令查看该进程的线程情况

通过以上线程CPU切片 耗时在pid=1679 Tid =1896 耗时 1分59秒,4%CPU占用最大。时间最长。

TID为1679的线程利用cpu资源比较多,怎么能看到这个线程在干什么呢?

需要将1896 转换为16进制,便于在jvm堆栈中查找。

printf "%x\n" 1896   ----768

通过jstack命令来查看下当前内存状态:

定位到cpu过高是IO读写太高 ,接下来就是找开发人员确认这段代码是否可以优化。

方法二:

在做压测的时候,开发给了一个工具  show-busy-java-threads.sh

在排查JavaCPU性能问题时,找出Java进程中消耗cpu多(top us值过高)的线程,查看它的线程栈,从而找出有性能问题的方法调用。

####截取一段

#!/bin/bash
# @Function
# Find out the highest cpu consumed threads of java, and print the stack of these threads.
#
# @Usage
#   $ ./show-busy-java-threads.sh
#
# @author Jerry Leereadonly PROG=`basename $0`
readonly -a COMMAND_LINE=("$0" "$@")usage() {cat <<EOF
Usage: ${PROG} [OPTION]...
Find out the highest cpu consumed threads of java, and print the stack of these threads.
Example: ${PROG} -c 10...................后面略

其实就是个shell文件,把这个文件上传到目标服务器(linux),记得更改文件的读写权限: chmod -R 777  show-busy-java-threads.sh

接方法一  top之后,只需要下命令 :./show-busy-java-threads.sh -p pid  后面CPU占用高的定位就分析出来了,具体如图

转载于:https://www.cnblogs.com/Alexr/p/9361491.html

java应用cpu使用率过高问题排查相关推荐

  1. CPU使用率过高如何排查问题

    CPU使用率过高如何排查问题 1.输入top指令,找到比较高的CPU使用率所对应的PID编号 1.输入ps H -eo pid,tid,%cpu | grep 进程PID 查看进程下面哪些线程TID使 ...

  2. Java应用CPU使用率过高排查

    1.使用top命令查看使用CPU过高的进程 top top - 14:16:06 up 27 min, 3 users, load average: 0.00, 0.01, 0.02 Tasks: 8 ...

  3. CPU使用率过高问题排查及Linux之top命令用法详解

    文章目录 问题 解决方案 top命令用法 top各输出参数含义 一.top前5行统计信息 二.进程信息 Top 1的用法 %CPU和us%的区别 问题 公司连续2天服务器告警CPU使用率过高问题,查看 ...

  4. Java 程序 CPU 使用率过高问题定位与修复

    问题现象:CPU 负载过高 我们线上的 jenkins 系统,时不时会发生 CPU 负载过高的现象. CPU 负载过高后,SRE 同学会收到电话告警. 在我们的监控系统中,可以看到,某些时候,CPU ...

  5. Java应用CPU占用过高问题排查

    文章目录 问题描述 问题分析 如果你的 Java 应用把 CPU 100% 打满,该怎么办呢? 下面就结合实际情况来说明,对于 Java 应用,CPU 消耗过高的时,该如何处理? CPU 消耗过高分析 ...

  6. Java 占用CPU使用率很高的分析

    前几天在测试服务器上发现Java进程的CPU使用率暴高,为了分析解决该问题,把过程记录如下: 1. 先找到Java的进程号 Linux下: 用top命令查看所有进程,可以明显看到Java的,因为CPU ...

  7. Java程序 CPU使用率过高怎么办?

    java程序 cup使用率过高,会导致程序运行速度变慢,导致系统崩溃等 原因是多向的.跟内存泄漏,数据库等都有关 参考一些解决方案: 检查是否有死循环. 频繁的GC.或者有大量的线程. 算法太复杂或者 ...

  8. Linux下CPU使用率过高的排查方法

    在 Linux 系统下,使用 top 命令查看 CPU 使用情况. %Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, ...

  9. 线上java程序CPU占用过高问题排查

    简要 工作中负责的有一个项目是使用iReport+JasperReport实现的一个打印系统.最近这个线上程序经常无响应,重启后恢复正常,但是时不时还是会出现类似的问题. 最后发现是JasperRep ...

最新文章

  1. 做过十几年程序员,作为当今全世界顶级产品经理,出版第二部重磅作品《启示录2》...
  2. xenserver 管理口显示重复IP的处理方法
  3. 在 BT5 下对 Red Hat Enterprise Linux 5.4 的一次***测试
  4. java读取邮箱附件_使用javamail获取附件内容
  5. Entity Framework 4.0 的一个bug :DefaultValue问题
  6. 谁适合做Scrum Master?
  7. 最大流算法(Edmons-Karp + Dinic 比较) + Ford-Fulkson 简要证明
  8. 统计android代码行数据,Android Studio代码行数统计插件Statistics
  9. Midas GTS NX三维地质建模及边坡稳定性分析
  10. 南邮2020/2021电工电子技术期末试卷
  11. VS2017 Ankhsvn不可用
  12. antd 项目中使用iconfont图标
  13. sklearn:OneHotEncoder的简单用法
  14. 长春高中计算机考试时间安排,2017年长春中考考试时间安排
  15. Selenium 自动化测试从0实战经验
  16. 一场云端的“神仙打架”:BAT加华为的影响未来之争
  17. wps怎么把字缩到最小_wps文字怎么把空行缩小
  18. 快读快写和fread,fwrite--zhengjun
  19. SQL查询语句分步详解——多字段分组查询
  20. TypeScript学习笔记

热门文章

  1. win环境下安装python之matplotlib经历
  2. 华为畅享8的悬浮窗在哪里_5000mAh大电池,华为畅享20 SE发布,谈谈配置
  3. 面向 Java 开发人员的 Scala 指南: 深入了解 Scala 并发性
  4. Struts2解析FreeMarker模板中变量的顺序
  5. tomcat默认用户名密码修改
  6. Alpha版(内部测试版)发布
  7. [Java]Thinking in Java 练习2.2
  8. 配置虚拟机 Linux 静态IP
  9. Linux - chmod
  10. [单选题]PDO::ATTR_ERRMODE设置为以下哪个值时,PDO会抛出PDOException?