文档章节

Tomcat服务器性能优化

陶邦仁
 陶邦仁
发布于 2012/11/06 23:37
字数 4146
阅读 2145
收藏 35

一、概述

本文档主要介绍了Tomcat的性能调优的原理和方法。可作为公司技术人员为客户Tomcat系统调优的技术指南,也可以提供给客户的技术人员作为他们性能调优的指导手册。

二、调优分类

由于Tomcat的运行依赖于JVM,从虚拟机的角度我们把Tomcat的调整分为外部环境调优和自身调优两类来描述。

1. 外部环境调优

调整Tomcat运行环境的操作系统参数和运行Tomcat的java虚拟机参数。

(a) JAVA虚拟机性能优化

Tomcat需要依赖Java虚拟机运行。根据客户选用的主机的操作系统选择对应的 JDK的版本。无论哪个厂商的JDK,都建议使用最新的版本。 虚拟机可通过命令行的方式改变虚拟机使用内存的大小。如下表所示有两个参数用来设置虚拟机使用内存的大小。

-Xms<size> :JVM初始化堆的大小

-Xmx<size> :JVM堆的最大值

Tomcat默认可以使用的内存较小,在较大型的应用项目中,这点内存是不够的,需要调大。

Windows下,在文件tomcat_home/bin/catalina.bat,Unix下,在文件tomcat_home/bin/catalina.sh的前面,增加如下设置:

JAVA_OPTS=‘-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】

需要把这个两个参数值调大。例如:JAVA_OPTS='-Xms256m -Xmx512m' ,表示初始化内存为256MB,可以使用的最大内存为512MB。

另外需要考虑的是Java提供的垃圾回收机制。虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。收集垃圾可以接受的速度与应用有关,应该通过分析实际的垃圾收集的时间和频率来调整。

如果堆的空间很大,那么完全垃圾收集(FULL GC)就会很慢,但是频度会降低。如果在客户系统中把堆的大小和内存的需要一致,完全收集就很快,但是会更加频繁。调整堆大小的的目的是最小化垃圾收集的时间,以在特定的时间内最大化处理客户的请求。对于SUN和HP等虚拟机,推荐将最小堆大小和最大堆大小设置为同一值,因为这样可以避免浪费用于时常调整堆大小所需的 VM 资源。

当然,客户系统如果用到IBM虚拟机,要特别的注意设置-Xms和-Xmx一样大小会耽误垃圾回收的开始直到堆满,这样第一次垃圾回收就会变成非常昂贵的操作。推荐把-Xms设置为应用所需的最小值,这样会产生高效的垃圾回收。

(b) 操作系统性能优化

以客户系统为HP-UX为例。

HP系统中对Tomcat有影响的参数:

max_thread_proc: 一个进程所能创建的线程的最大数

nkthread: 在系统上同时允许的核心线程的最大数

如果在输出里看到消息:java.lang.OutOfMemoryError: unable to create new native thread,则说明名为 max_thread_proc 的 Unix 内核设置过小。max_thread_proc 是单个进程中的最大线程数。 它必须大到能够容纳 Java 应用程序中的所有