想写一篇jvm的工具入门

为什么要写一个jvm的工具入门呢,一是自己也不会,二是因为不会所以想学一下,还有就是这个确实很重要,对学习jvm有很多的用处,对定位问题有很大的便利,以前毕业那会我记得有个笔试,知道JAVA_HOME/bin目录的工具吗,例举下3个以上,并说说有什么用,可以怎么使用,,,,我只能说呵呵了,写代码哪里要注意这么多哈

一、基础了解

我们一般安装java,首先都会来一个java命令(现阶段java8和11用的人比较多,我这里还是8)

D:\Data\lugh1>java
用法: java [-options] class [args...]
           (执行类)
   或  java [-options] -jar jarfile [args...]
           (执行 jar 文件)
其中选项包括:
    -d32          使用 32 位数据模型 (如果可用)
    -d64          使用 64 位数据模型 (如果可用)
    -server       选择 "server" VM
                  默认 VM 是 server.

    -cp <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>
                  用 ; 分隔的目录,JAR 档案
                  和 ZIP 档案列表,用于搜索类文件。
    -D<名称>=<值>
                  设置系统属性
    -verbose:[class|gc|jni]
                  启用详细输出
    -version      输出产品版本并退出
    -version:<值>
                  警告: 此功能已过时,将在
                  未来发行版中删除。
                  需要指定的版本才能运行
    -showversion  输出产品版本并继续
    -jre-restrict-search | -no-jre-restrict-search
                  警告: 此功能已过时,将在
                  未来发行版中删除。
                  在版本搜索中包括/排除用户专用 JRE
    -? -help      输出此帮助消息
    -X            输出非标准选项的帮助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                  禁用具有指定粒度的断言
    -esa | -enablesystemassertions
                  启用系统断言
    -dsa | -disablesystemassertions
                  禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>,例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理,请参阅 java.lang.instrument
    -splash:<imagepath>
                  使用指定的图像显示启动屏幕

参数分为三类,分别是:

标准参数(很稳定的) 

-help

 -version

-X参数 (非标准参数,不能保证被所有的JVM实现都支持)

  -Xint

  -Xcomp

-XX参数(使用率较高)

  -XX:newSize

  -XX:+UseSerialGC

反正以前我是不知道-X,-XX,+UseSerialGC中的+号是什么,或许现在知道,好像也比较容易忘记,因为也没经常使用呀

来试一下java -X

D:\Data\lugh1>java -X
    -Xmixed           混合模式执行 (默认)
    -Xint             仅解释模式执行
    -Xbootclasspath:<用 ; 分隔的目录和 zip/jar 文件>
                      设置搜索路径以引导类和资源
    -Xbootclasspath/a:<用 ; 分隔的目录和 
                      附加在引导类路径末尾
    -Xbootclasspath/p:<用 ; 分隔的目录和 
                      置于引导类路径之前
    -Xdiag            显示附加诊断消息
    -Xnoclassgc       禁用类垃圾收集
    -Xincgc           启用增量垃圾收集
    -Xloggc:<file>    将 GC 状态记录在文件中 (带时间戳)
    -Xbatch           禁用后台编译
    -Xms<size>        设置初始 Java 堆大小
    -Xmx<size>        设置最大 Java 堆大小
    -Xss<size>        设置 Java 线程堆栈大小
    -Xprof            输出 cpu 配置文件数据
    -Xfuture          启用最严格的检查,预期将来的默认值
    -Xrs              减少 Java/VM 对操作系统信号的使用 (请参阅文档)
    -Xcheck:jni       对 JNI 函数执行其他检查
    -Xshare:off       不尝试使用共享类数据
    -Xshare:auto      在可能的情况下使用共享类数据 (默认)
    -Xshare:on        要求使用共享类数据,否则将失败。
    -XshowSettings    显示所有设置并继续
    -XshowSettings:all
                      显示所有设置并继续
    -XshowSettings:vm 显示所有与 vm 相关的设置并继续
    -XshowSettings:properties
                      显示所有属性设置并继续
    -XshowSettings:locale
                      显示所有与区域设置相关的设置并继续

-Xms<size> 设置初始 Java 堆大小
-Xmx<size> 设置最大 Java 堆大小
-Xss<size> 设置 Java 线程堆栈大小

是不是觉得上面几个参数很熟悉,就是日常调整堆和栈大小的参数呀,很好记吧,比如java ‐Xms2048m ‐Xmx2048m  class_name

在解释模式(interpreted mode)下,-Xint标记会强制JVM执行所有的字节码,当然这会降低运行速度,通常低10倍或更多

-Xcomp参数与它(-Xint)正好相反,JVM在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化。然而,很多应用在使用-Xcomp也会有一些性能损失,当然这比使用-Xint损失的少,原因是-xcomp没有让JVM启用JIT编译器的全部功能。JIT编译器可以对是否需要编译做判断,如果所有代码都进行编译的话,对于一些只执行一次的代码就没有意义了
-Xmixed是混合模式,将解释模式与编译模式进行混合使用,由jvm自己决定,这是jvm默认的模式,也是推荐使用的模式

 

接下来了解下-XX参数

-XX参数的使用有2种方式,一种是boolean类型,一种是非boolean类型(好像有点废话)

  • boolean类型
格式:-XX:[+-]
如:-XX:+DisableExplicitGC 表示禁用手动调用gc操作,也就是说调用System.gc()无效,+表示启用,-表示禁止吧

非boolean类型

格式:-XX:
如:-XX:NewRatio=1 表示新生代和老年代的比值

那么多参数怎么记得呢,可以使用java -XX:+PrintFlagsFinal查看所有参数呀

