JVM调优(转)

JVM调优

无监控不调优

如果没有一个评价系统性能的手段,则调优没有意义,因为你改了参数以后测试不出来
Java虚拟机调优主要涉及堆内存的调整和垃圾收集的调整

Java内存区域划分

方法区:在Java8以后叫做永久区,存放静态变量,class文件

JVM采用垃圾的收集算法

分代算法
新生代:对象生存时间一般都比较短,存活对象少,所以可以使用复制算法
老年代:垃圾少 一般使用标记整理算法

JVM参数

-:标准参数,所有JVM都支持
-X:非标准,每个JVM实现都不同
-XX:不稳定参数,下一个版本可能取消

Java对象分配顺序

栈上分配
    线程私有小对象
    无逃逸
    支持标量替换
    无需调整,用JVM默认的即可
    逃逸是指在栈上方法中分配了一个对象,但是有一个方法外的引用指向这个对象,说明这个对象逃逸了
    栈上分配默认进行逃逸分析,默认支持标量替换

线程本地分配TLAB
    占用eden,默认1%
    多线程的时候不用竞争eden就可以申请空间,提高效率
    小对象
    无需调整
如果发现自己是一个大对象,则到老年代去分配

否则,去eden区分配

说明:
    new出来一个对象时,如果该对象特别小,同时JVM如果开了栈上优化这一模式,则会优先在栈上分配(JVM在Server模式下默认是栈上优化),不往堆上分配
    如果栈空间分配满了,会去找线程本地内存(Thread Local Allocation Buffer),线程本地内存像eden区请求分配内存
    发现在线程本地内存分配不了,检查一下是不是大对象,如果是大对象则直接放到老年代中,不然直接放到eden

栈空间在栈帧上面,只要方法一结束,栈帧就没了,所以不需要垃圾收集,会自动收集
volatile:每个线程运行时,会给每个线程分配线程本地内存

在Eclipse使用run configuration进行运行

在运行程序时,进行JVM参数配置
在配置中使用-表示不使用
-XX:-DoEscapeAnalysis:不做逃逸分析
-XX:-EliminateAllocation:不做标量替换 有了这项和不做逃逸分析就不会栈上分配了
-XX:-UseTLAB:不使用线程本地缓存
-XX:+PrintGC:打印垃圾收集信息
-XX:PrintGCdetails:打印垃圾收集详细信息
这个配置相当于就会向Eden区分配

内存溢出

-XX:+HeapDumpOnOutOFMemoryError:内存溢出时把堆的信息dump出来
-XX:HeapDumpPath=D:\temp\jvm.dump:存放dump出来的堆信息的文件
-XX:+PrintGCDetails:打印GC详细的信息
-Xms10M:程序起始的时候给该程序分配的堆内存
-Xmx10M:可以给该程序分配的最大的堆内存
调优时将初始分配的内存和最大内存保持一致
vixVM:检测虚拟机堆的信息,还有其他工具:JProfiler Jhat Jmap JConsole

如何调整栈递归调用的次数,栈溢出-StackOverFlow

Xss:这个值调的比较小,线程的并发数量就可以特别多;如果调的比较大,线程的递归调用就可以比较深

常用参数设置
堆设置

-Xms:初始堆的大小
-Xmx:最大堆的大小
-Xss:线程栈的大小
-XX:NewSize=n:设置年轻代的大小
- -XX:NewRatio=n:设置年轻代和年老代的比值,如3表示年轻代:年老代比值为1:3
-XX:SurvivorRatio=n:年轻代中Eden区和两个Survivor区的比值。注意Survivor有两个。如3表示Eden:Survivor=3:2
-XX:MaxPermSize=n:设置持久代的大小

收集器设置

-XX:+UserSerialGC:设置串行收集器
-XX:+UserParallekGC:设置并行收集器
-XX:+UserConcMarkSweepGC:设置并发收集器

垃圾回收统计信息

-XX:+PrintGC
-XX:+PrintGCDetails
-Xloggc:filename:把信息记录到文件中,而不是打印到后台

Tomcat优化设置

set JAVA_OPTS= 确定一个服务器上有几个虚拟机,来确定给虚拟机多大内存,
-Xms4g:
-Xmx4g:
-Xss512k
-XX:+AggressiveOpts:凡是虚拟机里能用到的优化选项都用上
-XX:+UserBiasedLocking:启用偏向锁
-XX:PermSize=64M
-XX:MaxPermSize=300M
-XX:+DisableExplicitGC:不让显示调用GC,也就是在程序中使用System.gc()也没用
JDK1.8中永久代变成元空间
-XX:+UserConcMarkSweepGC:使用CMS缩短响应时间,并发手机,低停顿
-XX:+UserParNeWGC:并行收集新生代的垃圾
-XX:+CMSParrllelRemarkEnabled:在使用UserParNewGC的情况下,尽量减少mark的时间
-XX:+UserCMSCompactAtFullCollection:使用并发收集器时,开启对老年代的压缩,使碎片减少
-XX:LargePageSizeInBytes=128m:内存分页大小对性能的提升
-XX:+UserFastAccessorMethods:get/set方法转成本地代码
-Djava.awt.headless=true:修复linux下tomcat处理图表时可能产生的一个bug

性能设置

一个服务器上跑了一个Tomcat,提供了一个服务,如何知道这个服务能并发访问,并且响应时间比较快
起一万台机器,每台机器上开启一万个线程,这些不停的去访问这个服务器上的一个页面,看这个服务器能否撑得住
使用自动化测试工具来进行性能设置,如LoadRunner,Selenium,JMeter(免费)
JMeter具体如何配置进行性能化设置,并观察结果

作者:plugcy
来源:CSDN
原文:https://blog.csdn.net/caisongcheng_good/article/details/80878386
版权声明:本文为博主原创文章,转载请附上博文链接!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容

  • 参数设置 在Java虚拟机的参数中,有3种表示方法用“ps -ef |grep "java"命令,可以得到当前Ja...
    九问阅读 9,147评论 2 52
  • 1.一些概念 1.1.数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始...
    落落落落大大方方阅读 4,544评论 4 86
  • Tomcat 的缺省配置是不能稳定长期运行的,也就是不适合生产环境,它会死机,让你不断重新启动,甚至在午夜时分唤醒...
    愤怒的_菜鸟阅读 2,120评论 0 24
  • 文/ 陆九州 我喜欢春天,柔美而平和;我喜欢夏天,热情而奔放;我喜欢秋天,深情款款;我喜欢冬天,那一缕冬日暖阳。一...
    爱在九州阅读 259评论 0 3
  • 童言无忌,童年的你,我,他都是快快乐乐的。脸上总是洋溢着灿烂的笑容。随着年龄逐渐长大,我们想法多了,责任多了,担子...
    汪豆壳阅读 114评论 0 0