如何设置Java虚拟机JVM启动内存参数

Python010

如何设置Java虚拟机JVM启动内存参数,第1张

设置Java虚拟机JVM启动内存参数方法如下:

Tomcat修改TOMCAT_HOME/bin/catalina.bat,在[echo Using CATALINA_BASE: "%CATALINA_BASE%"] 上面加入,比如:

set JAVA_OPTS= -server -Xms1536m -Xmx1536m或者JAVA_OPTS="-server -Xms1536m -Xmx1536m",

服务器模式参数-server不加也可以 ,就变成

set JAVA_OPTS= -Xms1536m -Xmx1536m或者JAVA_OPTS=" -Xms1536m -Xmx1536m",

参数: AdaptivePermSizeWeight

用法:

参数: AdaptiveSizeDecrementScaleFactor

用法:

参数: AdaptiveSizeMajorGCDecayTimeScale

用法:

参数: AdaptiveSizePausePolicy

用法:

参数: AdaptiveSizePolicyCollectionCostMargin

用法:

参数: AdaptiveSizePolicyInitializingSteps

用法:

参数: AdaptiveSizePolicyOutputInterval

用法:

参数: AdaptiveSizePolicyWeight

用法:

参数: AdaptiveSizeThroughPutPolicy

用法:

参数: AdaptiveTimeWeight

用法:

参数: AdjustConcurrency

用法:

参数: AggressiveOpts

用法:

参数: AliasLevel

用法:

参数: AlignVector

用法:

参数: AllocateInstancePrefetchLines

用法:

参数: AllocatePrefetchDistance

用法:

参数: AllocatePrefetchInstr

用法:

参数: AllocatePrefetchLines

用法:

参数: AllocatePrefetchStepSize

用法:

参数: AllocatePrefetchStyle

用法:

参数: AllowJNIEnvProxy

用法:

参数: AllowNonVirtualCalls

用法:

参数: AllowParallelDefineClass

用法:

参数: AllowUserSignalHandlers

用法:

参数: AlwaysActAsServerClassMachine

用法:

参数: AlwaysCompileLoopMethods

用法:

参数: AlwaysLockClassLoader

用法:

参数: AlwaysPreTouch

用法: -XX:+AlwaysPreTouch

参数: AlwaysRestoreFPU

用法:

参数: AlwaysTenure

用法:

参数: AssertOnSuspendWaitFailure

用法:

参数: AssumeMP

用法:

参数: Atomics

用法:

参数: AutoBoxCacheMax

用法: -XX:AutoBoxCacheMax=128

参数: AutoGCSelectPauseMillis

用法:

参数: BCEATraceLevel

用法:

参数: BackEdgeThreshold

用法:

参数: BackgroundCompilation

用法:

参数: BaseFootPrintEstimate

用法:

参数: BiasedLockingBulkRebiasThreshold

用法:

参数: BiasedLockingBulkRevokeThreshold

用法:

参数: BiasedLockingDecayTime

用法:

参数: BiasedLockingStartupDelay

用法:

参数: BindCMSThreadToCPU

用法:

参数: BindGCTaskThreadsToCPUs

用法:

参数: BlockLayoutByFrequency

用法:

参数: BlockLayoutMinDiamondPercentage

用法:

参数: BlockLayoutRotateLoops

用法:

参数: BlockOffsetArrayUseUnallocatedBlock

用法:

参数: BranchOnRegister

用法:

参数: BytecodeVerificationLocal

用法:

参数: BytecodeVerificationRemote

用法:

参数: C1OptimizeVirtualCallProfiling

用法:

参数: C1PatchInvokeDynamic

用法:

参数: C1ProfileBranches

用法:

参数: C1ProfileCalls

用法:

参数: C1ProfileCheckcasts

用法:

参数: C1ProfileInlinedCalls

用法:

参数: C1ProfileVirtualCalls

用法:

参数: C1UpdateMethodData

用法:

参数: CICompilerCount

用法:

参数: CICompilerCountPerCPU

用法:

参数: CITime

用法:

参数: CMSAbortSemantics

用法:

参数: CMSAbortablePrecleanMinWorkPerIteration

用法:

参数: CMSAbortablePrecleanWaitMillis

用法:

参数: CMSBitMapYieldQuantum

