首页 > 后端开发 > 正文

java cpu占用高,该怎么处理

2024-06-11 19:08:28 | 我爱编程网

小编今天整理了一些java cpu占用高,该怎么处理相关内容,希望能够帮到大家。

本文目录一览:

java cpu占用高,该怎么处理

java cpu占用高,该怎么处理

你是自己编写的程序吗?如果是请自查代码

CPU占用过高,一般是因为你线程启动太多或者其中一个或多个线程工作太忙

工作太忙的例子,最简单的,代码太长,执行需要一段时间,CPU就会升高,可以适当地加上sleep(milliseconds)来使其睡眠一小会。

还有就是线程有的时候必须要时刻监听一个值,这个时候简单粗暴的方式就是while(true),然后里面判断一个boolean是否为真,如果是则break,如果不是则继续循环

这样的代码是【非常】【非常】吃CPU的,还是避免它比较好,或者至少加入sleep(1)来让其休息一下,1已经很小了。。

线程太多的话,我们的CPU本来是很闲的,尤其是电脑闲置的时候,基本上是不会干活的,只会监听一下硬件设备,以及自动保存一下未保存的文档等等,它的时间片安排的特别宽松,也就不会出现占用过高的问题,结果假设你的程序给它安排了几十个线程等着执行……

因为CPU可不是给一个单独的线程一堆时间,直到这个线程结束再给下一个线程。

CPU会把自己的时间片资源分配给随机的线程,执行时间结束后强制暂停线程,优先级高的能获得更多处理时间,但不保证必然能得到全部时间。

如果线程太多了,那么sleep方法就没什么用了,因为本来是让线程休息的,结果这个休息了那个立马就开始,所以用处不大了

java cpu占用高,该怎么处理

查找Java哪个线程占用CPU 最多

一,在centos linux 上查看进程占用cpu过高

top

shift+h

查看哪个进程程消耗最高

二,查看JAVA进程中哪个线程消耗最高

2.1 导出java运行的线程信息

jstack 进程id(jps查看)

jstack 进程id > ps.txt

jstack -l 进程id (窗口打印)

//另外还有一种方式

如果启动方式如下:

nohup java -classpath conf/:my.jar com.tank.manClass>./log.out 2>&1 &

则执行: kill -3 PID,进程信息会输出到/log.out

2.2 查找最消耗cpu的java线程

jps

找到java进程PID

命令:ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid

通过%CPU和 TIME,判断占用的线程TID

找到TID,转换成16进制,然后在上面(jstack 进程id > ps.txt)导出的文件中搜索,就可以定位到具体的线程,类。

java cpu占用高,该怎么处理

Java中CPU占用过高问题如何解决

方法1

1.jps 获取Java进程的PID。我爱编程网

2.jstack pid >> java.txt 导出CPU占用高进程的线程栈。

3.top -H -p PID 查看对应进程的哪个线程占用CPU过高。

4.echo “obase=16; PID” | bc 将线程的PID转换为16进制,大写转换为小写。

5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。

6.分析负载高的线程栈都是什么业务操作。优化程序并处理问题。

方法2

1.使用top 定位到占用CPU高的进程PID

top

通过ps aux | grep PID命令

2.获取线程信息,并找到占用CPU高的线程

ps -mp pid -o THREAD,tid,time | sort -rn

3.将需要的线程ID转换为16进制格式

printf "%x\n" tid

4.打印线程的堆栈信息

jstack pid |grep tid -A 30

以上就是我爱编程网小编为大家带来的内容了,想要了解更多相关信息,请关注我爱编程网。

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“java cpu占用高,该怎么处理”相关推荐
Java中CPU占用过高问题如何解决
Java中CPU占用过高问题如何解决

Java中CPU占用过高问题如何解决方法11.jps获取Java进程的PID。2.jstackpid>>java.txt导出CPU占用高进程的线程栈。3.top-H-pPID查看对应进程的哪个线程占用CPU过高。4.echo“obase=16;PID”|bc将线程的PID转换为16进制,大写转换为小写。5.在第二步导出的Java.txt中查找转换成为1

2024-06-01 04:31:35
Java如何定位占用CPU比较高的问题
Java如何定位占用CPU比较高的问题

Java如何定位占用CPU比较高的问题一、确定消耗CPU的Java进程从上图可以看到Java进程27459消耗的CPU比较高。二、查找27459Java进程消耗CPU线程ID方式一:top-p[pid]或top-H-p[pid]执行命令后按shift+h(显示进程各线程运行情况)1)、top-p274592)、shift+h如下图:方式二:p

2024-06-07 01:52:28
java进程虚拟内存占用高有什么影响
java进程虚拟内存占用高有什么影响

java进程虚拟内存占用高有什么影响性能问题。虚拟内存是通过将部分数据从物理内存交换到磁盘上的虚拟内存中来实现的,如Java进程的虚拟内存占用过高,会导致频繁的内存页交换,这会增加磁盘I/O操作,降低系统性能,并导致应用程序响应变慢。Java程序占用内存太高了怎么办?先看下是否有内存泄露,简单的方法就是隔一段时间检查下内存,看看是否是持续上升。然后看下资源是否可以优化,

2024-06-10 17:38:53
JAVA开发的,后台程序处理太久,导致页面返回时响应不了怎么办?
JAVA开发的,后台程序处理太久,导致页面返回时响应不了怎么办?

JAVA开发的,后台程序处理太久,导致页面返回时响应不了怎么办?可以强制关闭,重新运行处理。采用分段加载,先让后台响应页面,需要长时间处理的代码变为线程去处理,如果需要把长时间处理后结果返回到响应的页面去,(servlet2.0后好像是支持的),代码容量太大会造成运行速度卡顿采用分段加载,先让后台响应页面,需要长时间处理的代码变为线程去处理,如果需要把长时间处理后结果返回

2024-06-08 05:21:33
java运行原理 java工作原理
java运行原理 java工作原理

java运行原理Java实在”虚拟机“上进行的编译和运行。解释:在Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode)(class

2024-04-27 14:51:31
python里面eval怎么理解
python里面eval怎么理解

python里面eval怎么理解eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。eval是程序语言中的函数。是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。即变量赋值时,等号右边的表示是写成字符串的格式,返回值就是这个表达式的结果。将字符串转成相应的对象(如list、tuple、dict和string之间的转换)

2024-02-04 12:14:03
2. 为什么Java可以做到“一次编写、处处运行”
2. 为什么Java可以做到“一次编写、处处运行”

jsp页面中java代码重复执行执行两次pageNumber不是一个有效的整数,所以报了NumberFormatException异常,建议用try{}catch(){}包围起来还有在页面上用JS函数判断下,不要让非法的数据进入服务器端去验证。补充回答:不是一个有效的数字,从你的【但是随后我打印pageNumber的值System.out.println("pageNum

2024-03-22 14:07:41
PHP与JAVA交互,该怎么搞
PHP与JAVA交互,该怎么搞

PHP与JAVA交互,该怎么搞这是一门课程了。javaweb,,或者叫jsp。jsp就是由html和java脚本,等语言构成的。java程序嵌套在html里。相当于php。以网页的形式将java展现。这也就是所谓的动态。以为java程序获取的时间会变动。或者数据库变动从而引起网页的变动。具体实现,你可以在网上查找jsp教程。以下是一个jsp页面的例子:注释(1):上面一句是jsp命令语句,标

2024-03-23 10:24:59