java性能优化权威指南---java性能调优工具

目录

 

1、操作系统的工具和分析

1)CPU使用率(vmstat) 

2)磁盘使用率(iostat)

3)、网络使用率(netstat)

2、java监控工具

jcm 命令demo

jinfo 实例demo

 

3、性能分析工具

4、java任务控制(暂时跳过,后续再看)


1、操作系统的工具和分析

Unix上,sar(system accounting report) vmstat、iostat、prstat
Windows上,typeperf

1)CPU使用率(vmstat) 

CPU的使用率分为两类:用户态时间和系统态时间
用户态时间指的是CPU执行应用代码所占的百分比
系统态时间指的是CPU执行内核代码所占的时间(如磁盘io、网络io等)


cpu运行队列

2)磁盘使用率(iostat)


iostat --h
用法: iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]


3)、网络使用率(netstat)


2、java监控工具

jcmd:用来打印java进程所涉及的基本类、线程和VM信息;
jinfo:查看jvm的系统属性,可以动态设置一些系统属性,可以适用于脚本

jconsole:提供jvm活动图形化视图,包括线程的使用、类的使用和GC活动;
jhat:读取内存堆转储,事后使用工具分析;
jmap::提供堆转储和其他jvm内存使用信息,可以适用于脚本

jstack:转储java进程的栈信息,可以适用于脚本
jstat:提供GC和类装载的信息,可以适用于脚本
jvisualvm:图形工具

1)、基本的VM信息
2)、线程信息
3)、类信息
4)、实时GC信息
5)事后堆转存储

jcm 命令demo


jcmd processs_id command optional_argument 

查看jvm的运行时长
jcmd 510724 VM.uptime
510724:
264628.412 s

查看系统属性
jcmd 510724 VM.system_properties
510724:
#Sun Aug 19 14:55:22 CST 2018
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=/export/servers/jdk1.7.0_71/jre/lib/amd64
java.vm.version=24.71-b01
...


查看jvm的版本
jcmd 510724 VM.version
510724:
Java HotSpot(TM) 64-Bit Server VM version 24.71-b01
JDK 7.0_71

查看jvm的命令行(即运行的jvm参数)
jcmd 510724 VM.command_line
510724:
VM Arguments:
jvm_args: -Djava.util.logging.config.file=/export/server1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.library.path=/usr/local/lib 
-Xms16384m    16G的内存
-Xmx16384m 
-XX:+UseG1GC 
-XX:MaxGCPauseMillis=5000 
-XX:MaxPermSize=256m 
-Djava.awt.headless=true 
-Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no 
-Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300 -Djava.endorsed.dirs=/export/servers/tomcat6.0.33/endorsed 
-Dcatalina.base=/export/server1 -Dcatalina.home=/export/servers/tomcat6.0.33 -Djava.io.tmpdir=/export/server1/temp 
java_command: org.apache.catalina.startup.Bootstrap -config /export/server1/conf/server.xml start
Launcher Type: SUN_STANDARD


获取生效的jvm调优参数
jcmd 510724 VM.flags 
510724:
-XX:ConcGCThreads=11 
-XX:G1HeapRegionSize=8388608 
-XX:InitialHeapSize=17179869184 
-XX:MaxGCPauseMillis=5000 
-XX:MaxHeapSize=17179869184 
-XX:MaxPermSize=268435456 
-XX:+UseCompressedOops 
-XX:+UseG1GC 


jinfo 实例demo

jinfo -flags 510724 
Attaching to process ID 510724, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01

-Djava.util.logging.config.file=/export/server1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.library.path=/usr/local/lib -Xms16384m -Xmx16384m -XX:+UseG1GC -XX:MaxGCPauseMillis=5000 -XX:MaxPermSize=256m -Djava.awt.headless=true -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300 -Djava.endorsed.dirs=/export/servers/tomcat6.0.33/endorsed -Dcatalina.base=/export/server1 -Dcatalina.home=/export/servers/tomcat6.0.33 -Djava.io.tmpdir=/export/server1/temp

 

3、性能分析工具

1)、采样分析器
2)、探查分析器
3)、阻塞方法和线程时间线
4)、本地分析器

4、java任务控制(暂时跳过,后续再看)


1)、java飞行记录器

 


附录:
product表示在所有平台的默认值是一样的
pd product 表示标志的默认值独立于平台