用法:

参数: CMSBootstrapOccupancy

用法:

参数: CMSClassUnloadingEnabled

用法:

参数: CMSClassUnloadingMaxInterval

用法:

参数: CMSCleanOnEnter

用法:

参数: CMSCompactWhenClearAllSoftRefs

用法:

参数: CMSConcMarkMultiple

用法:

参数: CMSConcurrentMTEnabled

用法:

参数: CMSCoordinatorYieldSleepCount

用法:

参数: CMSDumpAtPromotionFailure

用法:

参数: CMSEdenChunksRecordAlways

用法:

参数: CMSExpAvgFactor

用法:

参数: CMSExtrapolateSweep

用法:

参数: CMSFullGCsBeforeCompaction

用法: -XX:CMSFullGCsBeforeCompaction=0

参数: CMSIncrementalDutyCycle

用法:

参数: CMSIncrementalDutyCycleMin

用法:

参数: CMSIncrementalMode

用法:

参数: CMSIncrementalOffset

用法:

参数: CMSIncrementalPacing

用法:

参数: CMSIncrementalSafetyFactor

用法:

参数: CMSIndexedFreeListReplenish

用法:

参数: CMSInitiatingOccupancyFraction

用法: -XX:CMSInitiatingOccupancyFraction=75

参数: CMSInitiatingPermOccupancyFraction

用法:

参数: CMSIsTooFullPercentage

用法:

参数: CMSLargeCoalSurplusPercent

用法:

参数: CMSLargeSplitSurplusPercent

用法:

参数: CMSLoopWarn

用法:

参数: CMSMaxAbortablePrecleanLoops

用法: -XX:CMSMaxAbortablePrecleanLoops=0

参数: CMSMaxAbortablePrecleanTime

用法: -XX:CMSMaxAbortablePrecleanTime=5000

参数: CMSOldPLABMax

用法:

参数: CMSOldPLABMin

用法:

参数: CMSOldPLABNumRefills

用法:

参数: CMSOldPLABReactivityFactor

用法:

参数: CMSOldPLABResizeQuicker

用法:

参数: CMSOldPLABToleranceFactor

用法:

参数: CMSPLABRecordAlways

用法:

参数: CMSParPromoteBlocksToClaim

用法:

参数: CMSParallelInitialMarkEnabled

用法: -XX:+CMSParallelInitialMarkEnabled

参数: CMSParallelRemarkEnabled

用法: -XX:+CMSParallelRemarkEnabled

参数: CMSParallelSurvivorRemarkEnabled

用法:

参数: CMSPermGenPrecleaningEnabled

用法:

参数: CMSPrecleanDenominator

用法:

参数: CMSPrecleanIter

用法:

参数: CMSPrecleanNumerator

用法:

参数: CMSPrecleanRefLists1

用法:

参数: CMSPrecleanRefLists2

用法:

参数: CMSPrecleanSurvivors1

用法:

参数: CMSPrecleanSurvivors2

用法:

参数: CMSPrecleanThreshold

用法:

参数: CMSPrecleaningEnabled

用法:

参数: CMSPrintChunksInDump

用法:

参数: CMSPrintEdenSurvivorChunks

用法:

参数: CMSPrintObjectsInDump

用法:

参数: CMSRemarkVerifyVariant

用法:

参数: CMSReplenishIntermediate

用法:

参数: CMSRescanMultiple

用法:

参数: CMSRevisitStackSize

用法:

参数: CMSSamplingGrain

用法:

参数: CMSScavengeBeforeRemark

用法: -XX:+CMSScavengeBeforeRemark

参数: CMSScheduleRemarkEdenPenetration

用法: -XX:CMSScheduleRemarkEdenPenetration=50

参数: CMSScheduleRemarkEdenSizeThreshold

用法: -XX:CMSScheduleRemarkEdenSizeThreshold=2097152

参数: CMSScheduleRemarkSamplingRatio

用法:

参数: CMSSmallCoalSurplusPercent

用法:

参数: CMSSmallSplitSurplusPercent

用法:

参数: CMSSplitIndexedFreeListBlocks

用法:

参数: CMSTriggerPermRatio

用法:

参数: CMSTriggerInterval

用法:

参数: CMSTriggerRatio

