- 浏览: 359214 次
- 性别:
- 来自: 广东广州
文章分类
最新评论
-
javaAlpha:
我现在也是一直出现这样的错误。也是java调用。net的接口A ...
关于java调用.net webserivce出现: 服务器无法处理请求。 --> 未将对象引用设置到对象的实例 -
javalover1:
贴出你的代码供大家学习学习啦
验证码的破解思路! -
liaolliso:
你好,请问你的最后一种方法,怎么从rgb值里 直接将每个部分的 ...
验证码的破解思路! -
tant:
天涯之海 写道从网页的session里下手好些吧
请问怎样从 ...
验证码的破解思路! -
wilddonkey:
lz此言说的到位啊
现实中很多人在这样的公司还没有做到了解这个 ...
转: 如何在管理不规范的公司中生存
经常被客户问到这样的问题,我想知道我的Java应用到底在干什么?通常我会反问一句:你为什么想知道呢?得到的回答是,这个Java应用太耗用CPU的资源了,想知道它都耗在哪儿了!
我的这些客户其实都有一定的经验,他们知道怎样通过操作系统的工具和命令来查看某个应用对CPU的资源消耗。例如在Solaris中的prstat命令,就可以得到下面的输出
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
22227 root 706M 568M cpu19 0 0 17:34:33 82% appservDAS/89
24348 root 570M 439M sleep 59 0 0:00:05 0.7% Xorg/15
9053 root 215M 134M sleep 1 0 5:55:37 0.5% java/10
18879 root 500M 386M sleep 59 0 0:32:01 0.0% Oracle/58
24482 root 3384K 2936K cpu0 49 0 0:00:00 0.0% prstat/1
........
Total: 72 processes, 1483 lwps, load averages: 3.39, 3.40, 3.31
从上面的输出很容易判断哪个应用占用了多少CPU的资源。例如上面的例子JavaEE应用服务器“appservDAS”占用了82%的CPU资源。appservDAS的进程其实就是Java应用。那么要进一步判断这个进程为什么消耗了这么多的CPU呢?这不是件容易的事。我的客户先是获得了Java进程的一个快照,也叫ThreadDump。这很简单,只需要kill -3 22227就可以给这个Java进程一个信号,要求它打印出所有当前的线程调用栈。结果如下:
Full thread dump Java HotSpot(TM) Server VM (1.5.0_09-b03 mixed mode):
"RMI ConnectionExpiration-[10.1.4.206:43996,com.sun.appserv.management.client.AdminRMISSLClientSocketFactory@807653]" daemon prio=10 tid=0x028cb120 nid=0x24f6 waiting on condition [0xc30ff000..0xc30ffbf0]
at java.lang.Thread.sleep(Native Method)
at sun.rmi.transport.tcp.TCPChannel$Reaper.run(TCPChannel.java:446)
at java.lang.Thread.run(Thread.java:595)
"RMI TCP Connection(4205)-10.1.4.206" daemon prio=10 tid=0x0110eb30 nid=0x24f4 runnable [0xc31ff000..0xc31ffaf0]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293)
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:331)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:723)
- locked <0xf7362488> (a java.lang.Object)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:680)
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75)
- locked <0xf7362498> (a com.sun.net.ssl.internal.ssl.AppInputStream)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
- locked <0xf325e540> (a java.io.BufferedInputStream)
at java.io.FilterInputStream.read(FilterInputStream.java:66)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:448)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
at java.lang.Thread.run(Thread.java:595)
"service-j2ee" daemon prio=10 tid=0x01c080d8 nid=0x811 runnable [0x00000000..0xc60ff7e0]
"service-j2ee" daemon prio=10 tid=0x01d78e60 nid=0x812 runnable [0x00000000..0xc541f7e0]
"service-j2ee" daemon prio=10 tid=0x010c98a0 nid=0x813 runnable [0x00000000..0xc53cf7e0]
"service-j2ee" daemon prio=10 tid=0x01d7b110 nid=0x814 runnable [0x00000000..0xc516f7e0]
.......
原谅我不把所有的长长的输出都写在这,总之很长,想想,有89个线程呢!从这里能看出什么来吗?能看出哪个线程花费了多少CPU吗?看不出来,因为快照是个静态的数据,只能知道当前每个线程在做什么,但是哪个线程花的CPU多就不得而知了。
通常要知道你的应用哪些部分花费的CPU资源多,需要profiling的工具(例如NetBeans的Profiler),但是这些工具使用和部署起来还是比较麻烦的,而且不适用于生产系统。下面提供一个简单的方法来快速的判断:
1 使用prstat的时候加上-L的参数,你就能获得每个操作系统的线程所消耗的资源。例如:
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/LWPID
22227 root 706M 568M cpu19 0 0 17:34:33 23% appservDAS/89
22227 root 706M 568M cpu19 0 0 17:34:33 12% appservDAS/54
22227 root 706M 568M cpu19 0 0 17:34:33 10% appservDAS/31
22227 root 706M 568M cpu19 0 0 17:34:33 10% appservDAS/12
24348 root 570M 439M sleep 59 0 0:00:05 0.7% Xorg/15
9053 root 215M 134M sleep 1 0 5:55:37 0.5% java/10
18879 root 500M 386M sleep 59 0 0:32:01 0.0% Oracle/58
24482 root 3384K 2936K cpu0 49 0 0:00:00 0.0% prstat/1
........
Total: 72 processes, 1483 lwps, load averages: 3.39, 3.40, 3.31
这时候你能获得比刚才更详细的信息:哪个线程花费了多少CPU。但是这个线程号如何与Java Thread Dump文件中对应起来呢。很简单,在Java Thread Dump文件中,每个线程都有tid=...nid=...的属性,其中nid就是native thread id,也就是只的是LWPID号,只不过nid中用16进制来表示。例如上面的例子中,从prstat中,获得appservDAS的第89个线程消耗了很大的CPU,89的16进制是0x59,找到下面的线程:
"service-j2ee" daemon prio=10 tid=0x016158e8 nid=0x59 runnable [0xc789e000..0xc789f7e0]
at com.sun.enterprise.web.connector.httpservice.HttpServiceConnector.jniRead(Native Method)
at com.sun.enterprise.web.connector.httpservice.HttpServiceConnector.read(HttpServiceConnector.java:283)
at com.sun.enterprise.web.connector.httpservice.HttpServiceRequestStream.read(HttpServiceRequestStream.java:55)
at org.apache.jsp.mod_005fdms.commons.iWebServer_jsp$iWebSignature.ReadPackage(iWebServer_jsp.java:400)
at org.apache.jsp.mod_005fdms.commons.iWebServer_jsp$iWebSignature.ExecuteRun(iWebServer_jsp.java:459)
at org.apache.jsp.mod_005fdms.commons.iWebServer_jsp._jspService(iWebServer_jsp.java:672)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:105)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:860)
....
就可以快速判断这个Java应用的资源消耗大概在什么地方了!
发表评论
-
Visual Editor插件下载、安装问题(Eclipse3.1.1) 及解决办法
2007-12-03 12:11 6922http://download.eclipse.org/too ... -
以前正规表达式的学习笔记
2007-10-16 22:50 1243js 代码 以前正规 ... -
阿里巴巴--文字上下滚动代码
2007-10-12 14:31 2498http://www.soojs.com/t/?p=947&a ... -
Java heap space 解决方法
2007-10-12 14:20 19359因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 ... -
Struts-Layout
2007-10-07 21:47 1084... -
Java实现HTTP的断点续传
2007-08-20 14:29 1379(一)断点续传的原理 其实断点续传的原理很简单,就是在Ht ... -
Java开发框架调查:6%的JSF欲撼动21%的Struts
2007-08-15 09:17 1389来自:CSDN 马京 共有评论(25)条 发表评论 ... -
使用技巧:Java实现随机验证码功能实例
2007-08-07 21:39 4822现在许多系统的注册、登录或者<nobr>发布信息& ... -
Java老师培训讲稿
2007-08-06 21:17 1262暑期的Java老师培训这月就要在八个城市展开了,我的职责和去年 ... -
用P3P解决第三方cookie存取的问题
2007-06-29 14:48 2459... -
如何创建 Eclipse 自定义向导
2007-06-22 09:02 3362Eclipse 框架和集成开发 ... -
单元测试利器 JUnit 4
2007-06-20 10:43 2103本文主要介绍了如何使用 JUnit 4 提供的各种功能开展有效 ... -
[收藏]利用JExcelApi来动态生成excel文档
2007-06-15 08:47 2155首先,请到http://www.andykhan.com/je ... -
通过JDBC连接Oracle数据库中的十大技巧
2007-06-13 08:52 11481、在客户端软件开发中 ... -
java虚拟机jvm关于内存的设置与调优
2007-03-08 11:10 43010JVM内存的设置的原理 默认的java虚拟机的大小比较小 ... -
java读取配置文件的几种方法
2007-03-01 09:10 2666在现实工作中,我们常常需要保存一些系统配置信息, ... -
System.properties列表
2007-02-01 12:23 1353由于编辑器的原因,还是上传个附件把,大家看附件把! -
JAVA操作EXCEL文件
2007-02-01 12:21 2354使用Windows操作系统的朋友对Excel(电子表格)一定不 ... -
java进阶之字符串替换的思考
2007-01-30 17:51 1817最近在开发的过程中用到了字符串的替换, 本来觉得挺简单的问题, ... -
关于java乱码的问题小结
2007-01-30 14:55 1393在最近做审查系统相关模块时,由于是有程序去调用javac来进行 ...
相关推荐
关于java程序java程序java程序 有java程序和界面图表
java语言是一种可以撰写跨平台应用软件的面向对象程序设计语言和平台由当时任职太阳微系统的詹姆斯高斯林jamesgosling等人于1990年代初开发它最初被命名为oak后1995年改名javajava随着互联网的迅猛发展而发展逐渐...
Java的小程序Java程序下载Java程序下载Java程序下载Java程序下载Java程序下载Java程序下载Java程序下载Java程序下载Java程序下载
java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序java全屏程序
java聊天程序java聊天程序java聊天程序java聊天程序java聊天程序java聊天程序java聊天程序java聊天程序
1.1 指出JAVA语言的主要特点和JAVA程序的执行过程。 5 1.2 说出开发与运行JAVA程序的重要步骤。 5 1.3 如何区分应用程序和小应用程序? 5 1.4 说出JAVA源文件的命名规则。 5 1.6 JAVA语言使用什么字符集?共有多少个...
Java程序性能优化 让你的Java程序更快、更稳定Java程序性能优化 让你的Java程序更快、更稳定
这是我大学期间java程序设计课程所写的所有java程序,值得大家借鉴!
提供了访问该类在方法去内的数据结构的接口。 类加载有类加载器完成: 类加载器分为:Java虚拟机自带的加载器和用户自定义的类加载器; Java虚拟机自带的类加载器包括:启动类加载器,扩展类加载器,系统类加载器三...
趣味性:习题基本上覆盖了程序员在编写Java程序时经常出现的问题Java程序设计知识要点,各习题也列出其测试要点,从而方便教师从中挑选或改编考题以及方便学生进行实战模拟练习或测试,同时也可以为SCJP考试作准备...
Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE程序 皮肤Java SE...
Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE程序 递归Java SE...
安全的编写多线程的_Java_应用程序安全的编写多线程的_Java_应用程序
在java中如果我们需要用到图形界面,就得想到GUI(Graphic user interface),那么我们需要用到什么,就直接去查看API(图形化显示能让我们做完项目后将结果看得舒服,而不是全部都是代码) 要做GUI,就要想到java中...
使用命令行方式开发Java程序 使用命令行方式开发Java程序 Java程序的运行机制 了解Java程序的运行机制 掌握使用命令行方式开发Java程序的步骤 Java程序的运行机制 编写源程序 编译源程序 由Java解释器解释运行 字节...
如何用Java开发地理位置应用程序?Java开发Java经验技巧共4页.pdf.zip
java程序java程序jjava程序java程序java程序ava程序
http客户端java程序,代码质量高,经过测试。
Java语言程序设计 Java语言程序设计 Java语言程序设计 Java语言程序设计 Java语言程序设计 Java语言程序设计 Java语言程序设计
JAVA聊天程序JAVA聊天程序JAVA聊天程序JAVA聊天程序JAVA聊天程序JAVA聊天程序JAVA聊天程序JAVA聊天程序JAVA聊天程序JAVA聊天程序JAVA聊天程序