- 浏览: 366344 次
- 性别:
- 来自: 广东广州
文章分类
最新评论
-
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 6999http://download.eclipse.org/too ... -
以前正规表达式的学习笔记
2007-10-16 22:50 1279js 代码 以前正规 ... -
阿里巴巴--文字上下滚动代码
2007-10-12 14:31 2528http://www.soojs.com/t/?p=947&a ... -
Java heap space 解决方法
2007-10-12 14:20 19418因为程序要从数据读取近10W行记录处理,当读到9W的时候就出现 ... -
Struts-Layout
2007-10-07 21:47 1130... -
Java实现HTTP的断点续传
2007-08-20 14:29 1412(一)断点续传的原理 其实断点续传的原理很简单,就是在Ht ... -
Java开发框架调查:6%的JSF欲撼动21%的Struts
2007-08-15 09:17 1439来自:CSDN 马京 共有评论(25)条 发表评论 ... -
使用技巧:Java实现随机验证码功能实例
2007-08-07 21:39 4899现在许多系统的注册、登录或者<nobr>发布信息& ... -
Java老师培训讲稿
2007-08-06 21:17 1305暑期的Java老师培训这月就要在八个城市展开了,我的职责和去年 ... -
用P3P解决第三方cookie存取的问题
2007-06-29 14:48 2527... -
如何创建 Eclipse 自定义向导
2007-06-22 09:02 3454Eclipse 框架和集成开发 ... -
单元测试利器 JUnit 4
2007-06-20 10:43 2166本文主要介绍了如何使用 JUnit 4 提供的各种功能开展有效 ... -
[收藏]利用JExcelApi来动态生成excel文档
2007-06-15 08:47 2211首先,请到http://www.andykhan.com/je ... -
通过JDBC连接Oracle数据库中的十大技巧
2007-06-13 08:52 11921、在客户端软件开发中 ... -
java虚拟机jvm关于内存的设置与调优
2007-03-08 11:10 43056JVM内存的设置的原理 默认的java虚拟机的大小比较小 ... -
java读取配置文件的几种方法
2007-03-01 09:10 2721在现实工作中,我们常常需要保存一些系统配置信息, ... -
System.properties列表
2007-02-01 12:23 1432由于编辑器的原因,还是上传个附件把,大家看附件把! -
JAVA操作EXCEL文件
2007-02-01 12:21 2399使用Windows操作系统的朋友对Excel(电子表格)一定不 ... -
java进阶之字符串替换的思考
2007-01-30 17:51 1863最近在开发的过程中用到了字符串的替换, 本来觉得挺简单的问题, ... -
关于java乱码的问题小结
2007-01-30 14:55 1434在最近做审查系统相关模块时,由于是有程序去调用javac来进行 ...
相关推荐
在给定的标题"java程序自动重新启动"中,我们可以理解这是一个实现了自动重启逻辑的Java程序。描述指出,这个程序由三个.java文件组成:Test.java、Watch.java和AbstractRun.java,它们构成了一个简单的自动重启系统...
1.1 指出JAVA语言的主要特点和JAVA程序的执行过程。 5 1.2 说出开发与运行JAVA程序的重要步骤。 5 1.3 如何区分应用程序和小应用程序? 5 1.4 说出JAVA源文件的命名规则。 5 1.6 JAVA语言使用什么字符集?共有多少个...
在Windows操作系统中,Java程序...总之,将Java程序做成Windows服务,可以让程序在系统启动时自动运行,满足后台无人值守的需求。通过理解上述步骤和工具的使用,你可以有效地实现Java程序在Windows开机时随机启动。
趣味性:习题基本上覆盖了程序员在编写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中如果我们需要用到图形界面,就得想到GUI(Graphic user interface),那么我们需要用到什么,就直接去查看API(图形化显示能让我们做完项目后将结果看得舒服,而不是全部都是代码) 要做GUI,就要想到java中...
http客户端java程序,代码质量高,经过测试。
在 Web 浏览器中,Java 插件允许用户运行 Java 应用程序和小程序。但是,Java 插件也可能带来安全隐患,例如恶意代码和恶意软件的攻击。 为了禁用 Java 在 Web 浏览器中的插件,我们可以使用 Java 控制面板。在 ...
在雍俊海的《Java程序设计教程》第二版的课后答案中,学生可以通过查看提供的代码,了解各种编程问题的解决方案,学习如何组织和优化代码,同时加深对Java语言特性和编程技巧的理解。通过实践,理论知识将更加牢固,...
这个名为"生日祝福java程序代码"的压缩包显然包含了多个功能模块,旨在为生日庆祝活动增添乐趣。以下是该程序可能包含的关键知识点和组件的详细说明: 1. **Java编程基础**:首先,整个项目基于Java语言编写,这...
Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋Java SE程序 五子棋...
它的“一次编写,到处运行”(Write Once, Run Anywhere)特性使得Java程序可以在任何安装了Java虚拟机(JVM)的设备上运行,这包括个人电脑、移动设备甚至服务器。 在【LoveForEver.java】文件中,我们可以看到...
在Java程序设计方面,这本书会覆盖以下关键知识点: 1. **Java基础知识**:包括Java语法基础,如变量、数据类型、运算符、流程控制语句(如if、switch、for、while)、类与对象、封装、继承和多态等面向对象概念。 ...
Java程序设计笔试试卷和答案(共2套): 《Java程序设计》笔试卷A.doc ; 《Java程序设计》笔试卷A答案.doc ; 《Java程序设计》笔试卷B.doc ; 《Java程序设计》笔试卷B答案.doc Java程序设计上机考试试卷和答案...
1. **猜数字游戏**:这是许多初学者都会接触到的经典Java程序。通过随机生成一个数字,让玩家猜测,然后提供反馈(过高、过低或正确),直到猜对为止。这个程序可以帮助学习者理解基本的输入输出、条件判断和循环...
=、>、<、>=、)的例题,这些基础知识是编写任何JAVA程序的基础。 控制流程是程序设计的关键部分,包括条件语句(if-else、switch)和循环结构(for、while、do-while)。通过解决书中关于这些话题的例题,学习者能...
java分布式程序设计 java分布式程序设计 java分布式程序设计java分布式程序设计java分布式程序设计java分布式程序设计java分布式程序设计java分布式程序设计java分布式程序设计java分布式程序设计
Java程序设计教程第七版是Java学习者的重要参考资料,其课后习题答案对于巩固理论知识、提高编程技能具有极大帮助。本教程涵盖了Java语言的基础到高级特性,包括但不限于语法、面向对象编程、异常处理、集合框架、多...
1. **自动查找JRE**:工具会自动检测系统中的Java运行时环境,使得即使在没有预设环境变量的情况下也能正常运行Java程序。 2. **智能管理类路径**:用户可以通过配置文件或默认设置告知startJava需要加载的类路径,...