用法:

参数: CMSWaitDuration

用法: -XX:CMSWaitDuration=2000

参数: CMSWorkQueueDrainThreshold

用法:

参数: CMSYield

用法:

参数: CMSYieldSleepCount

用法:

参数: CMSYoungGenPerWorker

用法:

参数: CMS_FLSPadding

用法:

参数: CMS_FLSWeight

用法:

参数: CMS_SweepPadding

用法:

参数: CMS_SweepTimerThresholdMillis

用法:

参数: CMS_SweepWeight

用法:

参数: CPUForCMSThread

用法:

参数: CheckEndorsedAndExtDirs

用法:

参数: CheckJNICalls

用法:

参数: ClassUnloading

用法:

参数: ClassUnloadingWithConcurrentMark

用法:

参数: ClearFPUAtPark

用法:

参数: ClipInlining

用法:

参数: CodeCacheExpansionSize

用法:

参数: CodeCacheFlushingMinimumFreeSpace

用法:

参数: CodeCacheMinimumFreeSpace

用法:

参数: CollectGen0First

用法:

参数: CompactFields

用法:

参数: CompilationPolicyChoice

用法:

参数: CompilationRepeat

用法:

参数: CompileCommand

用法:

参数: CompileCommandFile

用法:

参数: CompileOnly

用法:

参数: CompileThreshold

用法:

参数: CompilerThreadHintNoPreempt

用法:

参数: CompilerThreadPriority

用法:

参数: CompilerThreadStackSize

用法:

参数: CompressedClassSpaceSize

用法:

参数: ConcGCThreads

用法: -XX:ConcGCThreads=4

参数: ConditionalMoveLimit

用法:

参数: ContendedPaddingWidth

用法:

参数: ConvertSleepToYield

用法:

参数: ConvertYieldToSleep

用法:

参数: CrashOnOutOfMemoryError

用法:

参数: CreateMinidumpOnCrash

用法:

参数: CriticalJNINatives

用法:

参数: DTraceAllocProbes

用法:

参数: DTraceMethodProbes

用法:

参数: DTraceMonitorProbes

用法:

参数: DebugInlinedCalls

用法:

参数: DebugNonSafepoints

用法:

参数: Debugging

用法:

参数: DefaultMaxRAMFraction

用法:

参数: DefaultThreadPriority

用法:

参数: DeferInitialCardMark

用法:

参数: DeferPollingPageLoopCount

用法:

参数: DeferThrSuspendLoopCount

用法:

参数: DeoptimizeRandom

用法:

参数: DisableAttachMechanism

用法:

参数: DisableExplicitGC

用法: -XX:+DisableExplicitGC

参数: DisableIntrinsic

用法:

参数: DisplayVMOutput

用法:

参数: DisplayVMOutputToStderr

用法:

参数: DisplayVMOutputToStdout

用法:

参数: DoEscapeAnalysis

用法: -XX:+DoEscapeAnalysis

参数: DominatorSearchLimit

用法:

参数: DontCompileHugeMethods

用法:

参数: DontYieldALot

用法:

参数: DumpLoadedClassList

用法:

参数: DumpReplayDataOnError

用法:

参数: DumpSharedSpaces

用法:

参数: EagerXrunInit

用法:

参数: EliminateAllocationArraySizeLimit

用法:

参数: EliminateAllocations

用法:

参数: EliminateAutoBox

用法:

参数: EliminateLocks

用法:

参数: EliminateNestedLocks

用法:

参数: EmitSync

用法:

参数: EnableContended

用法:

参数: EnableInvokeDynamic

用法:

参数: EnableResourceManagementTLABCache

用法:

参数: EnableSharedLookupCache

用法:

参数: EnableTracing

用法:

参数: ErgoHeapSizeLimit

用法:

参数: ErrorFile

用法:

参数: ErrorReportServer

用法:

参数: EscapeAnalysisTimeout

用法:

参数: EstimateArgEscape

用法:

参数: ExitOnOutOfMemoryError

用法:

参数: ExplicitGCInvokesConcurrent

用法: -XX:+ExplicitGCInvokesConcurrent

参数: ExplicitGCInvokesConcurrentAndUnloadsClasses

用法:

参数: ExtendedDTraceProbes

用法:

