JVM调优
来源:互联网 发布:上海游族网络待遇 编辑:程序博客网 时间:2024/06/10 22:53
本文内容
1 优化层面
2 JVM调优
1 优化层面
1.1 设计层面
系统的设计层面是要最先考虑的问题。一个糟糕的设计,会直接导致系统性能出现问题。
例如,对于支付宝和微信的红包系统,若设计出现问题,即便程序优秀、硬件强劲,也于事无补。反之,若设计良好,则事半功倍。
1.2 程序层面
在一个良好的设计下,程序本身的优劣就决定了性能的高低。高质量的代码会提高资源的利用率,减少不必要的操作,从而提升性能。
1.3 设置层面
排除设计和程序层面的原因,出现性能问题时,可以通过一些系统参数设置,以匹配现实情况,使得资源使用最优化,从而提升性能。
1.4 硬件层面
当上述三个层面都没有问题的时候,就要考虑扩展硬件设备了。
2 JVM调优(设置层面)
2.1 工作模式
2.1.1 client
占用内存小,启动速度快;
适合短时间运行。
2.1.2 server
与client模式相比,占用内存大,启动速度慢,但启动后,执行速度快;
适合长时间运行。
2.1.3 设置工作模式
配置文件:…/jdk/jre/lib/amd64/jvm.cfg
2.2 堆内存
2.2.1 Max Memory
-Xmx可用的最大内存数(Max Memory),即JVM可占用的内存上限。通常,服务器是专机专用,除了运行指定的服务程序,一般情况下,不会同时运行其它的程序。
所以,预留部分内存给操作系统等必要程序,其余内存尽可能分配给JVM,以提高内存利用率和性能。
2.2.2 Total Memory & Virtual Memory
-Xms初始分配内存(Total Memory)。其余作为伸缩区(Virtual Memory),即 Max Memory = Total Memory + Virtual Memory。
当初始分配的内存不足时,会从伸缩区申请部分内存,当可用内存充裕时,再将申请来的内存释放。
通常,服务器是专机专用,除了运行执行的服务程序,不会同时运行其它的程序。
所以,一般会将Total Memory设置与Max Memory相等,即不设置伸缩区,以减少从伸缩区申请和释放内存带来的开销。
2.2.3 Young Memory (Eden + Survivor) &Tenured Memory
-Xmn年轻代内存(Young Memory)-XX:SurvivorRatio=n伊甸园与存活代的内存比率(Eden:Survivor)-XX:NewSize=n存活代内存(Survivor Memory)-XX:NewRatio=n年轻代与老年代的内存比率(Young:Tenured)-XX:PretenureSIzeThreshold=n直接晋升老年代的对象大小-XX:+UseAdaptiveSizePolicy是否采用动态控制策略(堆中各区域大小及晋升老年代的年龄)新创建的对象都会保存在Young Memory的Eden Memory中,满足一定条件的对象会被移至Young Memory的Survivor Memory中,进而再晋级至Tenured Memory中。
因此,需要根据程序实际运行情况,合理设置相应内存数值和比率。
2.2.4 Thread Memory
-Xss每个线程分配的堆栈内存,JDK 5.0以后,每个线程堆栈大小默认为1M。降低单个线程的堆栈内存,可以提高可并发的线程数量。
但是,线程数量有一定限制(上限),不能无限上涨。
应合理设置线程堆栈内存,通常,将线程数控制在3000-5000范围内。
2.2.5 Meta Space Memory
-XX:MaxMetaspaceSize最大容量,默认无限制(受到本机物理内存限制)-XX:MetaspaceSize初始分配容量-XX:MinMetaspaceFreeRatio执行GC后,最小剩余元空间比例。-XX:MaxMetaspaceFreeRatio执行GC后,最大剩余元空间比例。2.2 回收机制
-XX:+UseSerialGCSerialCopying & Serial MSC-XX:+UseParallelGCParallel Scavenge & Parallel MarkSweep/Parallel Compating-XX:+UseParalledlOldGCParallel Scavenge & Parallel MarkSweep/Parallel Compating-XX:+UseConcMarkSweepGCParNew & Concurrent Mark-Sweep GC/CMSGC-XX:ParallelGCThreads=n设置并行收集器使用的CPU数量-XX:MaxGCPauseMillis=n设置并行收集器的最大暂停时间(毫秒)-XX:GCTimeRatio=n设置垃圾回收时间占程序运行时间的百分比-XX:+CMSIncrementalMode设置为增量模式,适用于单CPU情况。2.3 统计信息
2.3.1 GC
-XX:+PrintGC每次触发GC的时候打印相关日志-XX:+PrintGCDetails更详细的GC日志-XX:+PrintHeapAtGC每次GC时打印堆的详细详细信息-XX:+PrintGCApplicationConcurrentTime打印应用程序执行时间-XX:+PrintGCApplicationAtoppedTime打印应用程序由GC引起的停顿时间-XX:+PrintReferenceGC跟踪系统内的软引用,弱引用,虚引用和finallize队列。2.3.2 类跟踪
-verbose:class跟踪类的加载和卸载-XX:+TraceClassLoading单独跟踪类加载-XX:+TraceClassUnloading单独跟踪类卸载-XX:+PrintClassHistogram查看运行时类的分布情况- JVM调优
- JVM调优
- JVM调优
- JVM调优
- JVM 调优
- JVM调优
- JVM调优
- JVM调优
- jvm调优
- JVM调优
- JVM调优
- JVM调优
- jvm调优
- JVM调优
- JVM调优
- JVM调优
- JVM调优
- JVM调优
- 浅谈多线程在java程序中的应用
- 求nextval数组值的简便算法
- SSH中公共Dao层、Dao接口
- Online Judge判题结果解析
- 太空飞行计划问题
- JVM调优
- 无缝滚动
- c# linq的差集,并集,交集,去重
- python的冒泡排序
- IntelliJ IDEA 安装总结
- SSH中Action
- mongoose如何取得全部结果数量并只提取部分结果
- BZOJ P1006: [HNOI2008]神奇的国度
- POJ