D:\MyData\lugh1>java -XX:+PrintFlagsFinal
[Global flags]
     intx ActiveProcessorCount                      = -1                                  {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
    uintx AdaptiveSizePausePolicy                   = 0                                   {product}
    uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
    uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
    uintx AdaptiveSizePolicyOutputInterval          =                                    {product}
    uintx AdaptiveSizePolicyWeight                  =                                   {product}
    uintx AdaptiveSizeThroughPutPolicy              =                                    {product}
    uintx AdaptiveTimeWeight                        = 25                                  {product}
     bool AdjustConcurrency                         = false                               {product}
     bool AggressiveHeap                            = bool AggressiveOpts                            =                                {product}
     intx AliasLevel                                = 3                                   {C2 product}
     bool AlignVector                               =                                {C2 product}
     intx AllocateInstancePrefetchLines             =                                    {product}
     intx AllocatePrefetchDistance                  = 192                                 {product}
     intx AllocatePrefetchInstr                     =                                    {product}
     intx AllocatePrefetchLines                     =                                    {product}
     intx AllocatePrefetchStepSize                  =                                   {product}
     intx AllocatePrefetchStyle                     =                                    {product}
     bool AllowJNIEnvProxy                          = bool AllowNonVirtualCalls                      = bool AllowParallelDefineClass                  = bool AllowUserSignalHandlers                   = bool AlwaysActAsServerClassMachine             = bool AlwaysCompileLoopMethods                  = bool AlwaysLockClassLoader                     = bool AlwaysPreTouch                            = bool AlwaysRestoreFPU                          = bool AlwaysTenure                              = bool AssertOnSuspendWaitFailure                = bool AssumeMP                                  =                                {product}
     intx AutoBoxCacheMax                           = 128                                 {C2 product}
    uintx AutoGCSelectPauseMillis                   = 5000                                {product}
     intx BCEATraceLevel                            =                                    {product}
     intx BackEdgeThreshold                         = 100000                              {pd product}
     bool BackgroundCompilation                     = true                                {pd product}
    uintx BaseFootPrintEstimate                     = 268435456                           {product}
     intx BiasedLockingBulkRebiasThreshold          =                                   {product}
     intx BiasedLockingBulkRevokeThreshold          = 40                                  {product}
     intx BiasedLockingDecayTime                    = 25000                               {product}
     intx BiasedLockingStartupDelay                 = 4000                                {product}
     bool BindGCTaskThreadsToCPUs                   = bool BlockLayoutByFrequency                    =                                 {C2 product}
     intx BlockLayoutMinDiamondPercentage           =                                   {C2 product}
     bool BlockLayoutRotateLoops                    =                                 {C2 product}
     bool BranchOnRegister                          =                                {C2 product}
     bool BytecodeVerificationLocal                 = bool BytecodeVerificationRemote                = bool C1OptimizeVirtualCallProfiling            =                                 {C1 product}
     bool C1ProfileBranches                         = bool C1ProfileCalls                            = bool C1ProfileCheckcasts                       = bool C1ProfileInlinedCalls                     = bool C1ProfileVirtualCalls                     = bool C1UpdateMethodData                        =                                 {C1 product}
     intx CICompilerCount                          := bool CICompilerCountPerCPU                     = bool CITime                                    = bool CMSAbortSemantics                         =                                {product}
    uintx CMSAbortablePrecleanMinWorkPerIteration   = 100                                 {product}
     intx CMSAbortablePrecleanWaitMillis            =                                  {manageable}
    uintx CMSBitMapYieldQuantum                     = 10485760                            {product}
    uintx CMSBootstrapOccupancy                     = bool CMSClassUnloadingEnabled                  =                                 {product}
    uintx CMSClassUnloadingMaxInterval              = bool CMSCleanOnEnter                           = bool CMSCompactWhenClearAllSoftRefs            =                                 {product}
    uintx CMSConcMarkMultiple                       = bool CMSConcurrentMTEnabled                    =                                 {product}
    uintx CMSCoordinatorYieldSleepCount             = bool CMSDumpAtPromotionFailure                 = bool CMSEdenChunksRecordAlways                 =                                 {product}
    uintx CMSExpAvgFactor                           = bool CMSExtrapolateSweep                       =                                {product}
    uintx CMSFullGCsBeforeCompaction                =                                    {product}
    uintx CMSIncrementalDutyCycle                   =                                   {product}
    uintx CMSIncrementalDutyCycleMin                = bool CMSIncrementalMode                        =                                {product}
    uintx CMSIncrementalOffset                      = bool CMSIncrementalPacing                      =                                 {product}
    uintx CMSIncrementalSafetyFactor                =                                   {product}
    uintx CMSIndexedFreeListReplenish               =                                    {product}
     intx CMSInitiatingOccupancyFraction            = -                                  {product}
    uintx CMSIsTooFullPercentage                    = 98                                  {product}
   double CMSLargeCoalSurplusPercent                = 0.950000                            {product}
   double CMSLargeSplitSurplusPercent               = 1.000000                            {product}
     bool CMSLoopWarn                               =                                {product}
    uintx CMSMaxAbortablePrecleanLoops              =                                    {product}
     intx CMSMaxAbortablePrecleanTime               =                                 {product}
    uintx CMSOldPLABMax                             = 1024                                {product}
    uintx CMSOldPLABMin                             = 16                                  {product}
    uintx CMSOldPLABNumRefills                      =                                    {product}
    uintx CMSOldPLABReactivityFactor                = 2bool CMSOldPLABResizeQuicker                   =                                {product}
    uintx CMSOldPLABToleranceFactor                 = bool CMSPLABRecordAlways                       =                                 {product}
    uintx CMSParPromoteBlocksToClaim                = bool CMSParallelInitialMarkEnabled             = bool CMSParallelRemarkEnabled                  = bool CMSParallelSurvivorRemarkEnabled          =                                 {product}
    uintx CMSPrecleanDenominator                    =                                    {product}
    uintx CMSPrecleanIter                           =                                    {product}
    uintx CMSPrecleanNumerator                      = bool CMSPrecleanRefLists1                      = bool CMSPrecleanRefLists2                      = bool CMSPrecleanSurvivors1                     = bool CMSPrecleanSurvivors2                     =                                 {product}
    uintx CMSPrecleanThreshold                      = 1000bool CMSPrecleaningEnabled                     = bool CMSPrintChunksInDump                      = bool CMSPrintEdenSurvivorChunks                = bool CMSPrintObjectsInDump                     =                                {product}
    uintx CMSRemarkVerifyVariant                    = bool CMSReplenishIntermediate                  =                                 {product}
    uintx CMSRescanMultiple                         =                                   {product}
    uintx CMSSamplingGrain                          = 16384bool CMSScavengeBeforeRemark                   =                                {product}
    uintx CMSScheduleRemarkEdenPenetration          =                                   {product}
    uintx CMSScheduleRemarkEdenSizeThreshold        = 2097152                             {product}
    uintx CMSScheduleRemarkSamplingRatio            = 5                                   {product}
   double CMSSmallCoalSurplusPercent                = 1.050000double CMSSmallSplitSurplusPercent               = 1.100000bool CMSSplitIndexedFreeListBlocks             =                                 {product}
     intx CMSTriggerInterval                        = -                                  {manageable}
    uintx CMSTriggerRatio                           = 80                                  {product}
     intx CMSWaitDuration                           = 2000                                {manageable}
    uintx CMSWorkQueueDrainThreshold                = bool CMSYield                                  =                                 {product}
    uintx CMSYieldSleepCount                        =                                    {product}
    uintx CMSYoungGenPerWorker                      = 67108864                            {pd product}
    uintx CMS_FLSPadding                            =                                    {product}
    uintx CMS_FLSWeight                             = 75                                  {product}
    uintx CMS_SweepPadding                          =                                    {product}
    uintx CMS_SweepTimerThresholdMillis             =                                   {product}
    uintx CMS_SweepWeight                           = bool CheckEndorsedAndExtDirs                   = bool CheckJNICalls                             = bool ClassUnloading                            = bool ClassUnloadingWithConcurrentMark          =                                 {product}
     intx ClearFPUAtPark                            = bool ClipInlining                              =                                 {product}
    uintx CodeCacheExpansionSize                    = 65536                               {pd product}
    uintx CodeCacheMinimumFreeSpace                 = 512000                              {product}
     bool CollectGen0First                          = bool CompactFields                             =                                 {product}
     intx CompilationPolicyChoice                   =                                    {product}
ccstrlist CompileCommand                            =                                     {product}
    ccstr CompileCommandFile                        =                                     {product}
ccstrlist CompileOnly                               =                                     {product}
     intx CompileThreshold                          = 10000                               {pd product}
     bool CompilerThreadHintNoPreempt               =                                 {product}
     intx CompilerThreadPriority                    = -                                  {product}
     intx CompilerThreadStackSize                   =                                    {pd product}
    uintx CompressedClassSpaceSize                  = 1073741824                          {product}
    uintx ConcGCThreads                             =                                    {product}
     intx ConditionalMoveLimit                      =                                    {C2 pd product}
     intx ContendedPaddingWidth                     =                                  {product}
     bool ConvertSleepToYield                       =                                 {pd product}
     bool ConvertYieldToSleep                       = bool CrashOnOutOfMemoryError                   = bool CreateMinidumpOnCrash                     = bool CriticalJNINatives                        = bool DTraceAllocProbes                         = bool DTraceMethodProbes                        = bool DTraceMonitorProbes                       = bool Debugging                                 =                                {product}
    uintx DefaultMaxRAMFraction                     =                                    {product}
     intx DefaultThreadPriority                     = -                                  {product}
     intx DeferPollingPageLoopCount                 = -                                  {product}
     intx DeferThrSuspendLoopCount                  = bool DeoptimizeRandom                          = bool DisableAttachMechanism                    = bool DisableExplicitGC                         = bool DisplayVMOutputToStderr                   = bool DisplayVMOutputToStdout                   = bool DoEscapeAnalysis                          = bool DontCompileHugeMethods                    = bool DontYieldALot                             =                                {pd product}
    ccstr DumpLoadedClassList                       =                                     {product}
     bool DumpReplayDataOnError                     = bool DumpSharedSpaces                          = bool EagerXrunInit                             =                                {product}
     intx EliminateAllocationArraySizeLimit         = bool EliminateAllocations                      = bool EliminateAutoBox                          = bool EliminateLocks                            = bool EliminateNestedLocks                      =                                 {C2 product}
     intx EmitSync                                  = bool EnableContended                           = bool EnableResourceManagementTLABCache         = bool EnableSharedLookupCache                   = bool EnableTracing                             =                                {product}
    uintx ErgoHeapSizeLimit                         =                                    {product}
    ccstr ErrorFile                                 =                                     {product}
    ccstr ErrorReportServer                         =                                     {product}
   double EscapeAnalysisTimeout                     = 20.000000                           {C2 product}
     bool EstimateArgEscape                         = bool ExitOnOutOfMemoryError                    = bool ExplicitGCInvokesConcurrent               = bool ExplicitGCInvokesConcurrentAndUnloadsClasses  = bool ExtendedDTraceProbes                      =                                {product}
    ccstr ExtraSharedClassListFile                  =bool FLSAlwaysCoalesceLarge                    =                                {product}
    uintx FLSCoalescePolicy                         = double FLSLargestBlockCoalesceProximity          = 0.990000bool FailOverToOldVerifier                     = bool FastTLABRefill                            =                                 {product}
     intx FenceInstruction                          =                                    {ARCH product}
     intx FieldsAllocationStyle                     = bool FilterSpuriousWakeups                     =                                 {product}
    ccstr FlightRecorderOptions                     =bool ForceNUMA                                 = bool ForceTimeHighResolution                   =                                {product}
     intx FreqInlineSize                            = 325                                 {pd product}
   double G1ConcMarkStepDurationMillis              = 10.000000                           {product}
    uintx G1ConcRSHotCardLimit                      =                                    {product}
    uintx G1ConcRSLogCacheSize                      =                                   {product}
     intx G1ConcRefinementGreenZone                 =                                    {product}
     intx G1ConcRefinementRedZone                   =                                    {product}
     intx G1ConcRefinementServiceIntervalMillis     = 300                                 {product}
    uintx G1ConcRefinementThreads                   =                                    {product}
     intx G1ConcRefinementThresholdStep             =                                    {product}
     intx G1ConcRefinementYellowZone                =                                    {product}
    uintx G1ConfidencePercent                       =                                   {product}
    uintx G1HeapRegionSize                          =                                    {product}
    uintx G1HeapWastePercent                        =                                    {product}
    uintx G1MixedGCCountTarget                      = 8                                   {product}
     intx G1RSetRegionEntries                       =                                    {product}
    uintx G1RSetScanBlockSize                       =                                   {product}
     intx G1RSetSparseRegionEntries                 =                                    {product}
     intx G1RSetUpdatingPauseTimePercent            =                                   {product}
     intx G1RefProcDrainInterval                    =                                   {product}
    uintx G1ReservePercent                          =                                   {product}
    uintx G1SATBBufferEnqueueingThresholdPercent    = 60                                  {product}
     intx G1SATBBufferSize                          =                                 {product}
     intx G1UpdateBufferSize                        = 256bool G1UseAdaptiveConcRefinement               =                                 {product}
    uintx GCDrainStackTargetSize                    =                                   {product}
    uintx GCHeapFreeLimit                           =                                    {product}
    uintx GCLockerEdenExpansionPercent              = bool GCLockerInvokesConcurrent                 =                                {product}
    uintx GCLogFileSize                             = 8192                                {product}
    uintx GCPauseIntervalMillis                     =                                    {product}
    uintx GCTaskTimeStampEntries                    = 200                                 {product}
    uintx GCTimeLimit                               =                                   {product}
    uintx GCTimeRatio                               = 99                                  {product}
    uintx HeapBaseMinAddress                        = 2147483648                          {pd product}
     bool HeapDumpAfterFullGC                       =                                {manageable}
     bool HeapDumpBeforeFullGC                      = bool HeapDumpOnOutOfMemoryError                =                                {manageable}
    ccstr HeapDumpPath                              =                                     {manageable}
    uintx HeapFirstMaximumCompactionCount           =                                    {product}
    uintx HeapMaximumCompactionInterval             =                                   {product}
    uintx HeapSizePerGCThread                       = 87241520bool IgnoreEmptyClassPaths                     = bool IgnoreUnrecognizedVMOptions               =                                {product}
    uintx IncreaseFirstTierCompileThresholdAt       = bool IncrementalInline                         =                                 {C2 product}
    uintx InitialBootClassLoaderMetaspaceSize       = 4194304                             {product}
    uintx InitialCodeCacheSize                      = 2555904                             {pd product}
    uintx InitialHeapSize                          := 132120576                           {product}
    uintx InitialRAMFraction                        = double InitialRAMPercentage                      = 1.562500                            {product}
    uintx InitialSurvivorRatio                      =                                    {product}
    uintx InitialTenuringThreshold                  = 7                                   {product}
    uintx InitiatingHeapOccupancyPercent            = 45bool Inline                                    =                                 {product}
    ccstr InlineDataFile                            =                                     {product}
     intx InlineSmallCode                           = bool InlineSynchronizedMethods                 = bool InsertMemBarAfterArraycopy                =                                 {C2 product}
     intx InteriorEntryAlignment                    =                                   {C2 pd product}
     intx InterpreterProfilePercentage              = 33bool JNIDetachReleasesMonitors                 = bool JavaMonitorsInStackTrace                  =                                 {product}
     intx JavaPriority10_To_OSPriority              = -                                  {product}
     intx JavaPriority1_To_OSPriority               = -                                  {product}
     intx JavaPriority2_To_OSPriority               = -                                  {product}
     intx JavaPriority3_To_OSPriority               = -                                  {product}
     intx JavaPriority4_To_OSPriority               = -                                  {product}
     intx JavaPriority5_To_OSPriority               = -                                  {product}
     intx JavaPriority6_To_OSPriority               = -                                  {product}
     intx JavaPriority7_To_OSPriority               = -                                  {product}
     intx JavaPriority8_To_OSPriority               = -                                  {product}
     intx JavaPriority9_To_OSPriority               = -bool LIRFillDelaySlots                         =                                {C1 pd product}
    uintx LargePageHeapSizeThreshold                = 134217728                           {product}
    uintx LargePageSizeInBytes                      = bool LazyBootClassLoader                       =                                 {product}
     intx LiveNodeCountInliningCutoff               = 40000bool LogCommercialFeatures                     =                                {product}
     intx LoopMaxUnroll                             =                                   {C2 product}
     intx LoopOptsCount                             = 43                                  {C2 product}
     intx LoopUnrollLimit                           =                                   {C2 pd product}
     intx LoopUnrollMin                             = bool LoopUnswitching                           = bool ManagementServer                          =                                {product}
    uintx MarkStackSize                             =                              {product}
    uintx MarkStackSizeMax                          = 536870912                           {product}
    uintx MarkSweepAlwaysCompactCount               =                                    {product}
    uintx MarkSweepDeadRatio                        =                                    {product}
     intx MaxBCEAEstimateLevel                      =                                    {product}
     intx MaxBCEAEstimateSize                       = 150                                 {product}
    uintx MaxDirectMemorySize                       = bool MaxFDLimit                                =                                 {product}
    uintx MaxGCMinorPauseMillis                     = 4294967295                          {product}
    uintx MaxGCPauseMillis                          =                           {product}
    uintx MaxHeapFreeRatio                          =                                  {manageable}
    uintx MaxHeapSize                              := 2111832064                          {product}
     intx MaxInlineLevel                            = 9                                   {product}
     intx MaxInlineSize                             = 35                                  {product}
     intx MaxJNILocalCapacity                       =                                {product}
     intx MaxJavaStackTraceDepth                    =                                 {product}
     intx MaxJumpTableSize                          = 65000                               {C2 product}
     intx MaxJumpTableSparseness                    =                                    {C2 product}
     intx MaxLabelRootDepth                         = 1100                                {C2 product}
     intx MaxLoopPad                                = 11                                  {C2 product}
    uintx MaxMetaspaceExpansion                     = 5451776                             {product}
    uintx MaxMetaspaceFreeRatio                     = 70                                  {product}
    uintx MaxMetaspaceSize                          = 4294901760                          {product}
    uintx MaxNewSize                               := 703594496                           {product}
     intx MaxNodeLimit                              = 75000                               {C2 product}
 uint64_t MaxRAM                                    =                                    {pd product}
    uintx MaxRAMFraction                            = double MaxRAMPercentage                          = 25.000000                           {product}
     intx MaxRecursiveInlineLevel                   =                                    {product}
    uintx MaxTenuringThreshold                      = 15                                  {product}
     intx MaxTrivialSize                            = 6                                   {product}
     intx MaxVectorSize                             =                                   {C2 product}
    uintx MetaspaceSize                             = 21807104                            {pd product}
     bool MethodFlushing                            =                                 {product}
    uintx MinHeapDeltaBytes                        := 524288                              {product}
    uintx MinHeapFreeRatio                          =                                    {manageable}
     intx MinInliningThreshold                      = 250                                 {product}
     intx MinJumpTableSize                          =                                   {C2 pd product}
    uintx MinMetaspaceExpansion                     = 339968                              {product}
    uintx MinMetaspaceFreeRatio                     =                                   {product}
    uintx MinRAMFraction                            = double MinRAMPercentage                          = 50.000000                           {product}
    uintx MinSurvivorRatio                          =                                    {product}
    uintx MinTLABSize                               = 2048                                {product}
     intx MonitorBound                              = bool MonitorInUseLists                         =                                {product}
     intx MultiArrayExpandLimit                     = bool MustCallLoadClassInternal                 =                                {product}
    uintx NUMAChunkResizeWeight                     =                                   {product}
    uintx NUMAInterleaveGranularity                 =                              {product}
    uintx NUMAPageScanRate                          =                                  {product}
    uintx NUMASpaceResizeRate                       =                           {product}
     bool NUMAStats                                 =                                {product}
    ccstr NativeMemoryTracking                      = off                                 {product}
     bool NeedsDeoptSuspend                         = bool NeverActAsServerClassMachine              = bool NeverTenure                               =                                {product}
    uintx NewRatio                                  =                                    {product}
    uintx NewSize                                  := 44040192                            {product}
    uintx NewSizeThreadIncrease                     = 5320                                {pd product}
     intx NmethodSweepActivity                      =                                   {product}
     intx NmethodSweepCheckInterval                 =                                    {product}
     intx NmethodSweepFraction                      =                                   {product}
     intx NodeLimitFudgeFactor                      =                                 {C2 product}
    uintx NumberOfGCLogFiles                        =                                    {product}
     intx NumberOfLoopInstrToAlign                  =                                    {C2 product}
     intx ObjectAlignmentInBytes                    =                                    {lp64_product}
    uintx OldPLABSize                               =                                 {product}
    uintx OldPLABWeight                             =                                   {product}
    uintx OldSize                                  := 88080384bool OmitStackTraceInFastThrow                 =                                 {product}
ccstrlist OnError                                   =                                     {product}
ccstrlist OnOutOfMemoryError                        =                                     {product}
     intx OnStackReplacePercentage                  = 140                                 {pd product}
     bool OptimizeFill                              = bool OptimizePtrCompare                        = bool OptimizeStringConcat                      = bool OptoBundling                              =                                {C2 pd product}
     intx OptoLoopAlignment                         =                                   {pd product}
     bool OptoScheduling                            =                                {C2 pd product}
    uintx PLABWeight                                = bool PSChunkLargeArrays                        =                                 {product}
     intx ParGCArrayScanChunk                       =                                   {product}
    uintx ParGCDesiredObjsFromOverflowList          = bool ParGCTrimOverflow                         = bool ParGCUseLocalOverflow                     =                                {product}
    uintx ParallelGCBufferWastePct                  =                                   {product}
    uintx ParallelGCThreads                         = bool ParallelGCVerbose                         =                                {product}
    uintx ParallelOldDeadWoodLimiterMean            =                                   {product}
    uintx ParallelOldDeadWoodLimiterStdDev          = bool ParallelRefProcBalancingEnabled           = bool ParallelRefProcEnabled                    = bool PartialPeelAtUnsignedTests                = bool PartialPeelLoop                           =                                 {C2 product}
     intx PartialPeelNewPhiDelta                    =                                    {C2 product}
    uintx PausePadding                              =                                    {product}
     intx PerBytecodeRecompilationCutoff            =                                  {product}
     intx PerBytecodeTrapLimit                      =                                    {product}
     intx PerMethodRecompilationCutoff              = 400                                 {product}
     intx PerMethodTrapLimit                        = bool PerfAllowAtExitRegistration               = bool PerfBypassFileSystemCheck                 =                                {product}
     intx PerfDataMemorySize                        = 32768                               {product}
     intx PerfDataSamplingInterval                  =                                   {product}
    ccstr PerfDataSaveFile                          =bool PerfDataSaveToFile                        = bool PerfDisableSharedMem                      =                                {product}
     intx PerfMaxStringConstLength                  =                                 {product}
     intx PreInflateSpin                            = bool PreferInterpreterNativeStubs              =                                {pd product}
     intx PrefetchCopyIntervalInBytes               = 576                                 {product}
     intx PrefetchFieldsAhead                       =                                    {product}
     intx PrefetchScanIntervalInBytes               = bool PreserveAllAnnotations                    = bool PreserveFramePointer                      =                                {pd product}
    uintx PretenureSizeThreshold                    = bool PrintAdaptiveSizePolicy                   = bool PrintCMSInitiationStatistics              =                                {product}
     intx PrintCMSStatistics                        = bool PrintClassHistogram                       = bool PrintClassHistogramAfterFullGC            = bool PrintClassHistogramBeforeFullGC           = bool PrintCodeCache                            = bool PrintCodeCacheOnCompilation               = bool PrintCommandLineFlags                     = bool PrintCompilation                          = bool PrintConcurrentLocks                      =                                {manageable}
     intx PrintFLSCensus                            =                                    {product}
     intx PrintFLSStatistics                        = bool PrintFlagsFinal                          := bool PrintFlagsInitial                         = bool PrintGC                                   = bool PrintGCApplicationConcurrentTime          = bool PrintGCApplicationStoppedTime             = bool PrintGCCause                              = bool PrintGCDateStamps                         = bool PrintGCDetails                            = bool PrintGCID                                 = bool PrintGCTaskTimeStamps                     = bool PrintGCTimeStamps                         = bool PrintHeapAtGC                             =                                {product rw}
     bool PrintHeapAtGCExtended                     = bool PrintHeapAtSIGBREAK                       = bool PrintJNIGCStalls                          = bool PrintJNIResolving                         = bool PrintOldPLAB                              = bool PrintOopAddress                           = bool PrintPLAB                                 = bool PrintParallelOldGCPhaseTimes              = bool PrintPromotionFailure                     = bool PrintReferenceGC                          = bool PrintSafepointStatistics                  =                                {product}
     intx PrintSafepointStatisticsCount             =                                  {product}
     intx PrintSafepointStatisticsTimeout           = -bool PrintSharedArchiveAndExit                 = bool PrintSharedDictionary                     = bool PrintSharedSpaces                         = bool PrintStringDeduplicationStatistics        = bool PrintStringTableStatistics                = bool PrintTLAB                                 = bool PrintTenuringDistribution                 = bool PrintTieredEvents                         = bool PrintVMOptions                            = bool PrintVMQWaitTime                          = bool PrintWarnings                             =                                 {product}
    uintx ProcessDistributionStride                 = bool ProfileInterpreter                        = bool ProfileIntervals                          =                                {product}
     intx ProfileIntervalsTicks                     =                                  {product}
     intx ProfileMaturityPercentage                 = bool ProfileVM                                 = bool ProfilerPrintByteCodeStatistics           = bool ProfilerRecordPC                          =                                {product}
    uintx PromotedPadding                           =                                    {product}
    uintx QueuedAllocationWarningCount              =                                    {product}
    uintx RTMRetryCount                             =                                    {ARCH product}
     bool RangeCheckElimination                     =                                 {product}
     intx ReadPrefetchInstr                         = bool ReassociateInvariants                     = bool ReduceBulkZeroing                         = bool ReduceFieldZeroing                        = bool ReduceInitialCardMarks                    = bool ReduceSignalUsage                         =                                {product}
     intx RefDiscoveryPolicy                        = bool ReflectionWrapResolutionErrors            = bool RegisterFinalizersAtInit                  = bool RelaxAccessControlCheck                   =                                {product}
    ccstr ReplayDataFile                            =bool RequireSharedSpaces                       =                                {product}
    uintx ReservedCodeCacheSize                     = 251658240                           {pd product}
     bool ResizeOldPLAB                             = bool ResizePLAB                                = bool ResizeTLAB                                = bool RestoreMXCSROnJNICalls                    = bool RestrictContended                         = bool RewriteBytecodes                          = bool RewriteFrequentPairs                      =                                 {pd product}
     intx SafepointPollOffset                       =                                  {C1 pd product}
     intx SafepointSpinBeforeYield                  = bool SafepointTimeout                          =                                {product}
     intx SafepointTimeoutDelay                     = bool ScavengeBeforeFullGC                      =                                 {product}
     intx SelfDestructTimer                         =                                    {product}
    uintx SharedBaseAddress                         =                                    {product}
    ccstr SharedClassListFile                       =                                     {product}
    uintx SharedMiscCodeSize                        = 122880                              {product}
    uintx SharedMiscDataSize                        =                              {product}
    uintx SharedReadOnlySize                        = 16777216                            {product}
    uintx SharedReadWriteSize                       = bool ShowMessageBoxOnError                     =                                {product}
     intx SoftRefLRUPolicyMSPerMB                   = bool SpecialEncodeISOArray                     = bool SplitIfBlocks                             =                                 {C2 product}
     intx StackRedPages                             =                                    {pd product}
     intx StackShadowPages                          =                                    {pd product}
     bool StackTraceInThrowable                     =                                 {product}
     intx StackYellowPages                          = bool StartAttachListener                       =                                {product}
     intx StarvationMonitorInterval                 = bool StressLdcRewrite                          =                                {product}
    uintx StringDeduplicationAgeThreshold           =                                    {product}
    uintx StringTableSize                           = 60013bool SuppressFatalErrorMessage                 =                                {product}
    uintx SurvivorPadding                           =                                    {product}
    uintx SurvivorRatio                             =                                    {product}
     intx SuspendRetryCount                         =                                   {product}
     intx SuspendRetryDelay                         =                                    {product}
     intx SyncFlags                                 =                                    {product}
    ccstr SyncKnobs                                 =                                     {product}
     intx SyncVerbose                               =                                    {product}
    uintx TLABAllocationWeight                      =                                   {product}
    uintx TLABRefillWasteFraction                   =                                   {product}
    uintx TLABSize                                  = bool TLABStats                                 =                                 {product}
    uintx TLABWasteIncrement                        =                                    {product}
    uintx TLABWasteTargetPercent                    =                                    {product}
    uintx TargetPLABWastePct                        =                                   {product}
    uintx TargetSurvivorRatio                       =                                   {product}
    uintx TenuredGenerationSizeIncrement            =                                   {product}
    uintx TenuredGenerationSizeSupplement           =                                   {product}
    uintx TenuredGenerationSizeSupplementDecay      =                                    {product}
     intx ThreadPriorityPolicy                      = bool ThreadPriorityVerbose                     =                                {product}
    uintx ThreadSafetyMargin                        = 52428800                            {product}
     intx ThreadStackSize                           =                                    {pd product}
    uintx ThresholdTolerance                        =                                   {product}
     intx Tier0BackedgeNotifyFreqLog                =                                   {product}
     intx Tier0InvokeNotifyFreqLog                  =                                    {product}
     intx Tier0ProfilingStartPercentage             =                                  {product}
     intx Tier23InlineeNotifyFreqLog                =                                   {product}
     intx Tier2BackEdgeThreshold                    =                                    {product}
     intx Tier2BackedgeNotifyFreqLog                = 14                                  {product}
     intx Tier2CompileThreshold                     =                                    {product}
     intx Tier2InvokeNotifyFreqLog                  =                                   {product}
     intx Tier3BackEdgeThreshold                    = 60000                               {product}
     intx Tier3BackedgeNotifyFreqLog                = 13                                  {product}
     intx Tier3CompileThreshold                     =                                 {product}
     intx Tier3DelayOff                             =                                    {product}
     intx Tier3DelayOn                              =                                    {product}
     intx Tier3InvocationThreshold                  =                                  {product}
     intx Tier3InvokeNotifyFreqLog                  =                                   {product}
     intx Tier3LoadFeedback                         =                                    {product}
     intx Tier3MinInvocationThreshold               =                                  {product}
     intx Tier4BackEdgeThreshold                    =                                {product}
     intx Tier4CompileThreshold                     = 15000                               {product}
     intx Tier4InvocationThreshold                  =                                 {product}
     intx Tier4LoadFeedback                         =                                    {product}
     intx Tier4MinInvocationThreshold               = 600bool TieredCompilation                         =                                 {pd product}
     intx TieredCompileTaskTimeout                  =                                   {product}
     intx TieredRateUpdateMaxTime                   =                                   {product}
     intx TieredRateUpdateMinTime                   =                                    {product}
     intx TieredStopAtLevel                         = bool TimeLinearScan                            =                                {C1 product}
     bool TraceBiasedLocking                        = bool TraceClassLoading                         = bool TraceClassLoadingPreorder                 = bool TraceClassPaths                           = bool TraceClassResolution                      = bool TraceClassUnloading                       = bool TraceDynamicGCThreads                     = bool TraceGen0Time                             = bool TraceGen1Time                             =                                {product}
    ccstr TraceJVMTI                                =bool TraceLoaderConstraints                    = bool TraceMetadataHumongousAllocation          = bool TraceMonitorInflation                     = bool TraceParallelOldGCTasks                   =                                {product}
     intx TraceRedefineClasses                      = bool TraceSafepointCleanupTime                 = bool TraceSharedLookupCache                    = bool TraceSuspendWaitFailures                  =                                {product}
     intx TrackedInitializationLimit                = bool TransmitErrorReport                       = bool TrapBasedNullChecks                       = bool TrapBasedRangeChecks                      =                                {C2 pd product}
     intx TypeProfileArgsLimit                      =                                    {product}
    uintx TypeProfileLevel                          = 111                                 {pd product}
     intx TypeProfileMajorReceiverPercent           = 90                                  {C2 product}
     intx TypeProfileParmsLimit                     =                                    {product}
     intx TypeProfileWidth                          =                                    {product}
     intx UnguardOnExecutionViolation               = bool UnlinkSymbolsALot                         = bool Use486InstrsOnly                          =                                {ARCH product}
     bool UseAES                                    = bool UseAESIntrinsics                          =                                 {product}
     intx UseAVX                                    = bool UseAdaptiveGCBoundary                     = bool UseAdaptiveGenerationSizePolicyAtMajorCollection  = bool UseAdaptiveGenerationSizePolicyAtMinorCollection  = bool UseAdaptiveNUMAChunkSizing                = bool UseAdaptiveSizeDecayMajorGCCost           = bool UseAdaptiveSizePolicy                     = bool UseAdaptiveSizePolicyFootprintGoal        = bool UseAdaptiveSizePolicyWithSystemGC         = bool UseAddressNop                             =                                 {ARCH product}
     bool UseAltSigs                                = bool UseAutoGCSelectPolicy                     = bool UseBMI1Instructions                       = bool UseBMI2Instructions                       = bool UseBiasedLocking                          = bool UseBimorphicInlining                      = bool UseBoundThreads                           = bool UseCLMUL                                  = bool UseCMSBestFit                             = bool UseCMSCollectionPassing                   = bool UseCMSCompactAtFullCollection             = bool UseCMSInitiatingOccupancyOnly             = bool UseCRC32Intrinsics                        = bool UseCodeCacheFlushing                      = bool UseCompiler                               = bool UseCompilerSafepoints                     = bool UseCompressedClassPointers               :=                                 {lp64_product}
     bool UseCompressedOops                        := bool UseConcMarkSweepGC                        = bool UseCondCardMark                           = bool UseCountLeadingZerosInstruction           = bool UseCountTrailingZerosInstruction          = bool UseCountedLoopSafepoints                  = bool UseCounterDecay                           = bool UseDivMod                                 = bool UseDynamicNumberOfGCThreads               = bool UseFPUForSpilling                         = bool UseFastAccessorMethods                    = bool UseFastEmptyMethods                       = bool UseFastJNIAccessors                       = bool UseFastStosb                              = bool UseG1GC                                   = bool UseGCLogFileRotation                      = bool UseGCOverheadLimit                        = bool UseGCTaskAffinity                         = bool UseHeavyMonitors                          = bool UseInlineCaches                           = bool UseInterpreter                            = bool UseJumpTables                             = bool UseLWPSynchronization                     = bool UseLargePages                             = bool UseLargePagesInMetaspace                  = bool UseLargePagesIndividualAllocation        := bool UseLockedTracing                          = bool UseLoopCounter                            = bool UseLoopInvariantCodeMotion                = bool UseLoopPredicate                          = bool UseMathExactIntrinsics                    = bool UseMaximumCompactionOnSystemGC            = bool UseMembar                                 = bool UseMontgomeryMultiplyIntrinsic            = bool UseMontgomerySquareIntrinsic              = bool UseMulAddIntrinsic                        = bool UseMultiplyToLenIntrinsic                 = bool UseNUMA                                   = bool UseNUMAInterleaving                       = bool UseNewLongLShift                          = bool UseOSErrorReporting                       = bool UseOldInlining                            = bool UseOnStackReplacement                     = bool UseOnlyInlinedBimorphic                   = bool UseOptoBiasInlining                       = bool UsePSAdaptiveSurvivorSizePolicy           = bool UseParNewGC                               = bool UseParallelGC                            := bool UseParallelOldGC                          = bool UsePerfData                               = bool UsePopCountInstruction                    = bool UseRDPCForConstantTableBase               = bool UseRTMDeopt                               = bool UseRTMLocking                             = bool UseSHA                                    = bool UseSHA1Intrinsics                         = bool UseSHA256Intrinsics                       = bool UseSHA512Intrinsics                       =                                {product}
     intx UseSSE                                    = bool UseSSE42Intrinsics                        = bool UseSerialGC                               = bool UseSharedSpaces                           = bool UseSignalChaining                         = bool UseSquareToLenIntrinsic                   = bool UseStoreImmI16                            = bool UseStringDeduplication                    = bool UseSuperWord                              = bool UseTLAB                                   = bool UseThreadPriorities                       = bool UseTypeProfile                            = bool UseTypeSpeculation                        = bool UseUTCFileTimestamp                       = bool UseUnalignedLoadStores                    = bool UseVMInterruptibleIO                      = bool UseXMMForArrayCopy                        = bool UseXmmI2D                                 = bool UseXmmI2F                                 = bool UseXmmLoadAndClearUpper                   = bool UseXmmRegToRegMoveAll                     = bool VMThreadHintNoPreempt                     =                                {product}
     intx VMThreadPriority                          = -                                  {product}
     intx VMThreadStackSize                         =                                    {pd product}
     intx ValueMapInitialSize                       =                                   {C1 product}
     intx ValueMapMaxLoopSize                       =                                    {C1 product}
     intx ValueSearchLimit                          = bool VerifyMergedCPBytecodes                   = bool VerifySharedSpaces                        =                                {product}
     intx WorkAroundNPTLTimedWaitHang               =                                    {product}
    uintx YoungGenerationSizeIncrement              =                                   {product}
    uintx YoungGenerationSizeSupplement             =                                   {product}
    uintx YoungGenerationSizeSupplementDecay        =                                    {product}
    uintx YoungPLABSize                             = 4096bool ZeroTLAB                                  =                                {product}
     intx hashCode                                  =                                    {product}
用法: java [-
                  使用指定的图像显示启动屏幕
有关详细信息,请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。
View Code

上面的参数中有等号(=和:=),分别代表的是默认值,和被修改的值啦

好了,基础够基础了吧,以后这些加(+)减(-)等于(=或:=)看的懂了

二、基础工具

$JAVA_HOME/bin目录下真的有很多的工具,这里不截图啦,直接上用的比较的工具好啦

2.1、jps

这个工具真的很实用,而且很简单呢,功能linux的ps命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Identifier)

[root@hadoop apache-tomcat-8.5.57]# jps -help
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]
-l : 输出主类全名或jar路径
-q : 只输出LVMID
-m : 输出JVM启动时传递给main()的参数
-v : 输出JVM启动时显示指定的JVM参数

 

 

 2.2、jstat

jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程[插图]虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据。

[root@hadoop apache-tomcat-57]# jstat -help
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine,typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number  the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>[ms"|s]
                Where <n> is an integer and the suffix specifies the units as
                milliseconds(") or seconds("). The default units are .
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.

jstat -options #查看下支持的选项,如下

[root@hadoop apache-tomcat-options
-class  #类加载器
-compiler #JIT
-gc  #GC堆状态
-gccapacity #各个区的大小
-gccause #最近一次GC的统计和原因
-gcmetacapacity #元空间大小
-gcnew #新区统计
-gcnewcapacity #新区大小
-gcold #老区统计
-gcoldcapacity #老区大小
-gcutil #GC汇总统计
-printcompilation #HotSpot编译统计
Options #选项,我们一般使用 -gcutil 查看gc情况 
vmid    #VM的进程号,即当前运行的java进程号,可以理解我java程序的pid
interval #间隔时间,单位为秒或者毫秒
count   #打印次数,如果缺省则打印无数次

对于命令格式中的VMID与LVMID需要特别说明一下:如果是本地虚拟机进程,VMID与LVMID是一致的;如果是远程虚拟机进程,那VMID的格式应当是

[protocol:][]lvmid[@hostname][:port]/servername]

开始操作:

jstat -class 1645  #类加载的统计

Loaded:加载class的数量
Bytes:所占用空间大小
Unloaded:未加载数量
Bytes:未加载占用空间
Time:时间

jstat -gc 1645  1 3 #统计3次,每隔一秒,对gc进行统计

S0C:第一个Survivor区的大小(KB)
S1C:第二个Survivor区的大小(KB)
S0U:第一个Survivor区的使用大小(KB)
S1U:第二个Survivor区的使用大小(KB)
EC:Eden区的大小(KB)
EU:Eden区的使用大小(KB)
OC:Old区大小(KB)
OU:Old使用大小(KB)
MC:方法区大小(KB),java8方法区的实现是元数据空间,java7的方法区实现是永久代
MU:方法区使用大小(KB)
CCSC:压缩类空间大小(KB)
CCSU:压缩类空间使用大小(KB)
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

jstat -compiler 1645 #对编译进行统计

Compiled:编译数量。
Failed:失败数量
Invalid:不可用数量
Time:时间
FailedType:失败类型
FailedMethod:失败的方法

 2.3、jinfo

jinfo(Configuration Info for Java)的作用是实时查看和调整虚拟机各项参数

[root@hadoop ~]# jinfo -help
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or 
        (to connect to remote debug server)

where <option> is one of:
    -flag <name>         to print the value of the named VM flag #打印单个jvm的参数
    -flag [+|-]<name>    to enable or disable the named VM flag #运行期修改一部分运行期可写的虚拟机参数值
    -flag <name>=<value> to set the named VM flag to the given value #运行期修改一部分运行期可写的虚拟机参数值
    -flags               to print VM flags #打印该进程的相关的参数
    -sysprops            to print Java system properties #把虚拟机进程的System.getProperties()的内容打印出来
    <no option>          to print both of the above
    -h | -help           to print this help message

jinfo -flags  1645

 

 

 jinfo -flag InitialHeapSize  1645

 

 

 jinfo -flag InitialHeapSize  1645

[root@hadoop ~]# jinfo -sysprops  1645
Attaching to process ID 1645,please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.181-b13
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = b13
sun.boot.library.path = /home/hadoop/jdk/jre/lib/amd64
java.protocol.handler.pkgs = org.apache.catalina.webresources
shared.loader =
java.vendor.url = http:java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
java.util.logging.config.file = /root/apache-tomcat-57/conf/logging.properties
tomcat.util.buf.StringCache.byte.enabled = 
sun.os.patch.level = unknown
sun.java.launcher = SUN_STANDARD
user.country = US
tomcat.util.scan.StandardJarScanFilter.jarsToScan = log4j-taglib*.jar,log4j-web*.jar,log4javascript*.jar,slf4j-taglib*.jar
user.dir = /root/apache-tomcat-57
java.vm.specification.name = Java Virtual Machine Specification
java.runtime.version = 1.8.0_181-b13
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
os.arch = amd64
java.endorsed.dirs = /home/hadoop/jdk/jre/lib/endorsed
line.separator =

java.io.tmpdir = /root/apache-tomcat-57/temp
java.vm.specification.vendor = Oracle Corporation
java.util.logging.manager = org.apache.juli.ClassLoaderLogManager
java.naming.factory.url.pkgs = org.apache.naming
os.name = Linux
org.apache.catalina.security.SecurityListener.UMASK = 0027
sun.jnu.encoding = UTF-
ignore.endorsed.dirs =
java.library.path = /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.class.version = 52.0
java.specification.name = Java Platform API Specification
sun.management.compiler = HotSpot Bit Tiered Compilers
os.version = 2.6.32-754.24..el6.x86_64
java.util.concurrent.ForkJoinPool.common.threadFactory = org.apache.catalina.startup.SafeForkJoinWorkerThreadFactory
user.home = /root
user.timezone = Asia/Chongqing
catalina.useNaming = 
java.awt.printerjob = sun.print.PSPrinterJob
file.encoding = UTF-
java.specification.version = 1.8
tomcat.util.scan.StandardJarScanFilter.jarsToSkip = annotations-api.jar,ant-junit*.jar,ant-launcher.jar,ant.jar,asm-*.jar,aspectj*.jar,bootstrap.jar,catalina-ant.jar,catalina-ha.jar,catalina-jmx-remote.jar,catalina-storeconfig.jar,catalina-tribes.jar,catalina-ws.jar,catalina.jar,cglib-*.jar,cobertura-*.jar,commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,commons-daemon.jar,commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,commons-math*.jar,commons-pool*.jar,dom4j-*.jar,easymock-*.jar,ecj-*.jar,el-api.jar,geronimo-spec-jaxrpc*.jar,h2*.jar,hamcrest-*.jar,hibernate*.jar,httpclient*.jar,icu4j-*.jar,jasper-el.jar,jasper.jar,jaspic-api.jar,jaxb-*.jar,jaxen-*.jar,jdom-*.jar,jetty-*.jar,jmx-tools.jar,jmx.jar,jsp-api.jar,jstl.jar,jta*.jar,junit-*.jar,junit.jar,log4j*.jar,mail*.jar,objenesis-*.jar,oraclepki.jar,oro-*.jar,servlet-api-*.jar,servlet-api.jar,slf4j*.jar,taglibs-standard-spec-*.jar,tagsoup-*.jar,tomcat-api.jar,tomcat-coyote.jar,tomcat-dbcp.jar,tomcat-i18n-*.jar,tomcat-jdbc.jar,tomcat-jni.jar,tomcat-juli-adapters.jar,tomcat-juli.jar,tomcat-util-scan.jar,tomcat-util.jar,tomcat-websocket.jar,tools.jar,websocket-api.jar,wsdl4j*.jar,xercesImpl.jar,xml-apis.jar,xmlParserAPIs-*.jar,xmlParserAPIs.jar,xom-*.jar
catalina.home = /root/apache-tomcat-
user.name = root
java.class.path = /root/apache-tomcat-57/bin/bootstrap.jar:/root/apache-tomcat-57/bin/tomcat-juli.jar
java.naming.factory.initial = org.apache.naming.java.javaURLContextFactory
package.definition = sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.naming.,org.apache.tomcat.
java.vm.specification.version = 
sun.arch.data.model = 
sun.java.command = org.apache.catalina.startup.Bootstrap start
java.home = /home/hadoop/jdk/jre
user.language = en
java.specification.vendor = Oracle Corporation
awt.toolkit = sun.awt.X11.XToolkit
java.vm.info = mixed mode
java.version = .0_181
java.ext.dirs = /home/hadoop/jdk/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path = /home/hadoop/jdk/jre/lib/resources.jar:/home/hadoop/jdk/jre/lib/rt.jar:/home/hadoop/jdk/jre/lib/sunrsasign.jar:/home/hadoop/jdk/jre/lib/jsse.jar:/home/hadoop/jdk/jre/lib/jce.jar:/home/hadoop/jdk/jre/lib/charsets.jar:/home/hadoop/jdk/jre/lib/jfr.jar:/home/hadoop/jdk/jre/classes
server.loader =
java.vendor = Oracle Corporation
catalina.base = /root/apache-tomcat-
jdk.tls.ephemeralDHKeySize = 2048
file.separator = /
java.vendor.url.bug = http:bugreport.sun.com/bugreport/
common.loader = ${catalina.base}/lib",${catalina.base}/lib/*.jar${catalina.home}/lib${catalina.home}/lib/*.jar
sun.io.unicode.encoding = UnicodeLittle
sun.cpu.endian = little
package.access =View Code

2.4、jmap

jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件),还可以使用“暴力”方式:-XX:+HeapDumpOnOutOfMemoryError参数,可以让虚拟机在内存溢出异常出现之后自动生成堆转储快照文件

jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等

[root@hadoop ~]# jmap -help
Usage:
    jmap [option] <pid>
        (to connect to running process)
    jmap [option] <executable <core>)
    jmap [option] [server_id@]<remote server IP or  is one of:
    <none>               to print same info as Solaris pmap
    -heap                to print java heap summary #统计堆
    -histo[:live]        to print histogram of java object heap; if the live
                         suboption is specified,only count live objects
    -clstats             to print class loader statistics
    -finalizerinfo       to print information on objects awaiting finalization
    -dump:<dump-options> to dump java heap in hprof binary format #dump出java堆的二进制文件
                         dump-options:
                           live         dump only live objects; if not specified,all objects  the heap are dumped.
                           format=b     binary format
                           file=<file>  dump heap to <
                         Example: jmap -dump:live,format=b,file=heap.bin <pid>
    -F                   force. Use with -dump:<dump-options> <pid> or -histo
                         to force a heap dump or histogram when <pid> does not
                         respond. The  suboption is not supported
                          this mode.
    -h | -help           to print this help message
    -J<flag>             to pass <flag> directly to the runtime system
-heap #打印jvm heap的情况,比如参数,分代,回收器等
-histo #打印jvm heap的直方图。其输出信息包括类名,对象数量,对象占用大小。  
-histo:live #同上,但是只答应存活对象的情况   
-dump #生成堆转储快照,格式为-dump:[live,]format=b,1)">file=<filename>,其中自参数说明是否只dump出存活对象
-finalizerinfo #显示在F-Queue中等待的finalizer线程执行finalize方法的对象 
-clstats #打印类的加载信息
-F #强制生成dump文件