参数: ExtraSharedClassListFile

用法:

参数: FLSAlwaysCoalesceLarge

用法:

参数: FLSCoalescePolicy

用法:

参数: FLSLargestBlockCoalesceProximity

用法:

参数: FLSVerifyAllHeapReferences

用法:

参数: FLSVerifyIndexTable

用法:

参数: FLSVerifyLists

用法:

参数: FailOverToOldVerifier

用法:

参数: FastTLABRefill

用法:

参数: FenceInstruction

用法:

参数: FieldsAllocationStyle

用法:

参数: FilterSpuriousWakeups

用法:

参数: FlightRecorderOptions

用法:

参数: FoldStableValues

用法:

参数: ForceDynamicNumberOfGCThreads

用法:

参数: ForceNUMA

用法:

参数: ForceTimeHighResolution

用法:

参数: ForceUnreachable

用法:

参数: FreqInlineSize

用法:

参数: G1ConcMarkStepDurationMillis

用法:

参数: G1ConcRSHotCardLimit

用法:

参数: G1ConcRSLogCacheSize

用法:

参数: G1ConcRefinementGreenZone

用法:

参数: G1ConcRefinementRedZone

用法:

参数: G1ConcRefinementServiceIntervalMillis

用法:

参数: G1ConcRefinementThreads

用法:

参数: G1ConcRefinementThresholdStep

用法:

参数: G1ConcRefinementYellowZone

用法:

参数: G1ConfidencePercent

用法:

参数: G1HeapRegionSize

用法: -XX:G1HeapRegionSize=4m

参数: G1HeapWastePercent

用法:

参数: G1MixedGCCountTarget

用法:

参数: G1PrintHeapRegions

用法:

参数: G1PrintRegionLivenessInfo

用法:

参数: G1RSetRegionEntries

用法:

参数: G1RSetScanBlockSize

用法:

参数: G1RSetSparseRegionEntries

用法:

参数: G1RSetUpdatingPauseTimePercent

用法:

参数: G1RefProcDrainInterval

用法:

参数: G1ReservePercent

用法:

参数: G1SATBBufferEnqueueingThresholdPercent

用法:

参数: G1SATBBufferSize

用法:

参数: G1SummarizeConcMark

用法:

参数: G1SummarizeRSetStats

用法:

参数: G1SummarizeRSetStatsPeriod

用法:

参数: G1TraceConcRefinement

用法:

参数: G1UpdateBufferSize

用法:

参数: G1UseAdaptiveConcRefinement

用法:

参数: G1VerifyHeapRegionCodeRoots

用法:

参数: G1VerifyRSetsDuringFullGC

用法:

参数: GCDrainStackTargetSize

用法:

参数: GCHeapFreeLimit

用法:

参数: GCLockerEdenExpansionPercent

用法:

参数: GCLockerInvokesConcurrent

用法:

参数: GCLockerRetryAllocationCount

用法:

参数: GCLogFileSize

用法: -XX:GCLogFileSize=256m

参数: GCParallelVerificationEnabled

用法:

参数: GCPauseIntervalMillis

用法:

参数: GCTaskTimeStampEntries

用法:

参数: GCTimeLimit

用法:

参数: GCTimeRatio

用法:

参数: GuaranteedSafepointInterval

用法:

参数: HeapBaseMinAddress

用法:

参数: HeapDumpAfterFullGC

用法: -XX:+HeapDumpAfterFullGC

参数: HeapDumpBeforeFullGC

用法: -XX:+HeapDumpBeforeFullGC

参数: HeapDumpOnOutOfMemoryError

用法: -XX:+HeapDumpOnOutOfMemoryError

参数: HeapDumpPath

用法: -XX:HeapDumpPath=${目录}

参数: HeapFirstMaximumCompactionCount

用法:

参数: HeapMaximumCompactionInterval

用法:

参数: HeapSizePerGCThread

用法:

参数: IgnoreEmptyClassPaths

用法: -XX:IgnoreEmptyClassPaths

参数: IgnoreUnrecognizedVMOptions

用法:

参数: IgnoreUnverifiableClassesDuringDump

用法:

参数: IncreaseFirstTierCompileThresholdAt

用法:

参数: IncrementalInline

用法:

