演讲:时间:2014/3/6金蝶中间件技术支持姚玉鹏Apusic应用服务器调优--金蝶Apusic介绍提纲ContentsJVM介绍及调优JVM内部结构介绍JVM命令及工具介绍Apusic应用服务器调优线程调优及Http相关参数调优数据源调优其他相关参数提纲ContentsJVM介绍及调优JVM内部结构介绍JVM命令及工具介绍Apusic应用服务器调优线程调优及Http相关参数调优数据源调优其他相关参数基础架构平台专家JVM子系统与组件CLASSLOADERMETHODAREAHEAPJAVASTACKNATIVEMETHODSTACKPROGRAMCOUNTERREGISTEREXECUTIONENGINENATIVEINTERFACECLASSFILESNATIVELIBRARIESRUNTIMEDATAAREA此区域属于所有线程共享区域此区域属于线程不共享区域类加载本地接口执行引擎运行时数据区基础架构平台专家P5Jvm内存模型Young(年轻代)、Tenured(终身代)、Perm(永久代)基础架构平台专家堆设置-Xms:初始堆大小-Xmx:最大堆大小-XX:NewSize=n:设置年轻代大小-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5-XX:MaxPermSize=n:设置持久代大小基础架构平台专家堆设置13年轻代年老代311Eden-XX:NewRatio=n:设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4-XX:SurvivorRatio=n:年轻代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:3,表示Eden:Survivor=3:2,一个Survivor区占整个年轻代的1/5Survivor基础架构平台专家内存溢出java.lang.OutOfMemoryError:JavaheapspaceJava堆溢出-Xms和-Xmxjava.lang.OutOfMemoryError:PermGenfull持久区溢出-XX:PermSize和-XX:MaxPermSizeStackOverFlow栈溢出NativeheapOutOfMemory基础架构平台专家系统线程分类GC-XX:+UseSerialGC:设置串行收集器单线程GC,也是默认的GC。该GC适用于单CPU机器。年轻代单线索程,顺序回收;年老代单线程,顺序回收-XX:+UseParallelGC:设置并行收集器多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。年轻代多线程,并行回收;年老代单线程,顺序回收-XX:+UseConcMarkSweepGC:设置并发收集器适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。年轻代多线程,与应用并发回收;年老代多线程,与应用并发回收基础架构平台专家GC统计输出-XX:+PrintGC输出形式:[GC118250K-113543K(130112K),0.0094143secs][FullGC121376K-10414K(130112K),0.0650971secs]-XX:+PrintGCDetails输出形式:[GC[DefNew:8614K-781K(9088K),0.0123035secs]118250K-113543K(130112K),0.0124633secs][GC[DefNew:8614K-8614K(9088K),0.0000665secs][Tenured:112761K-10414K(121024K),0.0433488secs]121376K-10414K(130112K),0.0436268secs]基础架构平台专家GC统计输出-XX:+PrintGCTimeStamps带有GC时间戳输出形式:11.851:[GC98328K-93620K(130112K),0.0082960secs]-Xloggc:filename把相关日志信息记录到文件以便分析基础架构平台专家P12JVM内存调整参数整理-汇总堆内存优化:调整JVM启动参数-Xms-Xmx-XX:newSize-XX:MaxNewSize,如调整初始堆内存和最大对内存-Xms256M-Xmx512M。或者调整初始NewGeneration的初始内存和最大内存-XX:newSize=128M-XX:MaxNewSize=128M永久区内存优化:调整PermSize参数如-XX:PermSize=256M--XX:MaxPermSize=512M。栈内存优化:调整每个线程的栈内存容量如-Xss2048K最终,一个运行中的JVM所占的内存=堆内存+永久区内存+所有线程所占的栈内存总和。基础架构平台专家P13JVM内存调整参数整理(heapsize)a:-Xmx指定jvm的最大heap大小,如:-Xmx2gb:-Xms指定jvm的最小heap大小,如:-Xms1gc:-Xmn指定jvm中NewGeneration的大小,如:-Xmn256md:-XX:PermSize指定jvm中PermGeneration的最小值,如:-XX:PermSize=32me:-XX:MaxPermSize指定PermGeneration的最大值,如:-XX:MaxPermSize=64mf:-Xss指定线程桟大小,如:-Xss128kg:-XX:NewRatio指定jvm中OldGenerationheapsize与NewGeneration的比例,在使用CMSGC的情况下此参数失效,如:-XX:NewRatio=2h:-XX:SurvivorRatio指定NewGeneration中EdenSpace与一个SurvivorSpace的heapsize比例,-XX:SurvivorRatio=8,那么在总共NewGeneration为10m的情况下,EdenSpace为8mi:-XX:MinHeapFreeRatio指定jvmheap在使用率小于n的情况下,heap进行收缩,Xmx==Xms的情况下无效,如:-XX:MinHeapFreeRatio=30j:-XX:MaxHeapFreeRatio指定jvmheap在使用率大于n的情况下,heap进行扩张,Xmx==Xms的情况下无效,如:-XX:MaxHeapFreeRatio=70k:-XX:LargePageSizeInBytes指定Javaheap的分页页面大小,如:-XX:LargePageSizeInBytes=128m基础架构平台专家P14JVM内存调整参数整理(garbagecollector)a:-XX:+UseParallelGC指定在NewGeneration使用parallelcollector,并行收集,同时启动多个垃圾回收thread,不能和CMSgc一起使用.系统吨吐量优先,但是会有较长长时间的apppause,后台系统任务可以使用此gcb:-XX:ParallelGCThreads指定parallelcollection时启动的thread个数,默认是物理processor的个数,如:-xx:ParallelGCThreads=8c:-XX:+UseParallelOldGC指定在OldGeneration使用parallelcollectord:-XX:+UseParNewGC指定在NewGeneration使用parallelcollector,是UseParallelGC的gc的升级版本,有更好的性能或者优点,可以和CMSgc一起使用e:-XX:+CMSParallelRemarkEnabled在使用UseParNewGC的情况下,尽量减少mark的时间f:-XX:+UseConcMarkSweepGC指定在OldGeneration使用concurrentcmarksweepgc,gcthread和appthread并行,所以称作concurrent.apppause时间较短,适合交互性强的系统,如webserverg:-XX:+UseCMSCompactAtFullCollection在使用concurrentgc的情况下,防止memoryfragmention,对liveobject进行整理,使memory碎片减少h:-XX:CMSInitiatingOccupancyFraction=n指示在oldgeneration在使用了n%的比例后,启动concurrentcollector,默认值是68,如:-XX:CMSInitiatingOccupancyFraction=70有个bug,在低版本的jvm上出现,=6486089i:-XX:+UseCMSInitiatingOccupancyOnly指示只有在oldgeneration在使用了初始化的比例后concurrentcollector启动收集基础架构平台专家P15JVM内存调整参数整理-othera:-XX:MaxTenuringThreshold指定一个object在经历了n次younggc后转移到oldgeneration区,在linux64的java6下默认值是15,此参数对于throughputcollector无效,如:-XX:MaxTenuringThreshold=31b:-XX:+DisableExplicitGC禁止java程序中的fullgc,如System.gc()的调用c:-XX:+UseFastAccessorMethods原始类型get,set方法的优化d:-XX:+PrintGCDetails打应垃圾收集的情况如:[GC15610.466:[ParNew:229689K-20221K(235968K),0.0194460secs]1159829K-953935K(2070976K),0.0196420secs]e:-XX:+PrintGCTimeStamps打应垃圾收集的时间情况,如:[Times:user=0.09sys=0.00,real=0.02secs]f:-XX:+PrintGCApplicationStoppedTime打应垃圾收集时,系统的停顿时间,如:Totaltimeforwhichapplicationthreadswerestopped:0.0225920seconds-XX:+UseCompressedOops压缩指针64位机器,JDK1.6支持提纲ContentsJVM介绍及调优JVM内部结构介绍JVM命令及工具介绍Apusic应用服务器调优线程调优及Http相关参数调优数据源调优其他相关参数基础架构平台专家P17Jdk命令用Jps获取当前运行中JVM的pid用jstack获取当前JVM中的线程信息jstackpid***.txt基础架构平台专家命令用Jps获取当前运行中JVM的pid号用jstack获取当前JVM中的线程信息jstackpid***.txt基础架构平台专家命令用jmap获取dump信息jmap–histopid***.txtjmap-dump:format=b,file=heap.binpid基础架构平台专家P20JCONSOLEJMXURLservice:jmx:ii