记一次JVM调优-阿里云开发者社区

开发者社区> 艾贺> 正文

记一次JVM调优

简介: 记一次JVM调优 高级程序员必不可少的技能,这个也是高薪必问的问题 能够有效通过 JVM 调优提升系统性能的人往往被人们冠以”大牛”、”大师”之类的称呼。 过程 在项目启动时加上必要的参数 -XX:+PrintGC -XX:+PrintGCCause -XX:+PrintGCDateStamps ...
+关注继续查看

记一次JVM调优

高级程序员必不可少的技能,这个也是高薪必问的问题

能够有效通过 JVM 调优提升系统性能的人往往被人们冠以”大牛”、”大师”之类的称呼。

过程

  1. 在项目启动时加上必要的参数
-XX:+PrintGC -XX:+PrintGCCause -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/Users/aihe/idea/idea_gc.txt -XX:+DisableExplicitGC  -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/issue_error

这一步gceasy.io网站上,直接就给了提示,增加metaspace的大小,在参数设置中,我们没有看到设置metaspace,那么下面一步做调整。

  1. 新生代,MetaSpace不够用,增加如下参数
    初始堆内存与最大堆内存大小设为一致,这样虚拟机一次性的分配内存,而不至于在初始堆大小不够用又向系统分配内存
-Xmx2048m -Xms2048m -Xmn1024m -XX:MetaspaceSize=512m

这次参数变更为如下:

-Dfile.encoding=UTF-8
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-XX:-OmitStackTraceInFastThrow
-Xverify:none
-XX:+PrintGC
-XX:+PrintGCCause
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:/Users/aihe/idea/idea_gc.txt
-XX:+DisableExplicitGC
-Xmx2048m
-Xms2048m
-Xmn1024m
-XX:MetaspaceSize=521m

想查看每个具体的属性含义可以用:
java -XX:+PrintFlagsFinal或者去Oracle文档查看详细介绍

  1. 启动idea,打开项目,在gceasy.io网站上分析垃圾收集日志, 可以看到几个常用的指标:

新生代,老年代分配的空间,以及使用的内存峰值

吞吐量及暂停时间:

  • 吞吐量:吞吐量是指应用程序线程用时占程序总用时的比例
  • 暂停时间:指一个时间段内应用程序线程让与 GC 线程执行而完全暂停。

  1. 换一下垃圾收集器试试
-XX:+UseG1GC

看起来吞吐量也降低了,暂停时间也增加了。

  1. 新增一个GC参数,最大的停顿时间为50ms,这个参数

这个参数不是硬性要求,JVM只是会尽最大的努力来达到这个要求,但是还是可能超过这个值

-XX:MaxGCPauseMillis=50

貌似没啥变化,就不贴图了
新增参数,初始堆占用百分比:

-XX:InitiatingHeapOccupancyPercent=50

看起来效果也不是特别好

增加垃圾收集器的并发线程数:,效果反而更差了。

-XX:ParallelGCThreads=20 //设置并行回收时GC的线程数
-XX:ConcGCThreads=5

G1的垃圾收集器阶段:

  • 初始标记
  • 并发标记
  • 最终标记
  • 筛选回收
  1. 用一下CMS垃圾收集器看看
-XX:+UseConcMarkSweepGC

效果好些还是不如最初的状态

  1. 我们还是用最开始的垃圾收集器组合吧。

-XX:+UseParallelGC

最后

对JVM这块不够大的指标就看吞吐量和暂停时间,更细的指标需要大家一起探索

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10089 0
程序性能优化入门锦集--设计+代码+JVM调优+数据库优化策略
关于优化是一项很大的内容。本文结合菜鸟结算项目优化点分析以及书籍《JAVA程序性能优化》阅读心得,给出个人觉得可供参考的优化思路,共涉及四个方面,分别是:设计篇、代码优化篇、JVM内存调优和数据库操作优化。
1889 0
jvm系列(六):jvm调优-从eclipse开始
  jvm调优-从eclipse开始   概述    什么是jvm调优呢?jvm调优就是根据gc日志分析jvm内存分配、回收的情况来调整各区域内存比例或者gc回收的策略;更深一层就是根据dump出来的内存结构和线程栈来分析代码中不合理的地方给予改进。
959 0
Java调优之jvm和线程的内存分析
[转载声明] 转载时必须标注:本文来源于铁木箱子的博客http://www.mzone.cc[本文地址] 本文永久地址是:http://www.mzone.cc/article/321.html       这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立线程,我的这篇文章http://
1228 0
JVM 性能调优工具 jinfo
Jinfo 是 JDK 自带的命令,可以用来查看正在运行的 java 应用程序的扩展参数,包括Java System属性和JVM命令行参数;也可以动态的修改正在运行的 JVM 一些参数。当系统崩溃时,jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息。
1083 0
jvm 怎么调优
JVM性能调优 博客分类: JVM JVM垃圾回收与性能调优总结 JVM调优的几种策略 一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。
6693 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13892 0
JVM 性能调优工具 jps
Jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID。
1006 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
7365 0
+关注
艾贺
专注开发,架构知识
327
文章
1
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载