jvm内存参数配置如下,jvm内存配置参数 最小内存值,JVM内存参数配置详解

jvm内存参数配置如下,jvm内存配置参数 最小内存值,JVM内存参数配置详解

主要介绍JVM内存参数配置的详细说明,通过实例代码详细介绍,具有一定的参考价值。感兴趣的朋友可以参考一下。

首先我们知道:JVM中内存错误的类型。

1、堆内存泄漏:OutOfMemory:Java heap space

这种增加内存的内存泄露,只能暂时解决问题,不能根治。如果要优化代码,那一定是代码问题:如果检查堆中的大量对象,会发现这些对象都被引用了,对象不能及时回收,导致超过了堆的设定最大内存。

2、老年代内存泄漏:OutOfMemoryError:PermGen space

类名、访问修饰符、字段描述、方法描述等。当占用空间大于永久生成的最大值时会出现。一般在内存初始化的时候,空间太小,解决的办法就是扩展空间。

3、栈内存泄漏:StackOverflowError

当执行代码时,代码被推入堆栈。这时,如果堆栈的内存不足以容纳要推入堆栈的代码的大小,就会长时间报错。通过设置堆栈的空间大小。一般:-Xss设置线程的大小来求解。示例:-Xss256m

下面是检查jvm内存的方法:

1、监控JVM的GC情况:

Jstat -gcutil pid 2000 20(只需要看o,如果达到100%并且长时间停留在100%,说明晚年内存不足)

Pid:服务进程的pid。可以通过ps -ef | grep java查看java的服务进程pid。

2000:多少秒被监控。这是两秒钟。

20:总共20次。

伊甸区

奥:老年

永久世代

YGC:新生代的GC时代

YGCT:当前计数的YGCT的总时间(毫秒)。

FGC GC时代:老年全GC

FGCT:FGC在当前统计中花费的总时间(毫秒)

GCT:YGCFGC

2、查看jvm配置信息

Jmap -head pid //可以看到java进程堆的配置信息,各个区域的空间大小和配置信息。

3、查看jvm中类和对象的占用情况

Jmap -histo 5279 | head -20 //查看jvm中每个类的实例数、占用内存量和全名。

4、上面使我们的基本命令使用,那么我们怎么预测或者说内存泄漏会有什么征兆?

1.tps波动大,下降慢,甚至到0,响应时间波动小,上升慢。

2.根据jstat命令,Jvm中的旧区在增加,FullGC非常频繁,对应的FullGC消耗的时间也在增加。

3.从jconsole/JVM可以看出,堆内存曲线不断上升,接近上限时变成一条直线。

4.日志错误java.lang .内存不足错误:java堆空间

5、内存泄露怎么定位?

(1)确定症状:现象方面,Java进程抛出OOM异常,分析属于哪种异常,是正常的内存资源耗尽还是内存泄漏。

(2)监控jvm的GC状态:jstat -gcutil pid 1000 100(只需要看O,如果达到100%并且长时间停留在100%,说明陈年内存不足)。如果FGC很多,就要检查是否有内存泄漏。

(3)通过jmap命令检查当前堆内存中实例的数量以及占用内存最多的前20个对象:jmap -histo pid | head -20。

(4)通过jvm分析定位:转储远程堆,然后下载转储文件,用JVM打开进行分析,可以看到JVM中对象更直观的信息。

6、下面是进行最后的JVM参数调优:

虚拟机的通用参数

-

堆内存=年轻一代和老一代。

年轻一代=伊甸园幸存者

幸存者=从空间到空间

-

年轻一代=从空间到空间的伊甸园

堆内存=从空间到空间老年的伊甸园

====================================

-Xms2048m:初始堆大小,建议1/4物理内存,默认值为1/64物理内存。

-Xmx2048m:最大堆大小,建议与-Xms保持一致。默认值是物理内存的1/4。

-Xmn512m:新生代大小,建议不要超过堆内存的1/2-xs 256k,线程栈大小,建议256k。

-XX:PermSize=256m:永久初始值,默认值为物理内存的1/64。

-XX:MaxPermSize=256m:永久生成的最大值,默认值为物理内存的1/4。

-XX:SurvivorRatio=8:幼带中伊甸园面积与幸存者面积之比,默认为8:1,即伊甸园(8),FromSpace(1),ToSpace(1)。

-XX:MaxTenuringThreshold=15:提升到旧年龄的对象的年龄。每个对象在MinorGC中保存一次后,对象年龄为1,默认值为15。年龄超过15岁就进入老年。该参数在串行GC-中有效

xx:pretenurezethreshold=3145728:单位字节,仅对串行和ParNew收集器有效,新一代采用并行清除GC时无效,大于该值的对象在老一代直接分配。

7、参数设置在哪里?

一般来说,一个服务器可能有多个java服务,对吧?但是很多服务器都会出现这种情况,那么问题来了。如果我修改jvm配置文件中的jvm参数,不是所有的服务都有这个参数吗?那么还有别的办法吗?

是啊!也就是启动java进程中的命令设置。

nohup JAVA $ { JAVA _ OPT }-jar XXX . jar 21

JAVA_OPT的参数:里面的参数取决于设置什么以及具体的参数值。

JAVA _ OPT='-server-xms 256m-xmx 256m-xmn 512m-XX:MetaspaceSize=64m-XX:MaxMatespaceSize=256m '

关于JVM内存参数配置的这篇文章到此为止。有关JVM内存参数配置的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: