reference
http://www.blogjava.net/sutao/articles/134085.html
http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/diag/appendixes/env_var/env_jvm.html
http://johnsonyang.iteye.com/
http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/diag/appendixes/defaults.html
http://www-01.ibm.com/software/support/isa
http://www.alphaworks.ibm.com/tech/heapanalyzer/download
http://www.alphaworks.ibm.com/tech/jca/download
http://www.alphaworks.ibm.com/tech/pmat/download
http://h20392.www2.hp.com/portal/swdepot/displatProductInfo.do?productNumber=HPJMETER
http://www.eclipse.org/mat/
http://www.ibm.com/developerworks/java/jdk/tools/dtfj.html
http://download.oracle.com/docs/cd/E13150_01/jrockit_jvm/jrockit/tools/index.html
Linux System and Performance Monitoring(总结篇)
http://www.hashei.me/2009/09/linux_system_and_performance_monitoring_summary.html
RedHat Enterprise Linux 3 update 7
Dell 1850 Dual Core Xenon Processors, 2 GB RAM, 75GB 15K Drives
Custom LAMP software stack(译注:Llinux+apache+mysql+php 环境)
1. 首先使用vmstat 查看大致的系统性能情况:
# vmstat 1 10
分析:
1,不会是内存不足导致,因为swapping 始终没变化(si 和 so).尽管空闲内存不多(free),但swpd 也没有变化.
2,CPU 方面也没有太大问题,尽管有一些运行队列(procs r),但处理器还始终有50% 多的idle(CPU id).
3,有太多的上下文切换(cs)以及disk block从RAM中被读入(bo).
4,CPU 还有平均20% 的I/O 等待情况.
结论:
从以上总结出,这是一个I/O 瓶颈.
2. 然后使用iostat 检查是谁在发出IO 请求:
# iostat -x 1
分析:
1,看上去只有/dev/sda3 分区很活跃,其他分区都很空闲.
2,差不多有1200 读IOPS,磁盘本身是支持200 IOPS左右(译注:参考之前的IOPS 计算公式).
3,有超过2秒,实际上没有一个读磁盘(rkb/s).这和在vmstat 看到有大量I/O wait是有关系的.
4,大量的read IOPS(r/s)和在vmstat 中大量的上下文是匹配的.这说明很多读操作都是失败的.
结论:
从以上总结出,部分应用程序带来的读请求,已经超出了I/O 子系统可处理的范围.
3. 使用top 来查找系统最活跃的应用程序
# top -d 1
[root@app01 ~]# top -n 1 -b > /root/top_$(date +%H:%M:%S).txt
分析:
1,占用资源最多的好像就是mysql 进程,其他都处于完全idle 状态.
2,在top(wa) 看到的数值,和在vmstat 看到的wio 数值是有关联的.
结论:
从以上总结出,似乎就只有mysql 进程在请求资源,因此可以推论它就是导致问题的关键.
4. 现在已经确定是mysql 在发出读请求,使用strace 来检查它在读请求什么.
# strace -p 14939
分析:
1,大量的读操作都在不断寻道中,说明mysql 进程产生的是随机IO.
2,看上去似乎是,某一sql 查询导致读操作.
结论:
从以上总结出,所有的读IOPS 都是mysql 进程在执行某些读查询时产生的.
5. 使用mysqladmin 命令,来查找是哪个慢查询导致的.
# ./mysqladmin -pstrongmail processlist
分析:
1,MySQL 数据库里,似乎在不断的运行table update查询.
2,基于这个update 查询,数据库是对所有的table 进行索引.
结论:
从以上总结出,MySQL里这些update 查询问题,都是在尝试对所有table 进行索引.这些产生的读请求正是导致系统性能下降的原因.
后续
把以上这些性能信息移交给了相关开发人员,用于分析他们的PHP 代码.一个开发人员对代码进行了临时性优化.某个查询如果出错了,也最多到100K记录.数据库本身考虑最多存在4百万记录.最后,这个查询不会再给数据库带来负担了.
References
• Ezlot, Phillip – Optimizing Linux Performance, Prentice Hall, Princeton NJ 2005 ISBN – 0131486829
• Johnson, Sandra K., Huizenga, Gerrit – Performance Tuning for Linux Servers, IBM Press, Upper Saddle River NJ 2005 ISBN 013144753X
• Bovet, Daniel Cesati, Marco – Understanding the Linux Kernel, O’Reilly Media, Sebastoppl CA 2006, ISBN 0596005652
• Blum, Richard – Network Performance Open Source Toolkit, Wiley, Indianapolis IN 2003, ISBN 0-471-43301-2
• Understanding Virtual Memory in RedHat 4, Neil Horman, 12/05 http://people.redhat.com/nhorman/papers/rhel4_vm.pdf
• IBM, Inside the Linux Scheduler, http://www.ibm.com/developerworks/linux/library/l-scheduler/
• Aas, Josh, Understanding the Linux 2.6.8.1 CPU Scheduler, http://josh.trancesoftware.com/linux/linux_cpu_scheduler.pdf
• Wieers, Dag, Dstat: Versatile Resource Statistics Tool, http://dag.wieers.com/home-made/dstat/
常用 Java Profiling 工具的分析与比较
http://www.oschina.net/question/12_10515
Eclipse TPTP / Eclipse Code Pro Profiler / Yourkit Java Profiler / Java JProfiler
目前市场上常见的几种 Java Profiler 工具进行介绍。TPTP
TPTP(Test and Performance Tools Platform)是 eclipse 官方的 Profiling 工具插件。TPTP 提供了诸如测试,追踪(trace),性能测试,图形界面性能分析等功能。同时 TPTP 还是一个可扩展的开发平台框架,你可以对它加以扩展集成到你自己的产品中。TPTP 可以通过 Eclipse update Manager 或者是安装包进行安装,安装成功后会在 eclipse 中增加如下所示的按钮,另外一个专门的用于检查 TPTP profiling 结果的 perspective 也会添加进 eclipse 中,如下图所示:
http://www.oschina.net/p/eclipse+tptp/
Eclipse TPTP由4个子项目构成:
- Platform(TPTP平台):该项目构成了TPTP的核心部分,也是TPTP其他子项目的基础。
- Testing Tools(测试工具):该项目对TPTP Platform做了扩展,可用于应用程序的测试阶段,提供测试的定义,测试结果的报表等功能。
- Tracing & Profiling Tools (跟踪,收集分析工具): 该工具也对TPTP Platform做了扩展,它提供了代码的追踪,收集和分析等工具,同时还可以通过JVMPI(Java Virtual Machine Profiler Interface)agent与其他Java程序交互,从而可以方便地收集程序的运行情况,分析是否存在内存泄漏等。
- Motoring Tools(监测工具):该工具可用于应用程序生命周期的监测.日志阶段,包含了一套对系统的运行时的CPU/内存的使用状态等衡量系统或服务器的性能情况加以检测的工具。
CodePro Profiler
CodePro Profiler 是由 instantiations 公司推出的一款商用 eclipse 插件,它可以通过 Eclipse update Manager 进行安装或者是将安装包直接解压缩后保存在 eclipse 的指定目录下。与 TPTP 类似,安装成功后,有一个专门的用于查看 CodePro profiling 结果的 perspective 会添加进 eclipse 中,如下图所示:
YourKit Profiler
YourKit Java Profiler 也是一款商用软件,支持的操作系统包括:Windows, Linux, FreeBSD, Mac OS X, Solaris 以及 HP-UX;支持的 IDE 包括:Eclipse, JBuilder, JDeveloper, NetBeans 以及 Intellij IDEA。安装成功且首次启动 YourKit Java Profiler 后,会弹出一个对话框,让用户选择 YourKit Java Profiler 要集成进的 IDE,并指定该 IDE 的安装路径,点击”Install Plugin”按钮并集成成功之后,Eclipse 中会出现如下图标,用户就可以从 Eclipse 中启动 Profiling,但是 profiling 的结果需要在 YourKit Java Profiler 中进行查询,如下图所示:
JProfiler
JProfiler 是由 ej-technologies 推出的一款商用软件,支持的操作系统有:Windows, Linux, Mac OS X, FreeBSD, Solaris, AIX 以及 HP-UX;支持的 IDE 包括:Eclipse, NetBeans, Intellij IDEA, JBuiler 以及 JDeveloper。安装成功并首次启动 JProfiler 后,会弹出一个设置界面,当完成左栏所示的那些步骤后,Eclipse 中就会出现如下图标,用户就可以从 Eclipse 中启动 Profiling。与 YourKit Java Profiler 类似,profiling 的结果需要在 JProfiler 中进行查询,如下图所示:
Eclipse TPTP / Eclipse Test and Performance Tools Platform Project
http://www.eclipse.org/tptp/
http://www.eclipse.org/tptp/platform/documents/tutorials/jvmti/Java_Application_Profiling_using_TPTP-v2.0.html
http://www.iteye.com/topic/111683
http://www.iteye.com/topic/768863
http://www.iteye.com/topic/1122556
WASmon
YourKit Java Profiler 12.0.2
http://www.yourkit.com/docs/80/help/complete_eclipse34.jsp
http://www.yourkit.com/download/yjp-12.0.2.exe
http://sunxboy.iteye.com/blog/754516
http://zhwj184.iteye.com/blog/764575
http://www.iteye.com/topic/582402
http://www.iteye.com/news/2663
Windows (x86, x64)
Download and run installer
Mac OS X (Intel)
Use Mountain Lion (10.8)? Read this first!
Download and unpack zipped application
Linux (x86, x64, ARM, ppc, ppc64)
Download tar.bz2 archive
Unpack: tar xfj
Launch bin/yjp.sh
Solaris (SPARC, x86, x64)
Download and unpack ZIP archive
Launch bin/yjp.sh
HP-UX (IA64, 32- and 64-bit)
AIX (ppc, ppc64)
FreeBSD (x86, x64)
JVM heap space 和 permgen space 溢出的简单解决方法和原理笔记
http://zhangmeng.blog.51cto.com/310854/229377/
1 . PermGen space
http://lichen0921.iteye.com/blog/451092
全称是Permanent Generation space ,是指内存的永久保存区域.
用于存放,Class和Meta的信息,Class在被 Load的时候被放入PermGen space 区域.所以当我们的应用服务器在启动的时候会加载很多的CLASS的时候会出现OutOfMemoryError: PermGen spac的错误. 解决方法自然也就是要加大应用服务器在jvm启动时候所需要初始化的perGen space的size 了,一般是在应用服务器的启动参数的jvm配置中加入 :
-XX:MaxNewSize=256m -XX:MaxPermSize=256m
2. Heap space
Heap psace与permGen区域存放的东西不同,主要是存放java运行时产生的对象,他们是GC(Garbage Collection)在运行期间会定时进行清理的.所以当在JVM中如果98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出"java.lang.OutOfMemoryError: Java heap space "的错误.原因是对象的产生上限以达到jvm的上限 . 解决办法自然是设置更大的jvm的heap space size:
这就是为什么我们要在应用服务器的jvm启动参数上加上 -Xms256m -Xmx256m 参数的原因.
IBM Support Assistant V4.1
MDD4J / Memory Dump Diagnostic for Java
权威支持: 利用 Memory Dump Diagnostic for Java (MDD4J) 分析内存管理问题
http://www.ibm.com/developerworks/cn/websphere/techjournal/0909_supauth/0909_supauth.html
Borland 的Optimizeit Suite,
Dell Quest的JProbe,
ej-technologies的JProfiler
Sun和JRockit JVM 之差异
http://sslaowan.iteye.com/blog/1572238
1 Sun的hotspot是解释加JIT,而JRockit上来就JIT,没有解释器。
Sun分C1,C2,JRockit不分。
Sun可以设定执行多少次后开始优化,JRockit没法设置
Sun可以设置直接优化什么类什么方法,JRockit可以设置不优化什么类什么方法:
关闭某个类方法的代码优化的方法:
在启动参数中添加:
-XX:+UnlockDiagnosticVMOptions -XX:OptFile=filename(如d:/noopt.txt)
并在noopt.txt文件中写下如下内容:
{
match: "com/yourcompany/Foo.bar",
hotspot : { enable : false },
}
2 Sun有PerGen,JRockit没有
3 Sun的GC是分代收集,JRockit的会动态智能选择,可能分代,也可能不分代。
使用MAT分析内存泄露
http://www.taobaotest.com/blogs/qa?bid=14264
http://www.blogjava.net/rosen/archive/2010/05/21/321575.html
http://www.blogjava.net/rosen/archive/2010/06/13/323522.html
http://medy13.iteye.com/blog/695741
Websphere:使用 TPV监视JVM
http://blog.chinaunix.net/u/32831/showart_386177.html
https://192.168.130.113:9043/ibm/console/secure/help_console.jsp?helpfile=com.ibm.ws.console.tpv/nl/zh/uprf_tpvserverview.html
jconsole工具介绍
http://docs.oracle.com/javase/6/docs/technotes/guides/management/jconsole.html
http://marshal.iteye.com/blog/138879
JDK NEW TOOLS——jps、jinfo、jstat、jmap、jconsole 、jstack
http://whythiszhao.iteye.com/blog/492176
jconsole+tomcat5.0配置说明
http://shshy39.iteye.com/blog/512613
为JMX JConsole设置用户名密码登录
http://blog.csdn.net/feg545/article/details/8124267
JMX监控Tomcat
http://blog.csdn.net/airobot008/article/details/3951524
jboss jmx-console 与 web-console 进入需要用户名密码 设置
blog.163.com/swim_fish/blog/static/19089930220111113104497/
C:\Program Files\Java\jdk1.7.0_10\bin\jconsole.exe /?
使用 JDK 6 中的 JConsole 监控应用(原创)
http://www.blogjava.net/beansoft/archive/2006/12/13/87494.html
http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html
http://docs.sun.com/app/docs/doc/820-0847/6ncidmgjn?l=zh&a=view#gcsnf
http://java.sun.com/javase/6/docs/technotes/guides/management/jconsole.html
jps:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html
jstat:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstat.html
jmap:http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html
jconsole:http://java.sun.com/j2se/1.5.0/docs/guide/management/jconsole.html
Jconsole简介:
Jconsole是一个JMX兼容的监视工具。它使用Java虚拟机的JMX机制来提供运行在Java平台的应用程序的性能与资源耗费信息。
开始jconsole
Jconsole应用程序位于JDK_HOME/bin目录下。
命令语法:
可以使用jconsole监视本地应用程序和远程应用程序。
注意:在开发阶段或者原型阶段,使用jconsole监视本地应用程序是很有用的,但是不建议在生产环境中使用,因为jconsole本身也将显著的消耗系统资源。推荐使用远程监视来将jconsole和被监视平台孤立开。查看jconsole详细语法:jconsole - Java Monitoring and Management Console.
本地监视 :
1、如果启动的工程和jdk在同一台机器,在local中可以直接看到类,点击连接就ok(如果在开发工具(如:myeclipse)启动tomcat,将无法看到上面的界面,最好通过startup.bat启动)。
2、启动jconsole使用的用户id必须和被监视程序的用户id一致。启动本地监控的命令语法如下:
Jconsole [processed]
得到进程号(PID)的办法:
Unix/Linux:使用ps查看java进程的PID
Windows:任务管理器查看java或者javaw进程的PID
也可以使用jps命令行工具 查看PIDs
例子:如果你发现notepad.jar应用程序的PID为2956,则可以通过如下命令启动jconsole:
jconsole 2956
jconsole和被监视的应用程序必须是使用同一个用户运行的。管理和监视系统使用操作系统的文件权限。
如果你没有指定PID,jconsole会自动的探测出本地运行的所有java应用程序并显示一个对话框让你选择你想监控的程序
详细信息见:Local JMX Monitoring and Management.
远程监视 :
如果启动的工程和jdk不在同一台机器,可以使用remote方式。在主机部分输入ip:10.226.0.91 端口输入:8086(配置的:-Dcom.sun.management.jmxremote.port),然后点击连接。
使用如下命令启动jconsole进行远程监视:
jconsole [hostname:portNum]
Hostname是被监控系统主机名,portNum是当你启动JVM,打开JMX代理之后指定的端口号。详细信息见:Remote JMX Monitoring and Management.
如果你没有指定主机名/端口号,那么jconsole会显示一个连接对话框来输入主机名和端口号。
修改catalina脚本
Windows平台:修改catalina.bat,在dorun和dostart段开头增加一行(注意是一行,端口不能与工程访问端口一样):
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port="9004"
-Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"
Unix/Linux平台:修改catalina.sh,在dorun和dostart段开头增加一行(注意是一行):
JAVA_OPTS="$JAVA_OPTS "-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port="9004"
-Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"
JAVA Visual VM 入门指南
http://visualvm.dev.java.net/
http://dl.iteye.com/topics/download/61601d05-1789-3996-bdf9-d9862ede7025
http://dl.iteye.com/topics/download/a7bc3c4f-f1b9-358e-b3b6-41bc85c55c22
远程监控JVM--VisualVM
http://www.iteye.com/topic/516447
http://www.oschina.net/p/visualvm
Visual JVM - 一个帮助我们查看JVM线程、对象等的方便工具
http://jasonwang168.iteye.com/blog/429481
C:\Program Files\Java\jdk1.7.0_10\bin\jvisualvm.exe
获取的某些校准数据如下所示:
一个 methodEntry()/methodExit() 调用对的近似时间:
仅获取绝对时间戳时:0.3087 微秒
仅获取线程 CPU 时间戳时:0.4242 微秒
同时获取两个时间戳时:0.6301 微秒
在抽样分析模式下,一个 methodEntry()/methodExit() 调用对
的近似时间:0.1092 微秒
C:\Program Files\Java\jdk1.7.0_10\bin\jvisualvm.exe
jvisualvm.exe for Windows
C:\Program Files\Java\jdk1.7.0_11\bin\jvisualvm.exe
jvisualvm for RedHat Linux
[root@Loadrunner19 ~]# /opt/soft/jdk1.7.0_11/bin/jvisualvm -?
或
[root@Loadrunner19 ~]# /opt/soft/jdk1.7.0_11/bin/jvisualvm --help
Win7x64 JDK7x64的jvisualvm监控Linux x86-64 WebSphere 7.0 x64 / Linux x86-64 WAS7.0 x64
https://192.168.157.79:9043/ibm/console/login.do?action=secure
登录WAS控制台 > 服务器 > 服务器类型 > WebSphere Application Server > server1 > 服务器基础结构 > Java 和进程管理 > 进程定义 > Java 虚拟机 > 通用 JVM 参数
输入如下JMX参数,重启server1,然后win7 jdk7里的jvisualvm(本机JDK版本须等于或高于157.79 Linux服务器的JDK)监测linux jvm jmx,ok
在WAS应用实例server1 -- 进程定义-- JAVA虚拟机 -- 通用JVM参数如上图,加入下面参数,无换行。
-Djavax.management.builder.initial=
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=9992
-Djava.rmi.server.hostname=192.168.157.79
jvisualvm 探测Linux主机基本信息
主机 IP: 192.168.157.79
主机名: 192.168.157.79
操作系统: Linux (2.6.18-194.el5)
体系结构: amd64 64bit
处理器: 2
物理内存总大小: 3,949.7 MB
交换空间大小: 0 MB
jvisualvm 探测Linux主机WAS应用实例server1 ---- JAVA进程信息
PID: 3109
主机: 192.168.157.79
主类: <未知>
参数: <无>
JVM: IBM J9 VM (2.4, J2RE 1.6.0 IBM J9 2.4 Linux amd64-64 jvmxa6460-20080816_22093 (JIT enabled, AOT enabled)
J9VM - 20080816_022093_LHdSMr
JIT - r9_20080721_1330ifx2
GC - 20080724_AA_CMPRSS)
Java: 版本 1.6.0, 供应商 IBM Corporation
Java Home 目录: /opt/IBM/WebSphere/AppServer/java/jre
JVM 标志: <无>
出现 OOME 时生成堆 dump: 禁用
jvisualvm 探测Linux主机JAVA进程WAS应用实例server1 ---- JVM 参数
注:这里的WAS应用主机LINUX有双网卡,所以WAS 应用实例server1 JVM参数得加入java.rmi.server.hostname=192.168.157.79固定java jvm jmx port=9992,以便jvisualvm
可探测
-Xjcl:jclscar_24
-Dcom.ibm.oti.vm.bootstrap.library.path=/opt/IBM/WebSphere/AppServer/java/jre/lib/amd64/compressedrefs:/opt/IBM/WebSphere/AppServer/java/jre/lib/amd64
-Dsun.boot.library.path=/opt/IBM/WebSphere/AppServer/java/jre/lib/amd64/compressedrefs:/opt/IBM/WebSphere/AppServer/java/jre/lib/amd64
-Djava.library.path=/opt/IBM/WebSphere/AppServer/java/jre/lib/amd64/compressedrefs:/opt/IBM/WebSphere/AppServer/java/jre/lib/amd64:/opt/IBM/WebSphere/AppServer/bin::/usr/lib
-Djava.home=/opt/IBM/WebSphere/AppServer/java/jre
-Djava.ext.dirs=/opt/IBM/WebSphere/AppServer/java/jre/lib/ext
-Duser.dir=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01 _j2se_j9=1119744
-Xdump
-Djava.class.path=.
-Declipse.security
-Dwas.status.socket=41004
-Dosgi.install.area=/opt/IBM/WebSphere/AppServer
-Dosgi.configuration.area=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/configuration
-Djava.awt.headless=true
-Dosgi.framework.extensions=com.ibm.cds,com.ibm.ws.eclipse.adaptors
-Xshareclasses:name=webspherev70_%g,groupAccess,nonFatal
-Xscmx50M
-Xbootclasspath/p:/opt/IBM/WebSphere/AppServer/java/jre/lib/ext/ibmorb.jar:/opt/IBM/WebSphere/AppServer/java/jre/lib/ext/ibmext.jar
-Djava.class.path=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/properties:/opt/IBM/WebSphere/AppServer/properties:/opt/IBM/WebSphere/AppServer/lib/startup.jar:/opt/IBM/WebSphere/AppServer/lib/bootstrap.jar:/opt/IBM/WebSphere/AppServer/lib/jsf-nls.jar:/opt/IBM/WebSphere/AppServer/lib/lmproxy.jar:/opt/IBM/WebSphere/AppServer/lib/urlprotocols.jar:/opt/IBM/WebSphere/AppServer/deploytool/itp/batchboot.jar:/opt/IBM/WebSphere/AppServer/deploytool/itp/batch2.jar:/opt/IBM/WebSphere/AppServer/java/lib/tools.jar
-Dibm.websphere.internalClassAccessMode=allow
-verbose:jni
-verbose:gc
-Xms512m
-Xmx768m
-Xcompressedrefs
-Dws.ext.dirs=/opt/IBM/WebSphere/AppServer/java/lib:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/classes:/opt/IBM/WebSphere/AppServer/classes:/opt/IBM/WebSphere/AppServer/lib:/opt/IBM/WebSphere/AppServer/installedChannels:/opt/IBM/WebSphere/AppServer/lib/ext:/opt/IBM/WebSphere/AppServer/web/help:/opt/IBM/WebSphere/AppServer/deploytool/itp/plugins/com.ibm.etools.ejbdeploy/runtime
-Dderby.system.home=/opt/IBM/WebSphere/AppServer/derby
-Dcom.ibm.itp.location=/opt/IBM/WebSphere/AppServer/bin
-Djava.util.logging.configureByServer=true
-Duser.install.root=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01
-Dwas.install.root=/opt/IBM/WebSphere/AppServer
-Dpython.cachedir=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/temp/cachedir
-Djava.util.logging.manager=com.ibm.ws.bootstrap.WsLogManager
-Dserver.root=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01
-Dcom.ibm.security.jgss.debug=off
-Dcom.ibm.security.krb5.Krb5Debug=off
-Djavax.management.builder.initial=
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=9992
-Djava.rmi.server.hostname=192.168.157.79
-Djava.security.auth.login.config=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/properties/wsjaas.conf
-Djava.security.policy=/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/properties/server.policy
-Dsun.java.command=com.ibm.wsspi.bootstrap.WSPreLauncher
-nosplash
-application com.ibm.ws.bootstrap.WSLauncher com.ibm.ws.runtime.WsServer /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/config Loadrunner19Cell01 Loadrunner19Node01 server1
-Dsun.java.launcher=SUN_STANDARD
-Dsun.java.launcher.pid=3109 _port_library
jvisualvm 探测Linux主机JAVA进程WAS应用实例server1 ---- 系统属性
注:这里的WAS应用主机LINUX有双网卡,所以WAS 应用实例server1 JVM参数得加入java.rmi.server.hostname=192.168.157.79固定java jvm jmx port=9992,以便jvisualvm
可探测
JProfiler 4.31 key
http://www.blogjava.net/sutao/articles/134085.html
Name: License for You
Lincese Code: A-G667#42616F-10kg1r134fq9m#2217
jprofiler 5.1 key
name:lindows company:a
key:L-FLN#45224-lur6k71a9rnug#226
Jprofiler监测WAS ND 6.1
http://blog.csdn.net/Justin4wd/archive/2008/10/23/3128741.aspx
网上对于“使用Jprofiler监测WAS”的设置说明其实有很多。但是都漏了重要的一点,导致很容易在windows下WAS服务器启动失败,无法进行监测。
(下文中Jprofiler安装在C:\jp\中,读者可根据自己需要修改)
(所有问题均出现在windows中)
具体问题如下:
1.使用startServer启动服务器的时候出现错误
ADMU0116I: 正在文件
c:\IBM\WebSphere\AppServer\profiles\AppSrv02\logs\server1\startServer
.log
中记录工具信息
ADMU7701I: 由于 server1 注册成作为 Windows
服务运行,因此启动该服务器的请求将由启动关联的
Windows 服务完成。
ADMU0116I: 正在文件
c:\IBM\WebSphere\AppServer\profiles\AppSrv02\logs\server1\startServer
.log
中记录工具信息
ADMU0128I: 正在启动具有 AppSrv02 概要文件的工具
ADMU3100I: 正在从服务器读取配置:server1
ADMU3200I: 服务器已启动。等待初始化状态。
ADMU3011E:
服务器已启动,但是初始化失败。startServer.log、SystemOut.log(或者
zOS 中的作业日志)以及
c:\IBM\WebSphere\AppServer\profiles\AppSrv02\logs\server1
下的其他日志文件可能包含故障信息。
ADMU7704E: 在尝试启动与服务器相关联的 Windows
服务时失败:server1;
在执行
WASService.exe
时可能发生了错误:Starting Service:
dustballNode02
Service
failed to start.
startServer return code = -1
2.查看native_stderr.log文件提示如下错误
JVMJ9TI001E Agent library jprofilerti could not be opened (找不到指定的模块。 )
JVMJ9VM015W Initialization error for library j9jvmti23(-3): JVMJ9VM009E J9VMDllMain failed
无法创建 Java 虚拟机。
以上2个提示非常的误导人,让人以为是WAS的jvm的参数设置有问题。因此去查看该服务器的server.xml发现jvm参数确实被Jprofiler修改,如下:
genericJvmArguments="-agentlib:jprofilerti=port=8849 -Xbootclasspath/a:C:\jp\bin\agent.jar"
可以看出,jvm参数没有任何问题。
后来无意中发现,在myeclipse blue edition可以顺利启动WAS,并用Jprofiler来监测。具体操作如下:
先将上面的jvm参数从server.xml中除去;
然后在myeclipse blue edition里面配置was服务器,配置选项中有一个jvm参数,在那里加上上面的jvm参数
-agentlib:jprofilerti=port=8849 -Xbootclasspath/a:C:\jp\bin\agent.jar
还要在系统环境变量PATH中加入
C:\jp\bin\windows
这样在myeclipse中就可以启动WAS了。而且可以使用Jprofiler监测。
现在大家应该会觉得myeclipse非常的神奇了。通过仔细观察,myeclipse是采用非系统服务的方式启动WAS的。
而windows版的WAS在创建profile的时候可以选择是否注册成系统服务。如果一旦注册成系统服务,startServer命令就会调用系统服务来启动WAS,从而失败。(至于为什么失败,还不清楚具体的原因)
总之,在用Jprofiler时,想要成功启动was有3个方法:
1. 创建profile的时候不选择注册成系统服务;
2. 如果现有的profile已经注册成为系统服务了,在使用Jprofiler之前,先禁用该系统服务;
3. 使用myeclipse配置启动was。
JProfiler 5.1.4的使用方法 JBOSS
http://blog.csdn.net/kingspider/archive/2008/11/10/3266597.aspx
1. JProfiler 运行环境配置
安装目录结构如下,子目录中显示了支持的操作系统:
在服务器和客户端都要安装 JProfiler ,并且要安装 License ,在分析工具客户端中进行安装。 Windows 环境中运行客户端程序:
jprofiler5.1.4\bin\jprofiler.exe
在 UNIX 系统中运行客户端程序,执行 shell 脚本:
jprofiler5.1.4\bin\jprofiler
需要安装 License 之后才能使用,请使用合法 License 。
2. 分析独立 Java 应用
启动 Start Center :
点击
l 输入 Session 的名称;
l Session Type 选择 Local ;
l 选择本机安装的 JVM ;
l 设置工作目录,工作目录是分析过程中存放数据的位置;
l 如果需要的话设置 JVM 的启动参数;
l 设置 Java 应用的 main 类;
l 设置 Java 应用的启动参数;
l 然后在下面的 Java File Path 输入框中添加 Java 应用运行要用到的所有 classpath 和 JAR 包。
在 Start Center 中用
3. 分析 JBoss 中的应用
在分析客户机打开 Start Center :
点击
选择合适版本的 JBoss ,点击
对于 J2EE 服务器分析,建议采用远程模式,并选择服务器的操作系统类型,点击
输入远程服务器的地址,然后点击
输入远程服务器上安装 JProfiler 的目录,然后点击
输入远程服务器上 JBoss 的启动批处理程序目录位置及文件名,可以先将该批处理文件拷贝到分析客户机,然后选择该批处理程序,向导程序会修改该批处理程序,添加加载 JProfiler 服务端程序的命令参数,然后创建新的批处理程序,原来的批处理程序保留不变。然后点击
选择服务器端 JVM 的提供商, JVM 版本和 JVM 的运行模式,如果是 64 位 JVM ,还要勾选该选项,然后点击
设定远程 JProfile 分析服务的端口号,缺省端口号是 8849 ,然后点击
选择服务器端 JProfiler 的启动模式,一般选择等待 JProfiler GUI 连接的方式。由于 JVM 首先加载 JProfiler 的服务端代理程序, JProfiler 分析服务会停止 JVM 继续启动,等待 JProfiler GUI 连接,连接成功后服务器的 JVM 才会继续启动,分析配置信息会从客户端传递给服务端,例如。
如果选择不等待的模式,那么服务端的配置会复杂些,要将分析客户端 JProfiler 产生的 config.xml 拷贝到服务器端,然后在服务器启动时候自动加载该配置文件,分析客户端和服务器连接的时候,不再将分析配置信息传递给服务端,客户端分析工具的配置 id 要和服务端的配置 id 一致,例如: -agentlib:jprofilerti=port=8849,nowait,id=106,config= D:\jTools\jprofiler5.1.4\config.xml
然后点击
然后点击
在 run_jprofiler.bat 中可以发现类似于以下的修改内容:
rem The following lines have been added by the
rem application server integration wizard of JProfiler
set PATH=D:\jTools\jprofiler5.1.4\bin\windows;%PATH%
set JAVA_OPTS=-agentlib:jprofilerti=port=8849 "-Xbootclasspath/a:D:\jTools\jprofiler5.1.4\bin\agent.jar" %JAVA_OPTS%
rem end of modifications
在 Start Center 中添加了一个 Session 配置条目:
如果是 Windows 环境,那么这些配置存放在登录用户的目录中,类似于: C:\Documents and Settings\UserName\.jprofiler5\config.xml
4. 分析 WebSphere 中的应用
配置 WebSphere 和配置 JBoss 类似,关注以下步骤,修改服务器配置:
上图是选择 WebSphere 服务器的配置文件,一般操作是先把远程服务器上的配置文件 server.xml 拷贝到分析客户端的机器上,该文件的位置在E:\IBM\WebSphere61\AppServer\profiles\AppSrv01\config\cells\machine1Node01Cell\nodes\machine1Node01\servers\server1\server.xml。
修改服务启动脚本,将服务器启动脚本也拷贝到本地进行修改:
把修改后的 server.xml 和启动服务脚本拷贝回服务器上。
server.xml 的修改主要是添加了类似于下面红色标出的内容:
debugArgs="-Djava.compiler=NONE -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777" genericJvmArguments="-agentlib:jprofilerti=port=8849 -Xbootclasspath/a:G:\jprofiler\bin\agent.jar">
startServer_jprofiler.sh 中增加类似于以下的内容:
LIBPATH="/oracle/jprofiler/bin/aix-ppc64:$LIBPATH"
export LIBPATH
5. 基本分析
5.1 内存分析
查看 JVM 中内存对象的数量及占用空间:
5.2 代码执行时间分析
查看方法调用花费的时间及调用次数:
JProfiler监测远程Tomcat
http://ajava.org/course/server/11530.html
一 软件环境
本地客户端 : JProfiler5.2.1破解版
远程服务器端: JProfiler5.2.2的linux版本+Tomcat5.5.27的linux版本+JDK1.5.0_11的linux版本。
二 本地客户端JProfiler的配置
启动JProfiler,如下图所示:
选择红色区域标示的那一项,点“Next”。
选择远程监测
选择启动模式
定位远程服务器
定位远程服务器上的JProfiler
选择虚拟机类型
选择监测端口号(默认8849)
远程服务器所需修改信息
客户端设置完成至此,本地客户端JProfiler的设置已经完成,接下来就要修改服务器端的配置。
三 服务器端的配置
修改Tomcat启动时的配置
修改/usr/local/tomcat/bin目录下的Catalina.sh,添加下面几项到“JAVA_OPTS”中。view plaincopy to clipboardprint?
JAVA_OPTS="$JAVA_OPTS -agentlib:jprofilerti=port=8849"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/a:/opt/jprofiler5/bin/agent.jar"
JAVA_OPTS="$JAVA_OPTS -agentlib:jprofilerti=port=8849"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/a:/opt/jprofiler5/bin/agent.jar"
修改环境变量,将JProfiler加入环境变量
修改/etc/profiler文件,在文件的末尾加入下面语句:
JPROFILER_HOME=/opt/jprofiler5/bin/linux-x86
export LD_LIBRARY_PATH=$JPROFILER_HOME
JPROFILER_HOME=/opt/jprofiler5/bin/linux-x86
export LD_LIBRARY_PATH=$JPROFILER_HOME
修改完后,不要忘记使用source /etc/profile使修改生效!
到此,服务器端得设置完成。
四 本地客户端建立连接并监测
首先,启动服务器端的tomcat,切换到tomcat目录下的bin目录,然后运行./startup.sh即可,然后就可以监测了。
在监测时,会发现连接一段时间后,就会失去连接。这时应修改Tomcat的配置文件server.xml,该文件位于/tomcat/conf目录下。找到后将Shutdown端口号和Connector端口号分别改成8005和8080,就没问题了。
如何监控java进程
http://laziobird.iteye.com/blog/966841
end
转载地址:http://lindows.iteye.com/blog/517827