1.一般的Java项目不需要JVM调优

(1)JVM本身就是为这种低延时高并发大吞吐的服务设计和优化的
(2)往往更偏重于应用服务本身的调优
(3)一般项目加个xms和xmx参数就够了

2.JVM调优6大步骤

(1)JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数
(2)JVM性能调优方法和步骤:
   <1>监控GC的状态
     1.1.使用各种JVM工具,查看当前日志,分析当前JVM参数设置
     1.2.分析当前堆内存快照和gc日志,根据实际的各区域内存划分和GC执行时间,觉得是否进行优化
   <2>生成堆的dump文件
     2.1.通过JMX的MBean生成当前的Heap信息,大小为一个3G(整个堆的大小)的hprof文件
     2.2.如果没有启动JMX可以通过Java的jmap命令来生成该文件
   <3>分析dump文件
     3.1.打开这个3G的堆信息文件,一般的Window系统没有这么大的内存,必须借助高配置的Linux      
     3.2.几种工具打开该文件:
       3.2.1.Visual VM、IBM HeapAnalyzer、JDK 自带的Hprof工具
       3.2.2.Mat(Eclipse专门的静态内存分析工具)推荐使用
   <4>分析结果,判断是否需要优化
     4.1.如果各项参数设置合理,系统没有超时日志出现,GC频率不高,GC耗时不高,那么没有必要进行GC优化
     4.2.如果GC时间超过1-3秒,或者频繁GC,则必须优化
     4.3.如果满足下面的指标,则一般不需要进行GC:
       4.3.1.Minor GC执行时间不到50ms;
       4.3.2.Minor GC执行不频繁,约10秒一次;
       4.3.3.Full GC执行时间不到1s;
       4.3.4.Full GC执行频率不算频繁,不低于10分钟1次; 
   <5>调整GC类型和内存分配
     5.1.若内存分配过大或过小,或者采用的GC收集器比较慢,则应该优先调整这些参数
   <6>不断的分析和调整
     6.1.通过不断的试验和试错,分析并找到最合适的参数
     6.2.如果找到了最合适的参数,则将这些参数应用到所有服务器

3.JVM参数优化步流程(仅用于参考)

(1)针对JVM堆的设置,一般可以通过-Xms -Xmx限定其最小、最大值
   <1>为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间
   <2>通常把最大、最小设置为相同的值
(2)年轻代和年老代将根据默认的比例(1:2)分配堆内存
   <1>通过调整二者之间的比率NewRadio来调整二者之间的大小,也可以针对回收代
   <2>为了防止年轻代的堆收缩,会把-XX:newSize -XX:MaxNewSize设置为同样大小
(3)年轻代和年老代设置在抉择时应该根据以下两点:
   <1>本着Full GC尽量少的原则,让年老代尽量缓存常用对象,JVM的默认比例1:2也是这个道
   <2>给年老代至少预留1/3的增长空间

4.JVM参数设置依据:

(1)堆设置
    -Xms:初始堆大小
    -Xmx:最大堆大小
    -XX:NewSize=n:设置年轻代大小
    -XX:NewRatio=n:设置年轻代和年老代的比值
      <1>如:为3,表示年轻代与年老代比值为1:3
      <2>年轻代占整个年轻代年老代和的1/4
    -XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值
      <1>注意Survivor区有两个
      <2>如:3,表示Eden:Survivor=3:2,
      <3>一个Survivor区占整个年轻代的1/5
    -XX:MaxPermSize=n:设置持久代大小
(2)以Tomcat服务启动,对于参数设置,在tomcat的bin目录下
   <1>window系统在catalina.bat中设置
   <2>Linux系统在catalina.sh中设置

java tps调优 java项目调优_调优

(3)在eclipse中设置JVM启动参数,在Run菜单下的“run configurations”配置

java tps调优 java项目调优_参数设置_02