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”