一般在jdk机器上可以通过命令粗略查看jvm当前参数运行状态,根据状态跟应用性质来调整参数
jstat -gcutil jvm的pid号----改命令可查看jvm堆内存分配的使用的百分比情况与普通GC,FULLGC从启动到查看为止所执行的次数以及执行时间
jstat -gacapity jvm的pid好---该命令可查看使用的内存量,与GC时间
当然详细情况需要通过gc日志来分析
tomcat开启GC日志记录
vim bin/catalina.sh 先编辑tomcat启动脚本,加上初始化jvm参数
JAVA_OPTS=‘-xms512m -Xmx4096m -XX:PermSize=64M -XX:MaxNewSize=128m -XX:MaxPermSize=64m -XX:ParallelGCThreads=8 -XX:+UseConcmarkSweepGC -Xloggc:/usr/local/tomcat/logs/tomcat_gc.log‘
重启tomcat
可以使用windows下的gchisto软件把获取到的日志导进去,查看具体性能分析
也可以用在线工具https://gceasy.io/把日志包导进去获取性能分析
根据日志的gc响应时间跟应用类加载对象实例存活时间特点调整jvm参数
一般,如果对象存活时间短,那么可以设置年轻代的大小大,还有就是如果追求响应时间快,也可设置大内存
当年轻代内存大时,普通GC的周期会小,年轻代大,年老代就小,如果此时进入年老代的实例多的话,那么就会进行频繁full gc,由于年老代gc一般是用串行回收器的
所以,full gc的时间就会变长,而在gc的时候,对外是不响应请求的,这样用户体验就不好,还有就是,如果前面还有反向代理的话,反代的后端健康检查失效时间必须要大于gc的时间
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。