参数: InitialBootClassLoaderMetaspaceSize

用法:

参数: InitialCodeCacheSize

用法:

参数: InitialHeapSize

用法:

参数: InitialRAMFraction

用法:

参数: InitialSurvivorRatio

用法:

参数: InitialTenuringThreshold

用法:

参数: InitiatingHeapOccupancyPercent

用法:

参数: Inline

用法:

参数: InlineDataFile

用法:

参数: InlineSmallCode

用法:

参数: InlineSynchronizedMethods

用法:

参数: InsertMemBarAfterArraycopy

用法:

参数: InteriorEntryAlignment

用法:

参数: InterpreterProfilePercentage

用法:

参数: JNIDetachReleasesMonitors

用法:

参数: JavaMonitorsInStackTrace

用法:

参数: JavaPriority10_To_OSPriority

用法:

参数: JavaPriority1_To_OSPriority

用法:

参数: JavaPriority2_To_OSPriority

用法:

参数: JavaPriority3_To_OSPriority

用法:

参数: JavaPriority4_To_OSPriority

用法:

参数: JavaPriority5_To_OSPriority

用法:

参数: JavaPriority6_To_OSPriority

用法:

参数: JavaPriority7_To_OSPriority

用法:

参数: JavaPriority8_To_OSPriority

用法:

参数: JavaPriority9_To_OSPriority

用法:

参数: LIRFillDelaySlots

用法:

参数: LargePageHeapSizeThreshold

用法:

参数: LargePageSizeInBytes

用法:

参数: LazyBootClassLoader

用法:

参数: LiveNodeCountInliningCutoff

用法:

参数: LoadExecStackDllInVMThread

用法:

参数: LogCommercialFeatures

用法:

参数: LogCompilation

用法:

参数: LogEvents

用法:

参数: LogEventsBufferEntries

用法:

参数: LogFile

用法:

参数: LogVMOutput

用法:

参数: LoopLimitCheck

用法:

参数: LoopMaxUnroll

用法:

参数: LoopOptsCount

用法:

参数: LoopUnrollLimit

用法:

参数: LoopUnrollMin

用法:

参数: LoopUnswitching

用法:

参数: MallocMaxTestWords

用法:

参数: MallocVerifyInterval

用法:

参数: MallocVerifyStart

用法:

参数: ManagementServer

用法:

参数: MarkStackSize

用法:

参数: MarkStackSizeMax

用法:

参数: MarkSweepAlwaysCompactCount

用法:

参数: MarkSweepDeadRatio

用法:

参数: MaxBCEAEstimateLevel

用法:

参数: MaxBCEAEstimateSize

用法:

参数: MaxDirectMemorySize

用法: -XX:MaxDirectMemorySize=1024m

参数: MaxFDLimit

用法:

参数: MaxGCMinorPauseMillis

用法:

参数: MaxGCPauseMillis

用法: -XX:MaxGCPauseMillis=200

参数: MaxHeapFreeRatio

用法:

参数: MaxHeapSize

用法:

参数: MaxInlineLevel

用法:

参数: MaxInlineSize

用法: -XX:MaxInlineSize=35

参数: MaxJNILocalCapacity

用法:

参数: MaxJavaStackTraceDepth

用法: -XX:MaxJavaStackTraceDepth=1024

参数: MaxJumpTableSize

用法:

参数: MaxJumpTableSparseness

用法:

参数: MaxLabelRootDepth

用法:

参数: MaxLoopPad

用法:

参数: MaxMetaspaceExpansion

用法:

参数: MaxMetaspaceFreeRatio

用法:

参数: MaxMetaspaceSize

用法:

参数: MaxNewSize

用法:

参数: MaxNodeLimit

用法:

参数: MaxPermHeapExpansion

用法:

参数: MaxPermSize

用法: -XX:MaxPermSize=128m

参数: MaxRAM

用法:

参数: MaxRAMFraction

用法:

参数: MaxRecursiveInlineLevel

用法:

参数: MaxTenuringThreshold

用法:

参数: MaxTrivialSize

用法:

参数: MaxVectorSize

用法:

参数: MetaspaceSize

用法: -XX:MetaspaceSize=128m

参数: MethodFlushing

用法:

参数: MinCodeCacheFlushingInterval

用法:

