Tomcat--性能调优

Tomcat性能调优

Tomcat性能测试

对于系统性能,用户最直观的感受就是系统的加载和操作时间,即用户执行某项操作的耗时。从更为专业的角度讲,性能测试可以从以下两个指标量化:

  1. 响应时间:如上所述,为执行某个操作耗时。大多数情况下,需要针对同一个操作测试多次,以获取操作的平均响应时间;
  2. 吞吐量:即在给定的时间内,系统支持的事务数量,计算单位为TPS;

通常情况下,我们需要借助一些自动化工具来进行性能测试,因为手动模拟大量用户的并发访问几乎是不可能的,而现在市面上也有很多的性能测试工具可以使用,如:ApacheBench、WCAT、WebPolygraph、LoadRunner、ApacheJMeter等。

JVM参数调优

Tomcat是一款Java应用,那么JVM的配置便与其运行性能密切相关,而JVM优化的重点则集中在内存分配和GC策略的调整上,因为内存会直接影响服务的运行效率和吞吐量,JVM垃圾回收机制则不同程度地导致程序运行中断。可以根据应用程序的特点,选择不同的垃圾回收策略,调整JVM垃圾回收策略,可以极大减少垃圾回收次数,提升垃圾回收效率,改善程序运行性能。

参数|参数作用|优化建议|
-server|启动server,以服务端模式运行|服务端建议开启|
-Xms|最小堆内存|建议与-Xmx设置相同|
-Xmx|最大堆内存|建议设置为可用内存的80%|
-XX:MetaspaceSize|元空间初始值||
-XX:MaxMetaspaceSize|元空间最大内存|默认无限|
-XX:MaxNewSize|新生代最大内存|默认16M|
-XX:NewRatio|年轻代和老年代大小比值,取值整数,默认为2|不建议修改|
-XX:SurvivorRatio|Eden区与Survivor区大小比值,取值整数,默认为3|不建议修改|

查看堆内存使用情况:

jmap -heap 进程id

GC策略

JVM垃圾回收性能有以下两个主要指标:

  • 吞吐量:工作时间(排除GC时间)占总时间的百分比,工作时间并不仅是程序的运行时间,还包含内存分配时间;
  • 暂停时间:测试时间段内,由垃圾回收导致的应用程序停止响应次数/时间;

在Sun公司推出的HotspotJVM中,包含以下几种不同类型的垃圾收集器 :

垃圾收集器 含义说明
串行收集器( Serial Collector ) 采用单线程执行所有的垃圾回收工作,适用于单核CPU服务 器,无法利用多核硬件的优势
并行收集器( Parallel Collector ) 又称为吞吐量收集器,以并行的方式执行年轻代的垃圾回收 ,该方式可以显著降低垃圾回收的开销(指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态)。适用于多处理器或多线程硬件上运行的数据量较大的应用
并发收集器( Concurrent Collector ) 以并发的方式执行大部分垃圾回收工作,以缩短垃圾回收的暂停时间。适用于那些响应时间优先于吞吐量的应用,因为该收集器虽然最小化了 暂停时间(指用户线程与垃圾收集线程同时执行,但不一定是并行的,可能会交替进行),但是 会降低应用程序的性能
CMs收集器( Concurrent Mark Sweep collector ) 并发标记清除收集器,适用于那些更愿意缩短垃圾回收暂停时间并 且负担的起与垃圾回收共享处理器资源的应用
G1收集器( Garbage一First Garbage Collector ) 适用于大容量内存的多核服务器,可以在满足垃圾回收暂停时间目标的同时 ,以最大可能性实现高吞吐量(JDK1.7之后)

不同的应用程序,对于垃圾回收会有不同的需求,JVM会根据运行的平台、服务器资源配置情况选择合适的垃圾收集器、对内存大小及运行时编译器。如果无法满足需求,参考以下准则:

  1. 程序数据量小,选择串行收集器
  2. 应用程序运行在单核处理器上且没有暂停时间要求,可交由JVM自行选择或选择串行收集器
  3. 如果考虑应用程序的峰值性能,没有暂停时间要求,可以选择并行收集器
  4. 如果应用程序的响应时间比整体吞吐量更重要,可以选择并发收集器

在这里插入图片描述

查看Tomcat中的默认的垃圾收集器:

如果为远程连接,需要在tоmсаt/bіn/саtаlіnа. ѕh配置中,假如如下配置:

JAVA_OPTS=" -Djava.rmi.server.hostname=192.168.192.138 -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.rmi.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

如果为本地连接,直接使用jconsole连接:

在这里插入图片描述

CG参数:

参数 描述
-XX:+UseSerialGC 启用串行收集器
-XX:+UseParallelGC 启用并行垃圾收集器,配置了该选项,那么-XX:+UseParallel0ldGc默认启用
-XX:+UseParallel0ldGC FullGC采用并行收集,默认禁用。如果设置了-XX:+UseParallelGc则自动启用
-XX:+UseParNewGC 年轻代采用并行收集器,如果设置了-XX:+UseConcMarkSweepGc选项,自动启用
-XX:ParallelGCThreads 年轻代及老年代垃圾回收使用的线程数。默认值依赖于JVM使用的CPU个数
-
XX:+UseCoEcMarkSweepGC
对于老年代,启用CMS垃圾收集器。当并行收集 器无法满足应用的延迟需求是,推荐使用CMs或G1收集器。
启用该选项后,一XX:+UseParNewGC自动启用。
-XX:+UseG1GC 启用G1收集器。 G1是服务器类型的收集器,用于多核、大内存的机器。它在保持高吞吐量的情况下,高概率满足Gc暂停时间的目标。

可以在测试的时候,将JVM参数调整之后,将GC信息打印出来,便于我们进行参数调整提供依据,具体参数如下:

选项 描述
-XX:+PrintGC 打印每次Gc的信息
-XX:+PrintsCApplicationConcurrentTime 打印最后一次暂停之后所经过的时间,即响应并发执行的时间
-XX:+Pr intGCAppl icationStoppedTime 打印Gc时应用暂停时间
-XX:+PrintGCDateStamps 打印每次Gc的日期戳
-XX:+PrintGCDetails打印每次Gc的详细信息
-XX:+PrintGCTaskT imeStamps 打印每个cc工作线程任务的时间戳
-XX:+Pr intGCTimeStamps 打印每次Gc的时间戳

在bin/ catalina. sh的脚本中,追加如下配置:

JAVA_OPTs="-XX:+UseConcMarkSweepGC -XX:+PrintGCDetails"

在这里插入图片描述

Tomcat配置调优

调整tomcat/conf/server.xml中关于链接器的配置可以提升应用服务器的性能

参数 说明
maxConnections 最大连接数,当到达该值后,服务器接收但不会处理更多请求,额外的请求将会阻塞直接连接数低于maxConnections。可通过ulimit -a查看服务器限制。对于CPU要求更高(计算型)时,建议不要配置过大;对于CPU要求不是特别高时,建议配置在2000左右
maxThreads 最大线程数,需要根据服务器的硬件情况,进行一个合理的设置
acceptCount 最大排队等待数,当服务器接收的请求数量达到maxCounnections,此时Tomcat会将后面的请求,存放在任务队列中进行排序,acceptCount指的就是任务队列中排队等待的请求数。一台Tomcat的最大请求处理数量,是maxConnections+acceptCount
发布了892 篇原创文章 · 获赞 2314 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/cold___play/article/details/105173730