目录
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