Tomcat配置基线模板

1.安装环境

1.1 用户和组

操作系统用户和组

安装tomcat用户和组规划如下:

组:

组名 组ID 描述
tomcat 1052 应用用户组,其中YYYY根据应用定

用户:

用户 用户ID 主属组 组集 主目录 备注
tomcat 1052 tomcat /home/tomcat Tomcat及apache安装启停用户

2.java虚拟机内存设置

缺省java虚拟机内存只有512MB,不适合运行在生产系统,需要更改设置,如无特殊需求可以将其提高到5GB。

AIX平台:

AIX平台JDK1.6版本J9,permsize设置无效,故如下:

JAVA_OPTS=”-Xms5120m -Xmx5120m -Xmn1024m”

HP平台

HP-UX使用64位大内存模式设置:

JAVA_OPTS=” -d64 -Xms5120m -Xmx5120m -Xmn1024m -XX:PermSize=1024m -XX:MaxPermSize=1024m”

Linux平台:

JAVA_OPTS=”-Xms5120m -Xmx5120m -Xmn1024m -XX:PermSize=1024m -XX:MaxPermSize=1024m”

Xss参数可以设置每个线程的最大栈大小,AIX 64位默认为512k,HP最小线程栈为264KB

如果内存足够,可以设置为8GB,new 2GB, perm 1.5GB

3. tomcat监听端口设置

  • 无apache单个tomcat环境,监听端口地址范围推荐为80
  • 多个tomcat环境+apache集群,监听端口地址范围推荐为8080-8090

4. 系统限制ulimit设置

4.1永久性修改

查看系统ulimit设置

ulimit -a

修改/etc/security/limits.conf文件,并重新登陆
  • soft nofile 10240

  • hard nofile 10240

  • soft core unlimited

  • hard core unlimited

4.2 临时性修改

查看系统ulimit设置:

ulimit -a

设置打开文件句柄数限制,大于1024:

ulimit -n 10240

core文件大小限制,设置为无限制:

ulimit -c unlimited

5. JVM启动选项调整

5.1 禁止System.gc()

为避免应用程序主动通过调用System.gc()发生full GC,在java启动项中增加下面参数:

-XX:+DisableExplicitGC

5.2 收集GC日志

在java启动项中添加如下参数:

-Xloggc:$CATALINA_HOME/logs/gc.$$.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

5.3 发生OOM错误是生成Heapdump文件

在java启动项中添加如下参数:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs/heapdump.$$.hprof

5.4 JVM Crash指定hs_err_pid文件生成位置

在JVM启动项中添加如下参数:

-XX:ErrorFile=$CATALINA_HOME/logs/hs_err_pid$$.log

5.5 线程池调整

在server.xml添加如下参数:

说明:

maxThreads=”X” 表示最多同时处理X个连接;

minSpareThreads=”X” 初始化X个连接;

maxSpareThreads=”X” 表示如果最多可以有X个线程,一旦超过X个,则会关闭不在需要的线程;

acceptCount=”X” 当同时连接的人数达到maxThreads时,还可以排队,队列大小为X.超过X就不处理;

connectionTimeout=”X” 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。默认可设置为20000毫秒。

5.6 IO调整

在server.xml中添加如下参数:

实现对Tomcat的IO切换。

1:同步阻塞IO(JAVA BIO) 同步并阻塞,服务器实现模式为一个连接一个线程(one connection one thread 想想都觉得恐怖,线程可是非常宝贵的资源),当然可以通过线程池机制改善.

2:JAVA NIO:又分为同步非阻塞IO,异步阻塞IO 与BIO最大的区别one request one thread.可以复用同一个线程处理多个connection(多路复用).

3:,异步非阻塞IO(Java NIO2又叫AIO) 主要与NIO的区别主要是操作系统的底层区别.可以做个比喻:比作快递,NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次),然后自己去取快递;AIO就是快递员送货上门了(不用关注快递进度)。

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解.

NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持.

AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持.

5.7 修改参数存放的同一位置

以上所说的内存大小、垃圾回收参数在startup.sh文件中修改。修改位置如下所示(注意位置要在exec “$PRGDIR”/“$EXECUTABLE” start “$@”这一行上面):

-Xloggc:$CATALINA_HOME/logs/gc.$$.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs/heapdump.$$.hprof

-XX:ErrorFile=$CATALINA_HOME/logs/hs_err_pid$$.log

JAVA_OPTS=”-Xms5120m -Xmx5120m -XX:PermSize=1024m -XX:MaxPermSize=1024m”