JVM 调优设计的几个方面:
- 合理的编写程序
2.充分并合理的使用硬件资源
3.合理地进行jvm调优
非堆内存:
- 堆外内存
- 文件句柄
- socket句柄
- 数据库连接
详细解释:
- 文件: 采用文件分割,,限制文件大小。
- 网络IO:
限流 - 大对象:对于jvm 绝对是一个噩梦
1. 避免使用大对象
2.尽量减少大对象的生存时间(朝生夕死) - JDK32 位版本,64位版本,服务器内存有16G,32G,64G
4.1 JDK32 位版本 最高可以使用4G
JDK64位版本,可以使用更多内存
参考:https://blog.csdn.net/XXJ19950917/article/details/73527313
4.2 尽量使用32位版本,因为目前的64位版本效率没有32位高
4.3 -XX:HeapDumpOnOutOfMemoryError -Xmx10G ,这个dump文件会有10G
5.现在一线互联网公司的做法:将大内存服务器分为小内存服务
5.1 虚拟机
5.2 docker - JVM 调优原则
6.1 降低Full GC的频次,一天有1-2次,控制在晚上,重启服务器或者我们来一个定时任务触发Full GC
6.2 确保大对象的“朝生夕死”
6.3 提高大对象进入老年代的门槛(-XX:MaxTenuringThreshold=15 经过MinorGC 15次后才进入老年代)
CMSInitiatingOccupancyFraction = (老年代-Eden-1个Survivor)/(老年代-新生代)*100
-server -Xmn500m -Xms1200m -Xmx1200m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:SurvivorRatio=1 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSCompactAtFullCollection
-XX:+CMSFullGCsBeforeCompaction=5 -XX:+HeapDumpOnOutOfMemoryError -Xloggc:log/gc.log -XX:+PrintGCDetails -XX:+CMSParallelRemarkEnabled
-Xmn:新生代 -Xmx:最大堆内存 (-XX:PermSize=256m -XX:MaxPermSize=256m):JDK1.7中的,jdk1.8使用的是Mataspace,
SurvivorRatio设置Eden在新生代中的比例.
-XX:+UseConcMarkSweepGC 表示使用CMS垃圾回收器
-Xloggc:log/gc.log 分析o(老年代)增长是否合理,FullGC频率,Eden:s0:s1的比例是否合理