`

windows下java项目cpu占用较高原因分析

    博客分类:
  • java
阅读更多

在windows平台上要找出到底是哪个线程占用的cpu还不那么容易,linux用top就简单多了最后的解决方法:

1.找到java进程对应的pid。

找pid的方法是:打开任务管理器,然后点击 "查看" 菜单,然后点击 "选择列",把pid勾上,然后就可以在任务管理器里面看到所有进程的pid值了。(也可以用第三步中提到的工具直接查看)

2.然后把java进程导出快照。直接运行命令。

[java] view plaincopy
  1. jstack -l 31372 > c:/31372.stack  


我这里是指定把java所有的信息导出到c盘的31372.stack的文件里。

3.在windows下只能查看进程的cpu占用率,要查看线程的cpu占用率要借助其他的工具,我这里用的是微软提供的 Process Explorer v15.3

下载地址http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx

下载完后解压运行

 

右键点击需要查看的进程---properties

 

 

4.然后选择 Threads 选项卡,找到占用cpu的线程的tid,比如我这里是 31876 的线程

 

 

5.把pid转换成16进制,我这里直接用系统自带的计算器转换,置于为什么要转换,是因为先前用jstack导出的信息里面线程对应的tid是16进制的。

 

 

 

最后得到的线程pid的16进制的值为 7C84

 

6.在 c盘的31372.stack文件中查找 7C84

 

由于是我的程序已经该过了,这里没有异常的东西,所以这里没有什么异常内容。

 

 

 

我的问题没解决之前,找到到这里的内容为:

 

[java] view plaincopy
  1. "Thread-23" prio=6 tid=0x03072400 nid=0x1b68 runnable [0x0372f000]  
  2.    java.lang.Thread.State: RUNNABLE  
  3.     at com.horn.util.MyEncrypt.encode(MyEncrypt.java:17)  
  4.     at com.horn.common.OrderUtil.hisExp(OrderUtil.java:228)  
  5.     at com.horn.util.MsgManage.receiveMsg(MsgManage.java:961)  
  6.     at com.horn.util.PollMessageThread.run(PollMessageThread.java:74)  
  7.   
  8.    Locked ownable synchronizers:  
  9.     - None  


于是 打开 t com.horn.util.MyEncrypt.encode(MyEncrypt.java:17)

分析了下代码,问题找到了。

 

问题代码为:

[java] view plaincopy
  1. // 100-999的随机数  
  2. int random = (int) (Math.random() * 1000);  
  3. while (random < 100) {  
  4.     random = random * 10;  
  5. }  

 

这样票眼看 是没问题
当时我写这段代码也没注意
关键在于 Math.random()的取值范围是大于0小于1 是吧?
如果Math.random() 的值为 0.00009以下... 就成死循环了...

现在修改为了

[java] view plaincopy
  1. // 100-999的随机数  
  2. int random = new Random().nextInt(900) + 100;  


希望能给遇到问题的朋友一些帮助。

分享到:
评论

相关推荐

    用java获取CPU占用率

    首先,Java程序需要识别运行的操作系统类型,因为不同的操作系统(如Windows和Linux)提供了不同的API或系统调用来访问CPU占用信息。在提供的代码示例中,`System.getProperty("os.name")`用于获取操作系统名称,...

    CPU占用高

    标题“CPU占用高”指的是计算机或服务器的中央处理器在运行过程中消耗资源过多,导致系统响应变慢或无法正常处理任务的现象。这种情况可能是由于多种因素引起的,包括但不限于恶意软件、资源密集型应用程序、系统...

    JAVA分析进程占用过大原因

    - 假设通过上述命令,我们找到了一个CPU占用较高的线程ID为196822。 2. **转换线程ID为16进制**:由于某些JAVA工具需要以16进制形式输入线程ID,因此需要将10进制的线程ID转换成16进制。 - 使用`printf "%x\n" ...

    测量Java应用程序的CPU和内存占用率

    Java标准库虽然提供了诸如堆栈大小的测量方法,但并不直接支持测量Java进程在操作系统中的CPU占用率和内存使用量。为解决这个问题,开发者通常需要借助于操作系统级别的接口,如JNI(Java Native Interface)来获取...

    CPU 高消耗排查

    - 通过分析`cpu1128.log`中的信息,可以找出占用CPU较高的线程正在执行的任务,进而判断其是否正常工作或是存在性能瓶颈。 #### 四、进一步分析线程 1. **转换线程ID为十六进制格式** - 在某些情况下,我们可能...

    JAVA性能分析

    2. **确定高占用线程**: 如果发现某个或某些线程的CPU占用率特别高,那么这些线程可能是导致CPU占用过高的原因。 3. **获取线程ID**: 对于占用高的线程,可以使用`printf "%x\n" &lt;线程ID&gt;`将十进制的线程ID转换为...

    Linux系统中CPU占用率较高问题排查思路与解决方法

    在Linux系统管理中,CPU占用率过高是一个常见的问题,它可能导致系统性能下降,甚至影响到服务的稳定性。本文主要探讨了如何排查和解决Linux系统中CPU利用率高的问题,包括两种常用的方法以及一个实际的故障排查案例...

    weblogic内存占用过大调优

    - 分析线程转储文件,找出占用CPU时间较长的线程,尤其是处于“等待锁”(Waiting for monitor entry)或“运行”(Runnable)状态的线程。 4. **其他监控手段**: - 使用第三方工具如JProbe或OptimizeIt等来深入...

    Javacard CPU的设计与实现.pdf

    传统的Javacard系统大多依赖软件虚拟机来解释执行Java指令,这种方式占用资源多,执行效率较低。为提高性能和减少资源消耗,硬件实现的Javacard指令处理器成为一种解决方案。文章《Javacard CPU的设计与实现》中提到...

    Java NIO与IO性能对比分析.pdf

    本文将分析Java NIO与Java IO在性能上的对比,并尝试找出性能差异的原因,以及探讨哪种编程模型更适合高并发的应用场景。 Java IO模型是一种阻塞型I/O模型,在数据的读写过程中,如果线程在等待数据,将会一直被挂...

    宕机、高cpu、慢sql等问题辅助工具v0.1.pdf

    本文档介绍了一套专门针对这些常见问题的辅助工具——宕机、高CPU、慢SQL等问题辅助工具v0.1,该工具集主要面向Java应用,并提供了一系列实用的方法和技术来帮助定位和解决问题。 #### 二、关键知识点详解 ##### 1...

    cpu打满问题分析思路

    1. **查看GC情况**:初步观察发现GC频率和内存使用情况正常,排除了GC作为CPU占用率上升的原因。 2. **线程问题排查**:通过分析线程dump文件发现,某些线程持续处于运行状态。进一步追踪发现异常发生在`...

    java的JDK资源包

    6. **Java性能分析工具**(jconsole、jvisualvm等):这些工具帮助开发者监控和分析Java应用的性能,识别内存泄漏、CPU占用过高或其他问题。 7. **Java Native Interface (JNI)**:提供了一种方式让Java代码与本地...

    性能测试报告模板

    在测试中,我们对占用 CPU 时间较多的方法进行了分析,结果表明,java.lang.reflect.Method.invoke 占用了 165% 的 CPU 时间,java.sql.PreparedStatement.execute 占用了 15.4% 的 CPU 时间,java.sql.Statement....

    java 虚拟机问题分析大全

    性能问题是JVM另一大常见问题,包括但不限于CPU占用率过高、GC频繁、响应时间长等问题。 - **性能监控**:使用JVisualVM、JConsole等工具对JVM进行实时监控,收集CPU、内存、线程等方面的数据。 - **GC日志分析**:...

    mwt——java界面开源接口

    1. **轻量级**:MWT设计时考虑了效率,因此它的内存占用和CPU使用率相对较低,这使得它在资源有限的设备上也能运行良好。 2. **美观**:MWT提供了丰富的主题和样式,可以根据不同的操作系统和设备自适应地调整界面...

    weblgicJVM内存不释放,CPU使用率居高不下建议.

    - 通过分析`javacore`文件来定位问题的具体原因,了解具体哪些对象占用了大量内存。 - 在系统压力较大的情况下,考虑增加硬件资源,如增加CPU数量或内存容量。 #### 三、优化策略与实践建议 ##### 3.1 硬件资源...

    jvm问题排查

    - 快速查找消耗资源较高的进程。 ##### 2. **jstack** - **命令格式**:`jstack [-l] pid &gt; stack.log` - **功能**:获取指定PID的Java进程的线程堆栈信息。 - **应用场景**: - 分析线程状态,如线程阻塞、死锁...

    java:将html生成图片的所有方法比较

    内存占用和性能也可能较高。 3. **使用Selenium WebDriver** - 优点:Selenium是一个强大的自动化测试工具,可以模拟浏览器行为。通过截取浏览器中的网页快照,可以生成高质量的图片,支持各种浏览器和操作系统。 ...

Global site tag (gtag.js) - Google Analytics