之前用的Tomcat8.5就以这个版本描述

一般Java开发的程序都跑在Tomcat中,所以你的系统中要有一个Jdk

环境为Centos7系统,按照文章来肯定没问题

安装jdk

jdk可以使用yum安装也可以tar包安装

查看java选择版本安装

1
yum -y list java*

下面这个网址linux通过wget可以下载jdk,下载后你需要重命名

Jdk

1
2
tar zxf jdk-8u191-linux-x64.tar.gz -C /usr/local/
mv /usr/local/jdk1.8 /usr/local/java

添加环境变量

1
2
3
vim /etc/profile
export PATH=$PATH:/usr/local/java/bin
source /etc/profile 刷新环境变量

安装Tomcat8.5

Tomcat和Java基本相同不多解释

1
2
3
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz
tar zxf apache-tomcat-8.5.37.tar.gz -C /usr/local
mv /usr/local/apache-tomcat-8.5.37 /usr/local/tomcat

添加环境变量

1
2
3
vim /etc/profile
export PATH=$PATH:/usr/local/tomcat/bin
source /etc/profile

安装就完成,这时你输入 catalina.sh start 就可以启动tomcat

优化

简述

  • 安全
    • 把webapps下除ROOT外的目录全部删除,Tomcat有一个用户管理页面就存在这个目录下面基本用不上放着并不安全
  • 模式
    • tomcat有三种运行模式nio bio apr,默认为bio 我们来调整为apr模式
  • 调整熵池
    • 提高熵池可以加快启动速度,有时你会发现启动时好久卡在session这块就是熵池太小的原因
  • Jvm
    • 分配tomcat运行占用内存
  • server.xml
    • 这部分将调整tomcat的配置文件中的线程以及线程池和压缩等参数

1.开启apr模式

1
yum -y install apr-devel openssl-devel

进入你tomcat安装目录

1
2
3
4
cd /usr/local/tomcat/bin
tar zxf tomcat-native-1.2.16.tar.gz
cd tomcat-native-1.2.16-src/native
./configure && make && make install

修改server.xml配置

1
69行定义端口这里HTTP1.1修改成org.apache.coyote.http11.Http11AprProtocol

catalina.sh脚本中
CLASSPATH=下加入

1
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"

重启tomcat可看到http-apr-8080

2.加大熵池

可以查看我们系统默认的

1
cat /proc/sys/kernel/random/entropy_avail

安装熵服务并启动

1
2
3
4
5
6
7
yum install rng-tools
systemctl start rngd
cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
vim /etc/systemd/system/rngd.service 编辑熵服务
ExecStart=/sbin/rngd -f -r /dev/urandom 对照更改
systemctl daemon-reload
systemctl restart rngd

这样你在查看熵大小会很惊讶的

3.Jvm调整

修改catalina.sh,在CLASSPATH=下加入

1
JAVA_OPTS="-server -Xms5000m -Xmx5000m -Xmn512m -XX:+UseG1GC -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps -Xloggc:../logs/gc.log"

Xms 初始化最小内存
Xmx 可使用最大内存
Xms和Xmx调整为相同减少内存频繁上下切换稳定些
Xmn 年轻代内存
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:../logs/gc.log 输出gc日志方便查找问题
-XX:+UseG1GC 开启G1垃圾回收

4.server.xml调整

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  <Executor 
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="600"
minSpareThreads="30"
prestartminSpareThreads="true"
maxIdleTime="60000"
/>

<Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
executor="tomcatThreadPool"
enableLookups="false"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
connectionTimeout="20000"
maxPostSize="-1"
maxHttpHeaderSize="8192"
acceptCount="600"
tcpNoDelay="true"
disableUploadTimeout="true"
redirectPort="8443" />

以上配置对应服务为 Centos7.2/4核16G,生产环境稳定运行

另一个还可以调整log日志的存储位置,防止日志过大妨碍服务运行

系统的Tcp连接数也应去修改,拿aliyun来说默认为2000

根据服务情况去调整,增加并发