参数: MinHeapDeltaBytes

用法:

参数: MinHeapFreeRatio

用法:

参数: MinInliningThreshold

用法:

参数: MinJumpTableSize

用法:

参数: MinPermHeapExpansion

用法:

参数: MinMetaspaceExpansion

用法:

参数: MinMetaspaceFreeRatio

用法:

参数: MinRAMFraction

用法:

参数: MinSurvivorRatio

用法:

参数: MinTLABSize

用法:

参数: MonitorBound

用法:

参数: MonitorInUseLists

用法:

参数: MultiArrayExpandLimit

用法:

参数: MustCallLoadClassInternal

用法:

参数: NUMAChunkResizeWeight

用法:

参数: NUMAInterleaveGranularity

用法:

参数: NUMAPageScanRate

用法:

参数: NUMASpaceResizeRate

用法:

参数: NUMAStats

用法:

参数: NativeMemoryTracking

用法:

参数: NeedsDeoptSuspend

用法:

参数: NeverActAsServerClassMachine

用法:

参数: NeverTenure

用法:

参数: NewRatio

用法: -XX:NewRatio=2

参数: NewSize

用法:

参数: NewSizeThreadIncrease

用法:

参数: NmethodSweepActivity

用法:

参数: NmethodSweepCheckInterval

用法:

参数: NmethodSweepFraction

用法:

参数: NodeLimitFudgeFactor

用法:

参数: NumberOfGCLogFiles

用法: -XX:NumberOfGCLogFiles=16

参数: NumberOfLoopInstrToAlign

用法:

参数: ObjectAlignmentInBytes

用法:

参数: OldPLABSize

用法:

参数: OldPLABWeight

用法:

参数: OldSize

用法:

参数: OmitStackTraceInFastThrow

用法: -XX:-OmitStackTraceInFastThrow

参数: OnError

用法: -XX:OnError="pmap %p",或者-XX:OnError="gcore %pdbx - %p"

参数: OnOutOfMemoryError

用法:

参数: OnStackReplacePercentage

用法:

参数: OptimizeExpensiveOps

用法:

参数: Optim

围绕垃圾收集和内存,您可以将600多个参数传递给 JVM 。如果包括其他方面,则JVM参数总数将很容易超过1000+。任何人都无法消化和理解太多的论据。在本文中,重点介绍了七个重要的 JVM 参数,在 Java性能测试 中起着非常重要的作用。

-Xmx 可能是最重要的 JVM 参数。 -Xmx 定义要分配给应用程序的最大堆大小。。您可以这样定义应用程序的堆大小: -Xmx2g 。

堆大小在影响应用性能和所需物理硬件需求。这带来了一个问题,我的应用程序正确的堆大小是多少?我应该为应用程序分配大堆大小还是小堆大小?答案是:取决于需求和预算。

将 -Xms 和 -Xmx 设置为相同值的会提高JVM性能

元空间是将存储 JVM 的元数据定义(例如类定义,方法定义)的区域。默认情况下,可用于存储此元数据信息的内存量是无限的(即受您的容器或计算机的RAM大小的限制)。您需要使用 -XX:MaxMetaspaceSize 参数来指定可用于存储元数据信息的内存量的上限。

-XX:MaxMetaspaceSize=256m

OpenJDK中有7种不同的GC算法:

如果您未明确指定GC算法,那么JVM将选择默认算法。在Java 8之前, Parallel GC 是默认的GC算法。从Java 9开始, G1 GC 是默认的GC算法。

GC算法的选择对于确定应用程序的性能起着至关重要的作用。根据我们的研究,我们正在使用Z GC算法观察到出色的性能结果。如果使用 JVM 11+ ,则可以考虑使用 Z GC 算法(即 -XX:+ UseZGC )。

下表总结了激活每种垃圾收集算法所需传递的JVM参数。

垃圾收集日志包含有关垃圾收集事件,回收的内存,暂停时间段等信息,可以通过传递以下JVM参数来启用垃圾收集日志:

从JDK 1到JDK 8:

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:{file-path}

从JDK 9及更高版本开始:

-Xlog:gc*:file={file-path}

Demo:

