Java进程cpu占用过高问题解决

作者:陈晓呆 时间:2021-08-09 00:16:59 

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

Java进程cpu占用过高问题解决

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

Java进程cpu占用过高问题解决

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

Java进程cpu占用过高问题解决

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

Java进程cpu占用过高问题解决

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

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

结果为:

Java进程cpu占用过高问题解决

第六步:导出线程栈

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

pid.tdump文件后缀名随意,通常以tdump结尾。

[root@sdfsdfsdeZ codeimage]# jstack 1747 > tmp/1747.tdump

Java进程cpu占用过高问题解决

可能会抛出异常;

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

Java进程cpu占用过高问题解决

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

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

Java进程cpu占用过高问题解决 Java进程cpu占用过高问题解决

来源:https://www.cnblogs.com/winson-317/p/12684942.html

标签:java,进程,cpu,占用
0
投稿

猜你喜欢

  • Java中instanceof关键字实例讲解

    2023-08-04 07:48:31
  • Java之SpringBean生命周期问题理解

    2022-11-16 14:47:35
  • IDEA如何进行全局搜索图文教程

    2022-10-14 13:39:45
  • java private关键字用法实例

    2022-01-16 10:08:06
  • AOP之事务管理<aop:advisor>的两种配置方式

    2023-11-24 22:55:06
  • java8实现List中对象属性的去重方法

    2023-08-30 20:50:48
  • IDEA Error:java:无效的源发行版:13的解决过程

    2023-11-25 10:07:19
  • idea 与 maven 使用过程中遇到的问题及解决方案

    2021-10-07 02:34:24
  • RocketMQ源码解析broker 启动流程

    2022-12-25 10:50:54
  • Spring Native打包本地镜像的操作方法(无需通过Graal的maven插件buildtools)

    2023-11-25 04:24:30
  • 简单聊一聊Java线程池ThreadPoolExecutor

    2021-10-23 15:56:58
  • Java语言实现简单FTP软件 FTP协议分析(1)

    2023-11-10 17:57:21
  • SpringBoot返回多种格式的数据的实现示例

    2023-11-24 14:22:52
  • 基于Java中的数值和集合详解

    2023-11-25 08:12:13
  • SWT(JFace)体验之复制粘贴

    2022-11-18 13:47:46
  • 详解Java 信号量Semaphore

    2021-12-22 11:10:36
  • java语言图形用户登录界面代码

    2021-09-11 23:19:34
  • ReentrantLock源码详解--公平锁、非公平锁

    2023-04-22 17:18:56
  • java快速生成数据库文档详情

    2023-11-10 05:25:20
  • android studio2.3如何编译动态库的过程详解

    2023-07-11 03:47:48
  • asp之家 软件编程 m.aspxhome.com