本节只是介绍实战部分,具体的理论参数,请自行百度。

所需工具:linux服务器  Jmeter测试工具  xshell   一个web应用

Tomcat的JVM参数可以配置在catalina.sh,如果是在window上可以配置.bat文件

配置1:

这里 我配置了一个gc日志路径为/home/log/gc.log ,打印gc的日志,初始堆和最大堆内存设置为50M,输出Dump文件在内存溢出的时候 ,使用串行垃圾收集器,永久代大小为50m。

将web应用放到对应的目录,配置好server.xml(这里不作配置介绍),sh start.sh启动tomcat.

使用压测工具(Jmeter)进行吞吐量的测试。没用过的同学可以上官网下载学习一下http://jmeter.apache.org/

建立用户组(10个线程,每个线程请求1000次),设置好Http请求的信息,生成一个聚合报告和一个gc日志

先来看一下gc日志吧:

满屏幕的Full GC啊,而且观察第一列时间戳变化结合用时可以发现,几乎上一次Full GC还没有结束,下一次又来了,真是一波还未平息,一波又来侵袭啊!

最后查看jmeter上给出的聚合报告:

吞吐量维持在122.7每秒。从这个案例中我们可以看到老年代34176k基本已经满了,经过FUll GC之后新生代会有一点剩余的空间。总的来说Full GC的停顿时间是最长的,而且发生的这么频繁,显然这样的配置是不合理的。

配置2:

这次配置主要是增大了最大堆内存。以便虚拟机自动扩容,得到稳定的堆内存大小。

只需要关注一点 最大堆内存为82924k 80M左右,也就是说虚拟机对堆内存自动扩容到80M,并且稳定下来。这个配置测试只是为了找到一个稳定的堆内存,以便接下来的测试。

配置三:

设置堆的初始内存128m。

由配置2的结果可知,堆内存最终稳定在80m左右,因此小于80m的堆内存,很有可能会引起大量的GC反应,所以这里我把堆内存设置为128M,可以减少GC次数。

可以看到吞吐量略微有所提升,GC次数大量减少,并且GC的时间间隔变得更长。

配置四:

当前使用ParallalGC回收器,这是一个多线程并行回收器。

使用多线程并行的GC回收器吞吐量有略微有提升。(在没有GC压力的情况下,ParallalGC与serialGC的差异对吞吐量影响并不大。)

配置五:

配置六:

根据配置三的结论在80M以下的堆内存会发生频繁的GC,再结合配置四中得到的结论在有一定GC压力的时候,ParallelGC和serialGC的差异会在吞吐量有一定的体现。配置五和配置六的堆内存为64M  (小于80M) ,所以会发生频繁的GC,在采用不同的GC回收器的时候,理论上会在在吞吐量上有较大的差异性,但是我的实验为什么差距不是很大,到底为什么呢?   诶, 家里穷,我用的是单核的CPU,在单核的情况下ParallelGC改变性能并不明显。在单核或者并行能力较弱的情况下还是推荐使用serialGC。有条件的同学可以用多核的服务器试一下哦!并告知结果,让本人体会一下糕富帅的生活。

配置七:

用ParNewGC试试,新生代使用ParNewGC回收,老年代依旧使用SerialGC回收。看看性能如何?

比全部使用串行回收器的性能好,但是比全部使用并行回收器的性能差些。

另外JDK版本的升级可能也会使得性能有一点的提升,这可以说是免费的午餐,但是JDK版本升级伴随着一定的风险,也许在新版本的JDK中引入某些未知的BUG,毕竟吃人家的嘴软,出来混的还是要还的!


最后我列出一些常用的JVM配置参数供参考:

1.与串行回收期相关的参数

•-XX:+UseSerialGC:在新生代和老年代使用串行的收集器

•-XX:SurvivorRatio:设置eden区的大小和survivor区的比例

•-XX:PretenureSizeThreshold:设置大对象直接进入老年代的阀值。当对象的大小超过这个值,将直接在老年代分配

•-XX:MaxTenuringThreshold:设置对象进入老年代的年龄的最大值。每一次Minor GC后,对象年龄就加1.任何大于这个年龄的对象,一定会进入老年代。

2.与并行GC相关的参数

•-XX:+UseParNewGC:在新生代使用并行收集器。

•-XX:+UseParallelOldGC:在老年代使用并行收集器

•-XX:+ParallelGCThreads:设置用于垃圾回收的线程数,通常可以设置成和CPU数相等。CPU数量较多的情况下,设置相对小的数值也可。

•-XX:+MaxGCPauseMillis:设置最大垃圾收集停顿时间。它的值是一个大于0的整数。收集器在工作时,会调整java堆的大小或其他的一些参数,尽可能把停顿时间控制在MaxGCPauseMillis以内。

•-XX:+UseAdaptiveSizePolicy:打开自适应GC策略,在这种模式下,新生代的大小和survivior的比例,晋升老年代的对象年龄等参数会被自动的调整,以达到堆大小,吞吐量和停顿之间的平衡点。

•-XX:+GCTimeRatio:设置吞吐量大小。它的值是一个0到100之间的证书。假设GCTimeRatio的值为n,那么系统将花费不超过1/(1+n)的时间用于垃圾收集。

3.与CMS收集器相关的参数

•-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器。

•-XX:ParallelCMSThreads:设置CMS的线程数量。

•-XX:CMSInitiatingOccupancyFraction:设置CMS收集器在老年代空间被使用多少后触发,默认68%

•-XX:UseCMSCompactAtFullCollection:设置CMS在完成垃圾收集后是否要进行一次碎片整理