通常,GC日志用于调整垃圾回收性能。但是,GC日志包含重要的微观指标。这些指标可用于预测应用程序的可用性和性能特征。在本文中将重点介绍一种这样的标尺:GC吞吐量。GC吞吐量是您的应用程序在处理客户交易中花费的时间与它在处理GC活动中花费的时间之比。假设您的应用程序的GC吞吐量为98%,则意味着应用程序将其98%的时间用于处理客户活动,其余2%用于GC活动。

现在,让我们看一个健康的JVM的堆使用情况图:

您会看到一个完美的锯齿图案。您会注意到,当运行Full GC(红色三角形)时,内存利用率将一直下降到最低。

现在,让我们看一下有问题的JVM的堆使用情况图:

您可以注意到,在图表的右端,即使GC反复运行,内存利用率也没有下降。这是一个典型的内存泄漏迹象,表明该应用程序正在存在某种内存问题。

如果您仔细观察一下该图,您会发现重复的完整GC开始在上午8点左右开始。但是,该应用程序仅在上午8:45左右开始获取OutOfMemoryError。到上午8点,该应用程序的GC吞吐量约为99%。但是,在上午8点之后,GC吞吐量开始下降到60%。因为当重复的GC运行时,该应用程序将不会处理任何客户交易,而只会进行GC活动。

OutOfMemoryError 是一个严重的问题,它将影响您的应用程序的可用性和性能。要诊断 OutOfMemoryError 或任何与内存相关的问题,必须在应用程序开始遇到 OutOfMemoryError 的那一刻或一瞬间捕获堆转储。由于我们不知道何时会抛出 OutOfMemoryError ,因此很难在抛出时左右的正确时间手动捕获堆转储。但是,可以通过传递以下JVM参数来自动化捕获堆转储:

-XX:+ HeapDumpOnOutOfMemoryError和-XX:HeapDumpPath = {HEAP-DUMP-FILE-PATH}

在 -XX:HeapDumpPath 中,需要指定堆转储所在的文件路径。传递这两个JVM参数时,将在抛出 OutOfMemoryError 时自动捕获堆转储并将其写入定义的文件路径。例:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/crashes/my-heap-dump.hprof

一旦捕获了堆转储,就可以使用 HeapHero 和 EclipseMAT 之类的工具来分析堆转储。

每个应用程序将具有数十,数百,数千个线程。每个线程都有自己的堆栈。在每个线程的堆栈中,存储以下信息:

他们每个都消耗内存。如果它们的使用量超出某个限制,则会引发 StackOverflowError 。可以通过传递-Xss参数来增加线程的堆栈大小限制。例:

-Xss256k

如果将此 -Xss 值设置为一个很大的数字,则内存将被阻塞并浪费。假设您将 -Xss 值指定为 2mb ,而只需要 256kb ,那么您将浪费大量的内存。

假设您的应用程序有500个进程,然后 -Xss 值为 2Mb ,则您的线程将消耗 1000Mb 的内存。另一方面,如果您仅将 -Xss 分配为 256kb ,那么您的线程将仅消耗 125Mb 的内存。每个JVM将节省 875Mb 内存。

注意:线程是在堆(即 -Xmx )之外创建的,因此这 1000Mb 将是您已经分配的-Xmx值的补充。

现代应用程序使用多种协议(即SOAP,REST,HTTP,HTTPS,JDBC,RMI)与远程应用程序连接。有时远程应用程序可能需要很长时间才能做出响应,有时它可能根本不响应。

如果没有正确的超时设置,并且远程应用程序的响应速度不够快,则您的应用程序线程/资源将被卡住。远程应用程序无响应可能会影响您的应用程序的可用性。它可以使您的应用程序停止磨削。为了保护应用程序的高可用性,应配置适当的超时设置。

您可以在JVM级别传递这两个强大的超时网络属性,这些属性可以全局适用于所有使用 java.net.URLConnection 的协议处理程序:

sun.net.client.defaultConnectTimeout :指定建立到主机的连接的超时(以毫秒为单位)。例如,对于HTTP连接,它是与HTTP服务器建立连接时的超时。当建立与资源的连接时, sun.net.client.defaultReadTimeout 指定从输入流读取时的超时(以毫秒为单位)。

例如,如果您要将这些属性设置为2秒:

注意,默认情况下,这两个属性的值为-1,这表示未设置超时。