Java性能调优-简单总结

Java性能调优-简单总结

自带命令行宝典

可参考总结:http://blog.csdn.net/lichangzhen2008/article/details/45242273

这是别人整理的文档,也不错的。参考阅读JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解

其它工具简介

远程方法jdwp

个人没有用过,参考文档Java远程调试方法Xrunjdwp

JMX+Jconsole/JVisualVM

可以通过JAVA应用的启动参数配置

-Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

参考文档java性能调优工具介绍Visualvm

本地调试方法

Hprof

参考阅读:HPROF使用
特别注意:force=n,输出文件时,可以自动带上进程ID,这样可以区分多个输出文件
几个名词介绍:
Java Virtual Machine Tool Interface(JVM TI)
Byte Code Injection (BCI)
cpu=samples,不使用BCI。
cpu=times使用BCI,若使用BCI对性能影响较大
参数配置样例

JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=cpu=samples,interval=20,depth=6"
JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=cpu=times,thread=y,cutoff=0, monitor=y,force=n"
#JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=cpu=samples,interval=20,depth=6"
#datestr=`date +%m%d%M%S`
#JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=cpu=times,thread=y,cutoff=0,force=n"

第三方工具类

HPjemeter

Xeprof很好,但是只支持HP-UX平台
The -Xeprof profiling option, available for the HP-UX HotSpot™ VM, was specifically designed to produce profile data files for HPjmeter
参见:http://stackoverflow.com/questions/7330788/java-one-thread-slow/7667415#7667415
和HPJemeter的手册的“–Xeprof and –agentlib:hprof Profiling Options and Their Corresponding Metrics”
https://h20392.www2.hp.com/portal/swdepot/displayProductInfo.do?productNumber=HPJMETER&jumpid=reg_r1002_usen_c-001_title_r0001

JProfiler

JProfiler 注册码
http://blog.csdn.net/attilax/article/details/17077857
可用L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620

若出现问题:No X11 DISPLAY variable was set, but this program performed an operation which requires it.
可以采用这个方法:在linux的启动文件/etc/profile中增加了 export  DISPLAY=localhost:0

http://www.cnblogs.com/serendipity/articles/1963904.html
参数配置样例

#-agentlib:jprofilerti=port=8849 -Xbootclasspath/a: /tmp/jprofiler8/bin/agent.jar 
JAVA_OPTS="$JAVA_OPTS -agentpath:/tmp/jprofiler8/bin/linux-x64/libjprofilerti.so=port=8849"

启动脚本样例

#!/bin/sh
#check JAVA_HOME & java
noJavaHome=false
if [ -z "$JAVA_HOME" ] ; then
    noJavaHome=true
fi
if [ ! -e "$JAVA_HOME/bin/java" ] ; then
    noJavaHome=true
fi
if $noJavaHome ; then
    echo "Error: JAVA_HOME environment variable is not set."
fi
#==============================================================================
#set JAVA_OPTS
JAVA_OPTS="-server -Xms2G -Xmx10G -Xmn1G -XX:SurvivorRatio=8"
#performance Optiions
JAVA_OPTS="$JAVA_OPTS -XX:+AggressiveOpts"
JAVA_OPTS="$JAVA_OPTS -XX:+UseBiasedLocking"
JAVA_OPTS="$JAVA_OPTS -XX:+UseFastAccessorMethods"
JAVA_OPTS="$JAVA_OPTS -XX:+DisableExplicitGC"
JAVA_OPTS="$JAVA_OPTS -XX:+UseParNewGC"
JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC"
JAVA_OPTS="$JAVA_OPTS -XX:+CMSParallelRemarkEnabled"
JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSCompactAtFullCollection"
JAVA_OPTS="$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly"
JAVA_OPTS="$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=85"
#GC Log Options
#JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCTimeStamps -XX:+PrintGCDetails"
#debug Options
#JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8064,server=y,suspend=n"
#==============================================================================
#JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9998 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
#set HOMEV
#JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=cpu=samples,interval=20,depth=6"
#datestr=`date +%m%d%M%S`
#JAVA_OPTS="$JAVA_OPTS -agentlib:hprof=cpu=times,thread=y,cutoff=0,format=a,file=java$datestr.hprof"
#JAVA_OPTS="$JAVA_OPTS -agentlib:jprofilerti=port=8849 -Xbootclasspath/a:/tmp/jprofiler8/bin/agent.jar"
CURR_DIR=`pwd`
cd `dirname "$0"`/..
HOTDB_HOME=`pwd`
cd $CURR_DIR
if [ -z "$HOTDB_HOME" ] ; then
    echo "Error: HOTDB_HOME environment variable is not defined correctly."
    exit 1
fi
#==============================================================================

#set CLASSPATH
HOTDB_CLASSPATH="$HOTDB_HOME/conf:$HOTDB_HOME/lib/classes"
for i in "$HOTDB_HOME"/lib/*.jar
do
    HOTDB_CLASSPATH="$HOTDB_CLASSPATH:$i"
done
#==============================================================================

#startup Server
RUN_CMD="java"
RUN_CMD="$RUN_CMD -Dhotdb.home=\"$HOTDB_HOME\""
RUN_CMD="$RUN_CMD -classpath \"$HOTDB_CLASSPATH\""
RUN_CMD="$RUN_CMD $JAVA_OPTS"
RUN_CMD="$RUN_CMD cn.hotpu.hotdb.HotdbStartup $@"
RUN_CMD="$RUN_CMD >> \"$HOTDB_HOME/logs/console.log\" 2>&1 &"
echo $RUN_CMD
eval $RUN_CMD
#==============================================================================
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值