•-XX:CMSFullGCBeforeCompaction:设定进行多少次CMS垃圾回收后,进行一次内存压缩。

•-XX:+CMSClassUnloadingEnabled:允许对类元数据进行回收

•-XX:CMSInitiatingPermOccupancyFraction:当永久代占有率达到这一百分比时,启动CMS回收(前提是-XX:+CMSClassUnloadingEnabled被激活了)

•-XX:UseCMSInitiatingOccupancyOnly:表示只有在到达阀值的时候才进行CMS回收。

•-XX:+CMSIncrementalMode:使用增量模式,比较适合单CPU.增量模式在中标记为废弃,jdk9中将彻底移除

4.与G1回收期相关的参数

•-XX:+UseG1GC:使用G1回收器

•-XX:+MaxGCPauseMillis:设置最大的垃圾收集停顿时间

•-XX:+GcPauseIntervalMillis:设置停顿时间间隔。

5.TLAB相关

•-XX:+UseTLAB:开启TLAB分配。

•-XX:+PrintTLAB:打印TLAB相关分配信息

•-XX:TLABSize:设置TLAB大小

•-XX:+ResizeTLAB:自动调整TLAB大小

6.其他一些参数

•-XX:+DisableExplicitGC:禁用显式GC

•-XX:+ExplicitGCInvokesConcurrent:使用并发方式处理显式GC

转载于:https://www.cnblogs.com/think-in-java/p/5508426.html

JVM Tomcat性能实战相关推荐

  1. zabbix使用zabbix-java-gateway监控jvm/tomcat性能

    参考:http://www.myexception.cn/operating-system/1926200.html http://www.mamicode.com/info-detail-15216 ...

  2. Tomcat 和 JVM 的性能调优总结

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/enKbC Tomcat性能调优 ...

  3. 只需两步,Tomcat JVM 参数性能迅速调到最优!

    作者:Java架构师历程 来源:cloud.tencent.com/developer/article/1346964 Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server. ...

  4. Tomcat性能调优-JVM监控与调优

    参数设置 在Java虚拟机的参数中,有3种表示方法用"ps -ef |grep "java"命令,可以得到当前Java进程的所有启动参数和配置参数: 标准参数(-),所有 ...

  5. 一文了解程序员必须要知道的JVM和性能优化知识点

    目录 JVM和性能优化 1.Java内存区域 虚拟机的历史 未来的Java技术一览 运行时数据区域 站在线程角度来看堆和栈 深入辨析堆和栈 方法的出入栈 虚拟机中的对象 堆参数设置和内存溢出实战 2. ...

  6. 2020年薪30W的Java程序员都要求熟悉JVM与性能调优!

    前言 作为Java程序员,你有没有被JVM伤害过?面试的时候是否碰到过对JVM的灵魂拷问? 一.JVM 内存区域划分 1.程序计数器(线程私有) 程序计数器(Program Counter Regis ...

  7. tomcat 性能设置

    Tomcat性能调优: 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创 ...

  8. 【Tomcat】Tomcat性能分析

    一.预研任务介绍和预研目标 任务介绍: Apache Tomcat是目前较为流行的web服务器,以其技术先进.性能稳定著称,其次它还是一个免费开源的项目. Tomcat性能分析的意义在于能为日常工作中 ...

  9. 限制tomcat带宽_必看的Tomcat性能优化

    在目前流行的互联网架构中,对一个应用来说,Tomcat是首,SSM是中,JVM是尾,我们通常对于SSM是比较了解的,而忽略了收尾,而Tomcat在目前的网络编程中是举足轻重的,但是我们其实对Tomca ...

最新文章

  1. 嗷嗷嗷,kuangbin大大博客上拉的题
  2. 声明与函数、函数指针
  3. 九妹带你了解oracle
  4. 神盾解密工具 之 解密 “ PHP 神盾解密工具 ”
  5. oracle登录无法处理服务名,ORA-12154: TNS: 无法处理服务名 plsql能登陆
  6. android中在java代码中设置Button按钮的背景颜色
  7. 【GNN】百度「NLP」面试的一点总结
  8. Python编写:好友管理系统
  9. MySQL8 OCP 证书
  10. 草图大师SketchUp 2022 安装教程
  11. js table 生成序号_JS自动为表格增加序号
  12. 鼠标悬停字体抖动_快速提示:解决悬停状态下的字体粗细问题
  13. 联想电脑如何改w ndows更新,电脑是否能升级到Windows 8.1 及支持Windows 8.1系统的机型汇总...
  14. window10怎么卸载php,window10怎么卸载软件以及清空插件
  15. Linux常用指令学习(篇一):文件处理指令
  16. PhotoShop如何导出线性空间下的图片
  17. f2fs mkfs 格式化过程系列 1
  18. 【机器学习】主成分分析法
  19. 以客户思维重 塑品牌营销模式
  20. SILAB场景仿真软件:(1)基础介绍

热门文章

  1. 莪的拽、像省田各号①样没尽頭队——需求改进原型设计
  2. 【UE4】创建首个关卡
  3. Python中如何用random模块生成随机数并重现
  4. 如何在上传的图片上写字
  5. au3打开html文件,autoit获取ie浏览器简单操作网页(GUI小工具)
  6. 桥牌坐庄训练bm2000 level3闯关记录——A5
  7. VM 16 Pro 遇到VPMC无法启动导致虚拟机无法启动求大神赐教!
  8. 福州大学计算机与科学学院,1:福州大学数学与计算机科学学院
  9. 主动变被动9个例句_【语法课堂】全面了解被动语态的特殊用法考点总结
  10. python实时抢网页红包_Python实现自动抢红包功能