二、Tomcat调优、开机自启和日志切割
1、 编译安装openssl、apr、apr-util和tomcat-native:
(1)编译安装openssl(下载地址https://www.openssl.org/source/):
# yum -y install openssl-devel
# tar -xf openssl-1.0.2p.tar.gz -C /usr/src
# cd /usr/src/openssl-1.0.2p
# ./config --prefix=/usr/local/openssl -fPIC
# make && make install
(2)编译安装apr(Apache Portable Runtime,下载地址http://apr.apache.org/download.cgi):
# tar -xf apr-1.6.5.tar.gz -C /usr/src
# cd /usr/src/apr-1.6.5
# vim configure --> 将30993行的$RM "$cfgfile"用#号注释
# ./configure --prefix=/usr/local/apr --enable-profile --enable-threads --with-sendfile
# make && make install
# vim /etc/profile.d/apr.sh
export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
# . /etc/profile.d/apr.sh
# echo $LD_LIBRARY_PATH
(3)编译安装apr-util:
# yum -y install expat-devel
# tar -xf apr-util-1.6.1.tar.gz -C /usr/src
# cd /usr/src/apr-util-1.6.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-openssl=/usr/local/openssl
# make && make install
(4)编译安装tomcat-native:
# cd /usr/local/tomcat/bin
# tar -zxf tomcat-native.tar.gz
# cd tomcat-native-1.2.17-src/native
# ./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/latest --with-ssl=/usr/local/openssl
# make && make install
备注:Tomcat的BIO、NIO和APR模式
BIO:blocking I/O,阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。默认的模式,性能最差,没有经过任何优化处理和支持。
NIO:non-blocking I/O,Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API。拥有比传统I/O操作(bio)更好的并发运行性能。
APR:Apache Portable Runtime,Apache可移植运行时库,Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。从操作系统级别来解决异步的IO问题,大幅度的提高性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。要让Tomcat以apr模式来运行,必须安装apr和native。
2、 安全方面的配置:# catalina.sh stop # ps -ef | grep java # rm -rf /usr/local/tomcat/webapps/examples
3、 JVM性能方面的配置:
# cd /usr/local/tomcat/bin
# cp catalina.sh catalina.sh.bak
# vim catalina.sh,在首行#!/bin/sh下新增如下代码
JAVA_OPTS='-server -Xms2048m -Xmx2048m'
备注:内存大小按实际情况调整
Ø -Xmx:Java Heap最大值,默认值为物理内存的1/4
Ø -Xms:Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值
4、 HTTP连接器并发性能方面的配置:
# cd /usr/local/tomcat/conf
# cp server.xml server.xml.bak
# vim server.xml,将如下代码修改为
-->
备注:Connector中可以使用如下指令
Ø address:指定连接器监听的地址,默认为所有地址,即0.0.0.0
Ø port:监听的端口,默认为0
Ø protocol:连接器使用的协议为HTTP/1.1,定义AJP协议时通常为AJP/1.3,包括3种模式:BIO(默认采用的模型)、NIO(内置的模型)和APR(调用APR库来实现操作系统级别控制)
Ø connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟
Ø redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口
Ø URIEncoding:可以使Tomcat解析含有中文名文件的URL
Ø enableLookups:禁用DNS查询以获取客户端的主机名,默认为true
Ø minSpareThreads:最小空闲线程数,任何情况都会存活的线程数,即便超过了最大空闲时间,也不会被回收
Ø maxThreads:处理请求的最大线程数,即最大并发连接数,超过则将请求放入等待队列中进行排队,等待空闲线程,默认值为200
Ø acceptCount:设置等待队列的最大长度,当线程数达到maxThreads时,后续请求会被放入一个等待队列,这个acceptCount就是这个队列的大小,如果这个队列也满了,则返回connection refused(请求被拒绝),默认值为100
5、 开机自启:
# vim /etc/rc.d/rc.local,末尾新增如下代码:
export JAVA_HOME=/usr/java/latest
/usr/local/tomcat/bin/startup.sh
# chmod +x /etc/rc.d/rc.local
6、 调优结果测试:
# catalina.sh configtest
# catalina.sh start
# ss -tunlp
# ps -ef | grep java
浏览器中访问http://192.168.1.145:8080
7、 日志文件按天切割:
默认情况下,Tomcat的catalina.out日志文件是不会像其它日志一样,按日期进行分割,而是全部输出写入到一个catalina.out
# cd /usr/local/tomcat/logs
# ls -lh
# tar -zxf cronolog-1.6.2.tar.gz -C /usr/src
# cd /usr/src/cronolog-1.6.2
# ./configure --prefix=/usr/local/cronolog
# make && make install
# vim /usr/local/tomcat/bin/catalina.sh:
将第211行CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out修改成:
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out
删除第440行touch "$CATALINA_OUT"
将第453行和第463行org.apache.catalina.startup.Bootstrap "$@" start \修改成:
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
将第454行和第464行>> "$CATALINA_OUT" 2>&1 "&"修改成:
|/usr/local/cronolog/sbin/cronolog "$CATALINA_OUT" >> /dev/null &
# catalina.sh stop
# catalina.sh configtest
# catalina.sh start
# ps -ef | grep tomcat
可以只保留180天内的日志文件,每天凌晨1点执行自动清理:# crontab -e
0 1 * * * /bin/find /usr/local/tomcat/logs/ -type f -name "catalina.*.out" -mtime +180 | xargs rm -rf