jcmd 510724 VM.flags -all
510724:
[Global flags]
    uintx AdaptivePermSizeWeight                    = 20              {product}           
    uintx AdaptiveSizeDecrementScaleFactor          = 4               {product}           
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10              {product}           
    uintx AdaptiveSizePausePolicy                   = 0               {product}           
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50              {product}           
    uintx AdaptiveSizePolicyInitializingSteps       = 20              {product}           
    uintx AdaptiveSizePolicyOutputInterval          = 0               {product}           
    uintx AdaptiveSizePolicyWeight                  = 10              {product}           
    uintx AdaptiveSizeThroughPutPolicy              = 0               {product}           
    uintx AdaptiveTimeWeight                        = 25              {product}           
     bool AdjustConcurrency                         = false           {product}           
     bool AggressiveOpts                            = false           {product}           
     intx AliasLevel                                = 3               {C2 product}        
     bool AlignVector                               = false           {C2 product}        
     intx AllocateInstancePrefetchLines             = 1               {product}           
     intx AllocatePrefetchDistance                  = 192             {product}           
     intx AllocatePrefetchInstr                     = 0               {product}           
     intx AllocatePrefetchLines                     = 4               {product}           
     intx AllocatePrefetchStepSize                  = 64              {product}           
     intx AllocatePrefetchStyle                     = 1               {product}           
     bool AllowJNIEnvProxy                          = false           {product}           
     bool AllowNonVirtualCalls                      = false           {product}           
     bool AllowParallelDefineClass                  = false           {product}           
     bool AllowUserSignalHandlers                   = false           {product}           
     bool AlwaysActAsServerClassMachine             = false           {product}           
     bool AlwaysCompileLoopMethods                  = false           {product}           
     bool AlwaysLockClassLoader                     = false           {product}           
     bool AlwaysPreTouch                            = false           {product}           
     bool AlwaysRestoreFPU                          = false           {product}           
     bool AlwaysTenure                              = false           {product}           
     bool AssertOnSuspendWaitFailure                = false           {product}           
     intx Atomics                                   = 0               {product}           
     intx AutoBoxCacheMax                           = 128             {C2 product}        
    uintx AutoGCSelectPauseMillis                   = 5000            {product}           
     intx BCEATraceLevel                            = 0               {product}           
     intx BackEdgeThreshold                         = 100000          {pd product}        
     bool BackgroundCompilation                     = true            {pd product}        
    uintx BaseFootPrintEstimate                     = 268435456       {product}           
     intx BiasedLockingBulkRebiasThreshold          = 20              {product}           
     intx BiasedLockingBulkRevokeThreshold          = 40              {product}           
     intx BiasedLockingDecayTime                    = 25000           {product}           
     intx BiasedLockingStartupDelay                 = 4000            {product}           
     bool BindGCTaskThreadsToCPUs                   = false           {product}           
     bool BlockLayoutByFrequency                    = true            {C2 product}        
     intx BlockLayoutMinDiamondPercentage           = 20              {C2 product}        
     bool BlockLayoutRotateLoops                    = true            {C2 product}        
     bool BranchOnRegister                          = false           {C2 product}        
     bool BytecodeVerificationLocal                 = false           {product}           
     bool BytecodeVerificationRemote                = true            {product}           
     bool C1OptimizeVirtualCallProfiling            = true            {C1 product}        
     bool C1ProfileBranches                         = true            {C1 product}        
     bool C1ProfileCalls                            = true            {C1 product}        
     bool C1ProfileCheckcasts                       = true            {C1 product}        
     bool C1ProfileInlinedCalls                     = true            {C1 product}        
     bool C1ProfileVirtualCalls                     = true            {C1 product}        
     bool C1UpdateMethodData                        = true            {C1 product}        
     intx CICompilerCount                           = 2               {product}           
     bool CICompilerCountPerCPU                     = false           {product}           
     bool CITime                                    = false           {product}           
     bool CMSAbortSemantics                         = false           {product}           
    uintx CMSAbortablePrecleanMinWorkPerIteration   = 100             {product}           
     intx CMSAbortablePrecleanWaitMillis            = 100             {manageable}        
    uintx CMSBitMapYieldQuantum                     = 10485760        {product}           
    uintx CMSBootstrapOccupancy                     = 50              {product}           
     bool CMSClassUnloadingEnabled                  = false           {product}           
    uintx CMSClassUnloadingMaxInterval              = 0               {product}           
     bool CMSCleanOnEnter                           = true            {product}           
     bool CMSCompactWhenClearAllSoftRefs            = true            {product}           
    uintx CMSConcMarkMultiple                       = 32              {product}           
     bool CMSConcurrentMTEnabled                    = true            {product}           
    uintx CMSCoordinatorYieldSleepCount             = 10              {product}           
     bool CMSDumpAtPromotionFailure                 = false           {product}           
     bool CMSEdenChunksRecordAlways                 = false           {product}           
    uintx CMSExpAvgFactor                           = 50              {product}           
     bool CMSExtrapolateSweep                       = false           {product}           
    uintx CMSFullGCsBeforeCompaction                = 0               {product}           
    uintx CMSIncrementalDutyCycle                   = 10              {product}           
    uintx CMSIncrementalDutyCycleMin                = 0               {product}           
     bool CMSIncrementalMode                        = false           {product}           
    uintx CMSIncrementalOffset                      = 0               {product}           
     bool CMSIncrementalPacing                      = true            {product}           
    uintx CMSIncrementalSafetyFactor                = 10              {product}           
    uintx CMSIndexedFreeListReplenish               = 4               {product}           
     intx CMSInitiatingOccupancyFraction            = -1              {product}           
     intx CMSInitiatingPermOccupancyFraction        = -1              {product}           
     intx CMSIsTooFullPercentage                    = 98              {product}           
   double CMSLargeCoalSurplusPercent                = 0.950000        {product}           
   double CMSLargeSplitSurplusPercent               = 1.000000        {product}           
     bool CMSLoopWarn                               = false           {product}           
    uintx CMSMaxAbortablePrecleanLoops              = 0               {product}           
     intx CMSMaxAbortablePrecleanTime               = 5000            {product}           
    uintx CMSOldPLABMax                             = 1024            {product}           
    uintx CMSOldPLABMin                             = 16              {product}           
    uintx CMSOldPLABNumRefills                      = 4               {product}           
    uintx CMSOldPLABReactivityFactor                = 2               {product}           
     bool CMSOldPLABResizeQuicker                   = false           {product}           
    uintx CMSOldPLABToleranceFactor                 = 4               {product}           
     bool CMSPLABRecordAlways                       = true            {product}           
    uintx CMSParPromoteBlocksToClaim                = 16            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值