jmap -heap 1645

 

 

 jmap -histo 1645 | more   #查看内存中的对象和数量

 

 

 上图中的对象说明:

B byte
C char
D double
F float
I int
J long
Z boolean
[ 数组,如[I表示int[]
[L+类名 其他对象
jmap -dump:format=b,file=/root/dump.bin 1645  #将内存的使用情况dump到文件中
[root@hadoop bin]# jmap -dump:format=b,1)">file=/root/dump.bin 
Dumping heap to /root/dump.bin ...
Heap dump file created

 

 

 2.5、jhat

JDK提供jhat(JVM Heap Analysis Tool)命令与jmap搭配使用,来分析jmap生成的堆转储快照。jhat内置了一个微型的HTTP/Web服务器,生成堆转储快照的分析结果后,可以在浏览器中查看(实际情况使用的不多)

[root@hadoop ~]# jhat -help
Usage:  jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>

        -J<flag>          Pass <flag> directly to the runtime system. For
                          example,-J-mx512m to use a maximum heap size of 512MB
        -stack false:     Turn off tracking object allocation call stack.
        -refs :      Turn off tracking of references to objects
        -port <port>:     Set the port for the HTTP server.  Defaults to 7000
        -exclude <file>:  Specify a  that lists data members that should
                          be excluded from the reachableFrom query.
        -baseline <file>: Specify a baseline object dump.  Objects 
                          both heap dumps with the same ID and same class will
                          be marked as not being new.
        -debug <int>:     Set debug level.
                            :  No debug output
                            1:  Debug hprof  parsing
                            2:  Debug hprof  parsing,no server
        -version          Report version number
        -h|-help          Print this help and exit
        <file>            The  to read

For a dump  that contains multiple heap dumps,you may specify which dump in the 
by appending #<number>" to the file name,i.e. foo.hprof#3.

All boolean options default to true"

jhat -port 9999 dump.bin 

 

 

 登录自己的地址:http://192.168.88.137:9999/

 

 

 这个网址拉到最下面有一个查询功能:

 

 

 

 

 

 如上的每一个结果都可以点进去去查看

2.6、jstack

jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或者javacore文件)。线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的目的通常是定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的常见原因

[root@hadoop ~]# jstack -help
Usage:
    jstack [-l] <pid>
        (to connect to running process)
    jstack -F [-m] [-l] <pid>
        (to connect to a hung process)
    jstack [-m] [-l] <executable> <core>)
    jstack [-m] [-l] [server_id@]<remote server IP or 
        (to connect to a remote debug server)

Options:
    -F  to force a thread dump. Use when jstack <pid> does not respond (process is hung)
    -m  to print both java and native frames (mixed mode)
    -l   listing. Prints additional information about locks
    -h or -help to print this help message
-F : 当正常输出请求不被响应时,强制输出线程堆栈
-l : 除堆栈外,显示关于锁的附加信息
-m : 如果调用到本地方法的话,可以显示C/C++的堆栈

jstack 1645 | more  #查看该线程的快照信息

 

 

 如上的状态信息可以参考:java多线程与并发(基础篇)

三、可视化工具

3.1、JConsole

JConsole(Java Monitoring and Management Console)是一款基于JMX(Java Manage-ment Extensions)的可视化监视、管理工具。它的主要功能是通过JMX的MBean(Managed Bean)对系统进行信息收集和参数动态调整

一、本地连接

 

 

 可以看出来可以对内存,线程等进行监控。

二、远程监控

这里我们使用tomcat做实验,首先要修改catalina.sh文件,添加如下内容:参考https://blog.csdn.net/shamoshuizu/article/details/70598268

JAVA_OPTS=-Djava.rmi.server.hostname=192.168.88.137 -Dcom.sun.management.jmxremote.port=8099 -Dcom.sun.management.jmxremote.rmi.port=8099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

然后重启tomcat,接下来连接远程

 

 

这个工具使用起来并不难,只要自己要有jvm的基础啦,不然看不懂,展示出来了也是白干活。

3.2、VisualVM

VisualVM(All-in-One Java Troubleshooting Tool)是功能最强大的运行监视和故障处理程序之一,能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC的对象,反向查看分配的堆栈,使用起来也很简单

 双击jvisualvm.exe软件,打开该工具

 

同JConsole 一样可以本地和远程,直接打开本地进程

 

 基本pid,jvm参数,主机等一览无余,还有监控页面包括cpu,堆,类,线程等监控,还可以执行垃圾回收,和dump线程呢

 

 

 试试远程的,同JConsole 的设置方式对tomcate进行设置

 

 

 

其实工具是什么呢,就是为了方便获取信息嘛,能不能看懂,能不能还得看自己的水平够不够,能不能够发现问题,能不能解决问题了。

 3.3、JMC

 Java Mission Control:可持续在线的监控工具

JMC与虚拟机之间同样采取JMX协议进行通信,JMC一方面作为JMX控制台,显示来自虚拟机MBean提供的数据;另一方面作为JFR的分析工具,展示来自JFR的数据

 用起来也很简单,双击jmc.exe打开工具,默认情况下会扫描出本地的进程,然后可以点击:文件->连接,来创建新的连接:

 

然后根据下图操作,遇到情况下一步,下一步就好,就有如下的图了:

 

 该工具持续监控了很多东西:

一般信息:关于虚拟机、操作系统和记录的一般信息。
内存:关于内存管理和垃圾收集的信息。
代码:关于方法、异常错误、编译和类加载的信息。
线程:关于应用程序中线程和锁的信息。
I/O:关于文件和套接字输入、输出的信息。
系统:关于正在运行Java虚拟机的系统、进程和环境变量的信息。
事件:关于记录中的事件类型的信息,可以根据线程或堆栈跟踪,按照日志或图形的格式查看。

四、其他工具-MAT

MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象

官网:https://www.eclipse.org/mat/

下载地址:https://www.eclipse.org/mat/downloads.php

下载后,解压,双击MemoryAnalyzer.exe打开程序,然后点击文件->打开dump出的文件,就出现了如下的图

 

 

 下图可以看到基本的内存可能出问题的地方:

 

 

 

这篇文章纯粹是一个工具的使用简单说明,没有太多的技术含量,但是我觉得工欲善其事必先利其器,所以用好一些工具对自己能力的提升,效率的提升有莫大的帮助,工具这些东西只有用到的时候才会查找,但是也要大概了解下怎么用吧,比如什么工具可以用来干嘛呢,我写这个的目的就是用来以后自己当做工具文档来查看下,技术用时方恨少,所以平时多积累些也不是一件坏事呢,好吧,好好努力撒。

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jinfo 命令可以用来查看 Java 进程运行的 JVM 参数,命令如下:[root@admin ~]# jinfo --helpUsage: jinfo [option] &lt;pid&gt; (to connect to running process) jinfo [option] &lt;executable &lt;core&gt; (to connect to a core file) jinfo [option] [serve
原文链接:https://www.cnblogs.com/niejunlei/p/5987611.htmlJava Virtual Machine Stacks,线程私有,生命周期与线程相同,描述的是Java方法执行的内存模型:每一个方法执行的同时都会创建一个栈帧(Stack Frame),由于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法的执行就对应着栈帧在虚拟机栈中的入栈,出栈...
java 语言, 开发者不能直接控制程序运行内存, 对象的创建都是由类加载器一步步解析, 执行与生成与内存区域中的; 并且jvm有自己的垃圾回收器对内存区域管理, 回收; 但是我们已经可以通过一些工具来在程序运行时查看对应的jvm内存使用情况, 帮助更好的分析与优化我们的代码;jps查看系统中有哪些java进程jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息
1.jvm的简单抽象模型:  2.类加载机制     双亲委派模型是为了防止jdk核心类库被篡改,如果需要打破可以重写Classloader.loadClass方法。r 双亲委派模型:一个类加载器收到一个类的加载请求,他会先判断自身是否已存在该类,如果不存在上抛给上一级类加载器ClassLoad
堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代码中还可以使用堆外内存,比如Netty,广泛使用了堆外内存,但是这部分的内存并不归JVM管理,GC算法并不会对它们进行回收,所以在使用堆外内存时,要格外小心,防止内存一直得不到释放,造成线上故障。堆外内存的申请和释放JDK的ByteBuffe
1.springboot和tomcat2.springcloud的请求如何通过网关鉴权?3.springmvc启动时组件的加载顺序?4.mybatis如何同时更新三条记录5.hibernate实现级联更新6.一个web程序应用程序启动时的加载流程7.如何向www.baidu.com地址发出请求时,并获取相应?8.???9.谈谈你对tcp/iptelnetudp协
堆设置-Xms256M:初始堆大小256M,默认为物理内存的1/64-Xmx1024M:最大堆大小1024M,默认为物理内存的1/4,等于与-XX:MaxHeapSize=64M-Xmn64M:年轻代大小为64M(JDK1.4后支持),相当于同时设置NewSize和MaxNewSize为64M-XX:NewSize=64M:初始年轻代大小-XX:MaxNewSize=256M:最大年轻代大小(默认
一.概述收集算法(JVM之垃圾回收-垃圾收集算法)是内存回收的抽象策略,垃圾收集器就是内存回收的具体实现。JVM规范对于垃圾收集器的应该如何实现没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器差别较大,这里只看HotSpot虚拟机。就像没有最好的算法一样,垃圾收集器
Java中的堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象,如下图所示: 在Java中,堆被划分成两个不同的区域:新生代(Young)、老年代(Old)。新生代(Young)又被划分为三个区域:Eden、S0、S1。 这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包
JVM深入理解JVM(4)——如何优化JavaGC「译」 PostedbyCrowonAugust21,2017本文翻译自SangminLee发表在Cubrid上的”BecomeaJavaGCExpert”系列文章的第三篇《HowtoTuneJavaGarbageCollection》,本文的作者是韩国人,写在JDK1.8发布之前,虽然有些地
 JVM深入理解JVM(2)——GC算法与内存分配策略 PostedbyCrowonAugust10,2017说起垃圾收集(GarbageCollection,GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Scala等)程序员在提升开
运行时数据区  线程独有本地方法栈、虚拟机栈、程序计数器这些与线程对应的数据区会随着线程开始和结束创建和销毁  整体公有元数据区(又称方法区)、堆区会随着虚拟机启动而创建,随着虚拟机退出而销毁 
java整个堆大小设置:Xmx和Xms设置为老年代存活对象的3-4倍,即FullGC之后的老年代内存占用的3-4倍。永久代PermSize和MaxPermSize设置为老年代存活对象的1.2-1.5倍年轻代Xmx的设置为老年代存活对象的1-1.5倍老年代的内存大小设置为老年代存活对象的2-3倍BTW: Sun官方建议年轻代
栈顶缓存(Top-of-StackCashing)技术基于栈式架构得虚拟机所使用的零地址指令更加紧凑,但完成一项操作的时候必然使用更多的入栈和出栈指令,这同时也就意味着将需要更多的指令分派次数和内存读写次数 由于操作数是存储在内存重的,因此频繁地执行内存读/写操作必然影响速度。 综上
自用。同样的代码在不同的平台生成的机器码是不一样的,为什么java代码生成的字节码文件,能在不同的平台运行?因为不同版本的jdk里面的虚拟机会屏蔽不同操作系统在底层硬件与指令上的区别。栈:线程栈,局部变量存放栈内存区域。线程(分配一个栈)运行分配栈将局部变量放入内存。怎么放:栈
jconsole监控:1.java启动命令加上参数java-Djava.rmi.server.hostname=172.16.17.247-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=2099-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false -XX:+Unlock
类加载器分类publicclassStackStruTest{publicstaticvoidmain(String[]args){//对用户自定义个类来说:默认使用系统类加载器进行加载-----AppClassLoaderClassLoaderclassLoader=StackStruTest.class.getClassLoader();System.out.p
堆体系结构一个JVM实例只存在一个堆内存,堆内存的大小是可调节的。类加载器读取类文件后,需要把类、方法、常量、变量放在堆内存中,保存所有引用类型的真实信息,以方便执行器指向,堆内存分为三个部分:年轻代、老年代、永久代。Java7之前,堆内存在逻辑上分为:年轻代、老年代、永久代。物
JVM深入理解JVM(5)——虚拟机类加载机制 PostedbyCrowonAugust21,2017在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。而虚拟机中,而虚拟机如何加载这些Class文件?Class文件中的信息进入到虚拟机中会发生什么变化?本文将逐步解答这
保存(持久化)对象及其状态到内存或者磁盘Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在