大话系统架构优化项目之JVM优化

针对JVM的参数调整是需要谨慎处理的。常见的JVM参数:

heap参数设置

-server –Xmx1G –Xms1G -Xmn512M-XX:PermSize=512M -XX:MaxPermSize=512M -XX:+UseCompressedOops

-server:选择”server” VM,一定要作为第一个参数,与之相对的参数是-client,”client” VM,增加-server参数会影响jvm的其他参数默认值。HotSpot包括一个解释器和两个编译器(client 和 server,二选一的),解释与编译混合执行模式,默认启动解释执行。server启动慢,占用内存多,执行效率高,适用于服务器端应用,JDK1.6以后在具有64位能力的jdk环境下将默认启用该模式; client启动快,占用内存小,执行效率没有server快,默认情况下不进行动态编译,通常用于客户端应用程序或者PC应用开发和调试。

PS:据报道Hotspot的某些版本Servermode被报告有稳定性问题,因此jvm采用server mode还是client mode 需要通过长时间系统监测来评测。

垃圾回收参数设置

-XX:+DisableExplicitGC-XX:+UseParNewGC-XX:+UseConcMarkSweepGC-XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection-XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled

-XX:+DisableExplicitGC禁止System.gc(),免得程序员误调用gc方法影响性能;

PS:根据历史经验一般垃圾回收时间占比小于2%则认为对性能影响不大。

日志类参数

-XX:+PrintClassHistogram -XX:+PrintGCDetails-XX:+PrintGCTimeStamps-Xloggc:log/gc.log

-XX:+ShowMessageBoxOnError-XX:+HeapDumpOnOutOfMemoryError-XX:+HeapDumpOnCtrlBreak

调试的时候设置一些日志参数,如-XX:+PrintClassHistogram -XX:+PrintGCDetails-XX:+PrintGCTimeStamps -Xloggc:log/gc.log,这样可以从gc.log里查看gc频繁程度,根据此来评估对性能的影响。

调试的时候设置异常宕机时产生heap dump文件,-XX:+ShowMessageBoxOnError-XX:+HeapDumpOnOutOfMemoryError -XX:+HeapDumpOnCtrlBreak,这样可以查看宕机时系统执行哪些操作。

性能监控类参数设置

-Djava.rmi.server.hostname=Server IP-Dcom.sun.management.jmxremote.port=7091-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false

增加以上参数既可以通过visualVM或jconsole监控远程JVM的执行情况。

JVM参数调整

调整heap参数和垃圾回收参数,需要通过压力测试和监控记录综合分析最有方案:
这里写图片描述

【案例】应用服务器运行一段Object实例数量达百万/千万级别,使用IBMHeapAnalyzer分析内存溢出时生成heapdump文件,发现89.1%的空间被基础对象占用(为从数据库加载大量记录导致):

这里写图片描述

使用jprofiler监控后发现,大量未释放的VchBaseVo对象:

这里写图片描述

查看工程代码,发现使用Hibernate的list()方法去查询,hibernatelist()方法优先查询缓存数据,如获取不到则从数据库中进行获取,从数据库获取到后Hibernate将会相应的填充一级、二级缓存,所以在应用服务器级别内存中出现百万级的对象占用内存问题,此为hibernate缓存的一个有效解决方案,但是在此处确实带来了性能问题,需要调用clear() 释放一级缓存占用的内存资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值