1、首先修改远程服务器上java设置。
2、找到jdk下的/jre/lib/security/java.policy文件,打开此文件,在文件末尾的括号前添加permissionjava.security.AllPermission。后保存。
3、在jdk/bin目录下运行命令窗口输入:jstatd-J-Djava.security.policy=jstatd.all.policy-J-Djava.rmi.server.hostname=192.168.2.85-p2030,接着运行即可。
4、本地启动VisualVM,在配置JMX时已经添加过服务器节点,如果配置正确,通常gc会自动检测到jstatd连接并添加节点。
java启动参数共分为三类;
其一是 标准参数 (-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是 非标准参数 (-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是 非Stable参数 (-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
1.设置环境变量JAVA_OPTS
2.Windows下,在/bin/catalina.bat,Unix下,在/bin/catalina.sh的前面,增加 JAVA_OPTS=’-Xms256m -Xmx512m’
Tomcat 的启动参数位于安装目录 ${TOMCAT_HOME}/bin目录下, Linux *** 作系统就是 catalina.sh 文件。JAVA_OPTS,就是用来设置 JVM 相关运行参数的变量,还可以在 CATALINA_OPTS 变量中设置。关于这 2 个变量,还是多少有些区别的:
JAVA_OPTS:用于当 Java 运行时选项“start”、“stop”或“run”命令执行。
CATALINA_OPTS:用于当 Java 运行时选项“start”或“run”命令执行。
为什么有两个不同的变量?它们之间都有什么区别呢?
首先,在启动 Tomcat 时,任何指定变量的传递方式都是相同的,可以传递到执行“start”或“run”命令中,但只有设定在 JAVA_OPTS 变量里的参数被传递到“stop”命令中。对于 Tomcat 运行过程,可能没什么区别,影响的是结束程序,而不是启动程序。
第二个区别是更微妙,其他应用程序也可以使用 JAVA_OPTS 变量,但只有在 Tomcat 中使用 CATALINA_OPTS 变量。如果你设置环境变量为只使用 Tomcat,最好你会建议使用 CATALINA_OPTS 变量,而如果你设置环境变量使用其它的 Java 应用程序,例如 JBoss,你应该把你的设置放在JAVA_OPTS 变量中。
我在本地配置的:
其他暂时没用到的:
Xms与Xmx配置相同的值,为了能够在GC后不需要重新分隔计算堆区的大小而浪费资源。
JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
jvm的GC日志分析
JVM常用参数配置
深入了解JVM
JVM参数与实际环境中的优化配置实践
JVM启动参数大全
Java服务GC参数调优案例
关键业务系统的JVM参数推荐(2018仲夏版)
成为Java GC专家(5)—Java性能调优原则
据我观察JAVA程序,一般在命令行模式下运行JAVA任务,JDK可以承受的内存上限大概是机器物理内存的1/4。比如我的服务器是16G的内存,那么JAVA程序可以占用的最大内存是4G左右,超出就报溢出。
所以在一般程序运行中,JAVA内存逐渐从
100MB 200MB, 300...1G...2G...... 膨胀到4G,在这个过程中,我的循环都设置了System.gc(),偶尔有占用内存减少的时候,但是基本下降都很有限,然后过一会儿又继续上升。直到上升到4G的时候,如果此时系统没有明确的数据持续写进内存,只是大量进行新建变量,赋值,然后生命周期结束待回收的过程,系统会大量进行GC的 *** 作,保证JAVA内存不超过4G,但我似乎感觉一旦在内存在4G上下游动的时候,JAVA程序的性能就开始走低。
所以我的理解是,GC直到不得不执行的时候才会被执行,而且效果并不好。。。。
PS,如果是8G内存的服务器,GC频繁执行是在JAVA占用内存到达2G的时候。
同不知道如何进行高效的内存回收。本来没有任何写入内存 *** 作的程序,但是程序处理问题一大了,占有内存就很多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)