`
sistercry89
  • 浏览: 7486 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

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

 
阅读更多

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

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

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

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

  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

 

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

 

 

 

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

 

  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)

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

 

问题代码为:

  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以下... 就成死循环了...

现在修改为了

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


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

分享到:
评论

相关推荐

    Java聊天室程序源码(毕业设计)

    生成的聊天室可以达到基本的聊天要求,具有较高的研究价值。 系统具有目前聊天室的基本功能:包括支持多种头像,字色,语气选择,支持emote,支持私聊,支持在线聊友查找,支持分屏显示,支持用户定制自己的私人头像...

    JAVA三版本坦克大战源码

    此游戏在普通的坦克大战上进行了升级,全部共三个版本,由于某些原因第三版本尚未开发完毕,同时游戏中存在些许bug,...另外:游戏在mac上运行无差错,转到windows上发现了些许问题,猜测由于线程问题,对cpu占用率较高

    百度地图开发java源码-k8s:k8s

    在部署时,需要人工创建相应的服务器及资源,并搭建项目运行的依赖环境,预估服务需要占用的内存与CPU,同事还要考虑到高可用的部署环境,在不同配置的服务器上部署相应的服务。当服务意外崩溃或者服务器意外宕机时...

    JavaWeb在线系统问题核查

    jstack 打印占用资源较多线程代码位置 多线程问题定位:jstack快照所有线程;dump导出;使用jvisualvm分析dump文件 JVM分析:日志开启;GC日志打印;GC分析 7.服务器问题 现象:CPU使用率高;内存使用率高;...

    基于Docker实现在线评测系统的安全性

    现阶段大部分的在线评测系统都采用了C语言编写沙盒的方案,沙盒系统虽然技术...相比传统沙盒,本系统具有极高的可移植性,极大提高了技术人员的效率,并且可以更方便的控制在线评测的资源占用以提高CPU和内存的利用效率。

    测试培训教材

    原因:8080端口被其他应用程序占用。 用netstat查看谁占用了8080端口 netstat -ano 解决办法1:修改其他程序的端口使用 解决办法2:修改JBOSS的启动端口 JBOSS_HOME\server\default\deploy\jbossweb-tomcat...

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    TurboVNC-2.2.4.dmg turbovnc-viewer: 2.2.4

    但是,TurboVNC还消除了TightVNC 1.3.x用来确定子矩形是否是JPEG压缩的良好候选者的CPU占用率过高的检测例程,并且TurboVNC的编码方法倾向于更多地使用JPEG,因为现在通常使用JPEG。最快的子编码类型。此外,...

    resin-jvm 调优

    由于它比单空间共同发生收集器中断频繁,因此它需要较少的内存,应用程序的运行效率也较高,注意,过小的护理域可以导致大量的临时对象被扩展到旧域中。这会造成收集器超负荷运作,甚至采用排它性工作方式完成收集。...

    CV全自动图形图片验证码识别软件

    软件介绍 全自动图形图片验证码识别工具。 在以前的互联网是没有验证码的,后来随着一些自动程序的出现(如自动注册邮箱、自动发布...最近更新:最新的神经网络识别技术:识别率90%以上,识别速度0.1秒左右,不占用CPU

    蓝丽留言版

    蓝丽Net留言系统虽然开发的时间较短,但实为技术内涵较高,有其独特的风格特点 主要用途:使访客自由留言,管理员(站长)自由回复,或用于信息发布,资料存储 综合特点(采用较新的asp.net+xml+xsl设计,一应功能俱全,老...

    Oracle9i的init.ora参数中文说明

    如果要在没有调度程序的情况下仍能连接到数据库, 请将该值设置为与例程名相同。此参数自 8.1.3 版起已废弃。 值范围: 根据操作系统而定。 默认值 :0 mts_sessions: 说明 : 指定允许的共享服务器体系结构用户会话的...

    华为编程开发规范与案例

    与开发人员在测试组环境多次重复以上步骤,发现11群的计次表话单有时正常,有时其出中继群号就为一个随机值,发生异常的频率比较高。为什么其它群的话单正常,唯独11群不正常呢?11群是四个群中最小的群,其中继计...

    Ensemble Video Recorder-crx插件

    Ensemble Video Recorder(测试版)允许您创建屏幕和网络摄像头录像,然后使用...•屏幕录制是一项占用大量CPU的任务。如果在截屏的同时打开多个程序和选项卡,则较旧或较弱的计算机可能会滞后 支持语言:English

    手机 pdf 阅读器

    再次改进图片的阅读能力,小于100K的图片采用系统解码,采用高内存方式解码,&gt;500K采用流式解码,对于ZIP中&gt;256K的图片不再解码 修正阅读zip中大图片错误的bug 修正阅读中途出现排版错误的bug 背景图片加载的速度...

Global site tag (gtag.js) - Google Analytics