先回顾一下 JVM 的结构
堆内部的分代
JVM 参数既多且杂,如何提纲挈领,避免挂一漏万呢?个人的想法是掌握原理,了解常用的参数就好了,以度量来驱动适用于你的应用程序的参数设置。
目的: 尽量减少停顿时间,释放出更多可用内存
Java 命令行选项一般分为三类
以 Cassandra 为例,它是的一个高性能的分布式NOSQL 数据存储系统,它设置了如下 JVM 参数:
一般来说,比较常用的方法是通过 JMX 和 GC log 来度量你的 JVM 参数设置是是否合理,一旦发现异常或者 OOM 要马上采取措施进行调整
关于 JVM 内存溢出的分析可以参考以前写的 内存溢出不可怕,手足无措才尴尬
有时候我们需要设定maven环境下的JVM参数,以便通过maven执行的命令或启动的系统能得到它们需要的参数设定。比如:当我们使用jetty:run启动jetty服务器时,在进行热部署时会经常发生:java.lang.OutOfMemoryError: PermGen space问题,这时我们需要增大JVM参数MaxPermSize的值。再者,当我们需要进行远程调试时,也需要设置监听端口。maven配置jvm参数的地方是%M2_HOME%/bin/mvn.bat文件,这是启动Maven的脚本文件,在该文件中你能看到有一行注释为:\x0d\x0a@REM set MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\x0d\x0a.通过添加set MAVEN_OPTS可以为maven设定jvm参数了。比如:\x0d\x0a1.建立远程调试,端口为:4000的设定为:\x0d\x0aset MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000\x0d\x0a注意:suspend最好设定为n.设定上述参数后,在eclipse中新建远程调试,设置端口为4000,这样通过jetty:run启动系统时就可以进行远程调试了。\x0d\x0a2.解决自动热部署时java.lang.OutOfMemoryError: PermGen space问题解决这一问题只需要增大PermGen区,默认为 64m,设置方法为:set MAVEN_OPTS=-XX:MaxPermSize=128M服务器是8核16G要先设置成10G,即物理内存的一半再多加一些(建议跟最大堆大小设置成相同值,这样可以减少刚部署阶段的fullgc次数),然后运行一段时间再看容器的监控,看容器还剩多少内存。如果还剩很多,再调大一些,例如设置成12G,直到充分利用容器物理内存为止。设计JVM步骤如下:1、打开win10系统的环境变量。
2、在系统变量中,新建变量JVM_OPTS,值设置为-Xms1024M-Xmx2048M-XX:PermSize=256M-XX:MaxNewSize=256M-XX:MaxPermSize=512M(具体根据实际情况进行配置)。
3、保存设置后,每次启动服务器都会按这个配置初始化JVM虚拟机内存。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)