cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,则是100%;我们应该意识到,cpu运行速度很快(主频非常高),除非密集型耗费cpu的运算,其它类型任务都会在小于时间片的时间内结束。

产生CPU100%的原因:

某一程序一直占用CPU是导致CPU100%的原因,大概有以下几种情况:1、Java 内存不够或溢出导致GC overhead问题, GC overhead 导致的CPU 100%问题;

2、死循环问题. 如常见的HashMap被多个线程并发使用导致的死循环, 或者死循环;

3、某些操作一直占用CPU

第一步:使用top命令,查看占用cpu的进程[root@sdfsdfseZ codeimage]# top

第二步:ps -ef | grep java 或jps命令,找出服务器的所有java进程

第三步:找出CPU耗用最厉害的进程pid

第四步:查找出具体占用cpu利用率最厉害的线程号,top -H -p pid 。然后按下shift+p,跳出CPU监控

当前线程号为:1747

第五步:将获取到的线程号转换成16进制

因为java线程栈文件中的线程id是十六进制,需要将线程id从十进制转为十六进制。十进制 转十六进制的命令如下:

结果为:

第六步:导出线程栈

将具体的占用CPU过高的java进程的线程栈导出,导出命令如下:

pid.tdump文件后缀名随意,通常以tdump结尾。[root@sdfsdfsdeZ codeimage]# jstack 1747 > tmp/1747.tdump

可能会抛出异常;1747: Unable to open socket file: target process not responding or HotSpot VM not loaded

The -F option can be used when the target process is not responding

原因分析

jvm运行时会生成一个目录hsperfdata_$USER($USER是启动java进程的用户),在linux中默认是/tmp,目录下会有些pid文件,存放jvm进程信息,而jmap,jstack等工具会读取/tmp/hsperfdata_$USER下的pid文件获取连接信息.

检查了/tmp/hsperfdata_root目,,但在$TOMCAT_HOME目录中的temp目录中有对应的文件.

解决办法

或使用[root@iZ2zeab8t820b5ywp0rkfeZ bin]# jstack 1706 > /tmp/hsperfdata_root/1706.tdump

第七步:导出堆

[root@sddsdfsaZ bin]# jstat -gcutil 1706

第八步:jvisualvm分析快照使用JAVA_HOME/bin/jvisualvm.exe,载入快照

文件----->载入—>文件类型(Dump)

java 进程100_原创:如何排查java进程cpu100%的问题相关推荐

  1. 线上服务Java进程假死快速排查、分析

    线上服务Java进程假死快速排查.分析 最近我们有一台服务器上的Java进程总是在运行个两三天后就无法响应请求了,具体现象如下: 请求业务返回状态码502,查看进程还在,意味着Java进程假死,无法响 ...

  2. java导致系统满载_排查解决java进程占用系统内存高

    使用top命令查看系统资源的使用情况 top 获取java的PID 或者 jps -l jps -v 通过命令查看进程的线程情况 **ps p pid-L -o pcpu,pmem,pid,tid,t ...

  3. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)

    PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...

  4. Java多线程笔记(零):进程、线程与通用概念

    前言 不积跬步,无以至千里:不积小流,无以成江海.在学习Java多线程相关的知识前,我们首先需要去了解一点操作系统的进程.线程以及相关的基础概念. 进程 通常,我们把一个程序的执行称为一个进程.反过来 ...

  5. linux批量杀进程_Linux下批量杀JAVA进程

    在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killall 直接杀掉某一进程名称包含的所有运行中进程(我们 ...

  6. java 管理多个进程_管理多个Java安装

    java 管理多个进程 随着越来越多的Java版本发布,在本地环境中管理多个Java安装将变得更加有趣. 不同的项目可能需要不同的Java版本. jenv项目是管理Java安装的便捷方法. 它可以在全 ...

  7. java进程和线程_Java™ 教程(进程和线程)

    并发 计算机用户想当然地认为他们的系统一次可以做不止一件事,他们设想他们可以继续在文字处理器中工作,而其他应用程序则下载文件.管理打印队列和流音频,即使是单个应用程序通常也希望一次完成多个任务.例如, ...

  8. java 进程 线程数量_如何查询一个进程下面的线程数(进程和线程区别)

    在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢? 一.对比进程和线程 1)两者概念 -  进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程 ...

  9. 第十章 进程间的通信 之 Java/Android多线程开发(二)

    文章目录 (一)Java 多线程开发 1.1)线程状态 1.2)线程控制方法 (1.2.1)Synchronized (1.2.2)Volatile (1.2.3)ReentrantLock 1.3) ...

最新文章

  1. What Does TTY Stand for in Linux?
  2. Python拼接多张图片
  3. 离线使用iPhone SDK文档的方法
  4. CSDN 编程挑战——《coder的计算器》
  5. 随想录(程序员和收入)
  6. python程序设计方法_Python程序设计现代方法
  7. linux mysql general_利用mysql general log 写shell 可行性简要分析
  8. 我爱计算机视觉干货集锦分类汇总(2019年6月17日)
  9. linux openssl 证书,Linux上的openSSL证书验证
  10. 使用tcl文件分配管脚
  11. 23-Python-RabbitMQ
  12. 基于SSM的疫情数据统计分析系统
  13. 涨姿势!2020最好的 10 大国外编程学习网站
  14. GIS等级考试知识集锦
  15. EasyGBS通过GB2818下载流程结合抓包数据详细记录
  16. 1005打印任务取消不了 hp_Windows10+HP M176N奇怪的发送打印命令不执行任务就消失的问题...
  17. python多个箱线图_箱线图Python
  18. 阿里云培训-负载均衡(CLB/ALB)
  19. 使用Perl编写协议分析脚本
  20. 只有标准账户,如何取得管理员权限?

热门文章

  1. 编写高质量代码改善C#程序的157个建议——建议104:用多态代替条件语句
  2. 出现次数最多的数-CCF模拟
  3. 面试之BI-SQL--table转换
  4. .net之 datagrid
  5. 如何捕获window.print点击打印或取消_原来1:1的CAD图纸要这样打印!学了这么久才知道...
  6. python中matrix函数_使用python解线性矩阵方程(numpy中的matrix类)
  7. 1.5 训练/开发/测试集划分-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  8. STM32 基础系列教程 22 - CAN
  9. 计算机语言pandas,计算机语言python100道pandas(含答案)
  10. 《雷达技术丛书》分享