概述:
了解调优的思想
1、高性能硬件上的程序部署策略
如果堆的内存设置较大的时候,GC将会产生较大停顿,如果大文件不会在新生代而直接进入老生代,导致老生代内存被耗尽。
在高性能硬件上部署程序,目前主要有两种方式:
- 通过64位JDK来使用大内存
- 使用若干个32位虚拟机建立逻辑集群利用硬件资源
大内存就是在夜间某个时间内进行GC不会影响用户体验
类型建立负载均衡来对于32位虚拟机集群访问。
2、集群间同步导致的内存溢出
-XX:+HeapDumpOnOutOfMemoryError 生成dump文件 ,写频繁耗资源,读耗资源较小
3、堆外内存导致的溢出错误
NIO操作使用的Direct Memory 与堆内存没有关系
通过 -XX:MaxDirectMemorySize 调整大小
4、外部命令导致系统缓慢
使用外部命令执行shell脚本
java的Runtime.getRuntime().exec()方法调用,直接会开另个线程
5、服务器JVM进程崩溃
并发访问产生大量的socket请求,最后出现 java.net.SocketException:Connection reset
这是异步出现问题,可以通过生产者和消费者模式的消息队列完成
6、实战:Eclipse运行速度调优
6.1 可以通过修改eclipse.ini进行调优
-startup
plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.300.v20150602-1417
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms256m
-Xmx1024m
6.2、设置 JDK1.6需要明确指定-XX:MaxPermSize=254M 设置永久代的内存
6.3 编译时间和垃圾收集时间
编译时间:是指定虚拟机的JIT编译器(Just In Time Compiler) 如果某些代码被循环使用就是直接编译成本地执行二进制码
垃圾收集时间:主要是老年代内存的扩展花费,可以在启动的时候指定内存大小
最后增加的设置:
-Xverifiy:none (表示取消字符验证)
-Xmx 512m 最大内存
-Xms 512m 实际分配大小
-Xms 128m
-XX:PermSize =96 永久代内存
-XX:MaxPermSize=96 最大永久代内存。
-XX:+DisableExplicitGC (屏蔽System.gc(),自动执行gc)
-XX:+UseConcMarkSweepGC 老生代垃圾收集器
-XX:+UseParNewGC 新生代垃圾收集器
-XX:CMSInitiatingOccupancyFraction=85 将GC临界值提升到85%