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. MYSQL数据文件--.frm文件(只有.frm文件时的表结构恢复)
  2. MongoDB sharding迁移那些事(一)
  3. 传统IP网络与MPLS网络转发的区别
  4. Vue creatElement
  5. C# 自定义 implicit和explicit转换
  6. Java8 PriorityBlockingQueue源码分析
  7. 函数计算搭建小程序Web应用后端服务
  8. 《大数据,小时代,向移动互联网迁徙-2012上半年移动互联网数据分享》_DCCI
  9. uva 1220——Party at Hali-Bula
  10. php内核探索 [转]
  11. fps游戏 三角函数+模拟
  12. eclipse 中安装activitil流程插件步骤
  13. scala 学习笔记--集合
  14. 内存管理-内存slub分配器(二)
  15. 【基础处理】基于matlab语音信号预处理【含Matlab源码 364期】
  16. 华为大数据解决方案(PPT)
  17. tp6 阿里云短信接口 php
  18. 关于CS模式和P2P模式分发文件速度的思考
  19. 嵌入式Linux 3G pppd拨号上网问题
  20. 赵小楼《天道》《遥远的救世主》深度解析(41)芮小丹的恋爱观背后的文化属性

热门文章

  1. CentOS配置SSH单向无密码访问
  2. 机器学习书籍资料(自己正在读的)---self-reading ML booklist ( To be continued )
  3. 【Matlab】求解黎卡提 Riccati 方程 李雅普诺夫 Lyapunov 方程
  4. 【控制】能量函数Graph Laplacian Potential and Lyapunov Functions for Multi-Agent Systems
  5. LaTex 实数集R
  6. 0.0 目录-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授
  7. STM32 基础系列教程 34 - Lwip_tcp_server
  8. UDP千兆以太网FPGA_verilog实现(三、代码前期准备-时序要求)
  9. android编译全过程
  10. 树莓派小车参考方案,了解一下