Tomcat是一个轻量级的Web服务器。通常情况下,我们使用它运行Java代码。它也可以被称为Jsp、serlvet的容器。目前主流的有三个版本,Tomcat-7.0、Tomcat-8.5、Tomcat-9.0 。这里我们对Tomcat-9.0版本进行安装与调优。
1、Tomcat-9.0安装包下载
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.30/bin/apache-tomcat-9.0.30.tar.gz
2、JDK1.8安装
Tomcat作为一个web容器,运行需要Jdk环境。同时,我们使用的Tomcat-9.0版本需要Jdk1.8版本的,在上一篇文章 《Centos安装数据库读写分离中间件Mycat》中有介绍JDK1.8的安装方式,需要安装的可以查看。这里不多做叙述。
3、cronolog日志切割工具安装
cronolog是一个日志切割工具,可以将Tomcat的catalina.out日志按天进行切割,并输出到指定的位置。安装配置比较方便,下载完成后,解压编译一下即可使用。 该地址可能会访问不通。原因不详,你应该有办法。得到安装包后进行解压,然后进入解压后的目录,按以下顺序执行命令即可。
wget http://cronolog.org/download/cronolog-1.6.2.tar.gz
tar xf cronolog-1.6.2.tar.gz
cd cronolog-1.6.2
./configure
make && make install
编译完成后,会在默认路径 /usr/local/sbin/ 下生成两个文件,其中cronolog为可执行文件,给予执行权限。
chmod +x /usr/local/sbin/cronolog
Tomcat安装方式比较简单,解压后更改一下配置参数即可使用。如果想要运行多个实例,只需要更改不同的端口,日志输出路径即可。需要注意的是,有三个端口需要更改(8005、8080、8009)。
1、解压安装
tar xf apache-tomcat-9.0.30.tar.gz
mv apache-tomcat-9.0.30 tomcat
2、建立Tomcat用户
Tomcat服务启动使用root用户不安全,我们给它建立个tomcat启动用户。同时,需要注意的是将启动涉及到的目录都要赋予tomcat用户权限。
useradd tomcat
chown -R tomcat.tomcat /data/tomcat/
chown -R tomcat.tomcat /data/logs/ ##日志输出目录
2、修改日志输出路径
cd tomcat
vim bin/catalina.sh
将 logs目录换成你需要输出的目录,我将它输出到 /data/logs 里。
3、启动服务
以tomcat用户启动服务
su - tomcat -c "/data/tomcat/bin/start.sh"
4、访问测试
在/data/tomcat/webapps/ROOT/目录下写个index.html测试页面,请求一下。
vim /data/tomcat/webapps/ROOT/index.html
#
<h1> Test Page </h1>
:wq
curl http://127.0.0.1:8080
不长篇大论,只介绍几种实用的优化方式,线上环境实际使用的。
1、启动优化
Tomcat启动慢是通病,网上有多种提高启动速度的方式。我一直使用的是增加熵池随机数的方式。效果比较明显,安装rng-tools服务来增加熵池随机数。
yum -y install rng-tools
systemctl start rngd
systemctl status rngd
2、启动内存分配
还是找到tomcat/bin/catalina.sh 启动程序,在程序里添加以下内容即可。具体参数,按自己服务器配置设置。如果单跑tomcat服务,可适当提高。
vim /data/tomcat/bin/catalina.sh
#
set JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m
:wq
参数解析:
-Xms:占用系统的最小内存
-Xmx:占用系统的最大内存
-XX:PermSize:最小栈内存大小
-XX:MaxPermSize:最大栈内存大小。
3、高并发配置优化
通常情况下,tomcat默认开启的等待线程为10个,最大线程为200个。显然无法满足并发情况。在这里,对其配置文件server.xml进行优化。有两种参数调整方式。
配置文件位置:/data/tomcat/conf/server.xml
(1)Executor 线程池配置(默认是注释的),然后Connector段引用定义的线程池Name。
(2)Connector段直接配置。
我们直接使用第二种方法,在connnector段进行配置。
增加参数:
protocol=“org.apache.coyote.http11.Http11NioProtocol” ##工作模式为Nio模式,高效的处理并发。
maxThreads=“500” ##最大线程开启。
acceptCount=“1000” ##指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。
4、ab测试比较
如果服务器CPU性能较好,可适当增加最大线程数,但由于linux内核原因,对于线程数支持有限。所以开启1000线程以到极限。CPU上下文切换速率会受影响。500左右为较好的工作状态,再高就要考虑集群部署了。下篇文章,我们来讲解Nginx反代tomcat集群架构部署。
流水文档 仅供参考