CentOS系统自带的软件版本比较陈旧,比如Tomcat官方有已经更新到了Tomcat 9,内置的还是Tomcat 7。使用起来十分不便,最近因为项目需求,下载安装了Tomcat 8,特把过程记录如后。
1、安装Java开发运行环境
CentOS 7软件仓库中内置有Java 1.7、1.8,我们可以直接通过yum指令安装。
1.1 安装
# 安装Java 1.8运行环境
sudo yum install java-1.8.0-openjdk
1.2 查看Java版本
java -version
1.3 配置Java环境变量
编辑/etc/profile文件:
sudo vi /etc/profile
在文件的最后加入以下几行,用来设置JAVA_HOME、CLASS_PATH和PATH环境变量:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/
export CLASS_PATH=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
2、安装Tomcat
2.1 下载Tomcat 8.5.34
通过wget指令,下载Tomcat 8.5.34:
wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.34/bin/apache-tomcat-8.5.34.tar.gz
2.2 解压缩
tar -zxvf apache-tomcat-8.5.34.tar.gz
mv apache-tomcat-8.5.34 /opt/
2.3 配置Tomcat运行参数
在tomcat/bin目录下,新建setenv.sh文件,内容如下:
# Set Catalina Base
export CATALINA_BASE=/opt/apache-tomcat-8.5.34/
# Set Tomcat Pid file
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
# Set JAVA Options
JAVA_OPTS="-server -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=1024m -Xms1024M -Xmx2048M -XX:MaxNewSize=256m"
2.4 创建Tomcat用户并授权
getent group tomcat || groupadd -r tomcat
getent passwd tomcat || useradd -r -d /opt -s /bin/nologin -g tomcat tomcat
chown -R tomcat:tomcat /opt/apache-tomcat-8.5.34
2.5 配置Tomcat
在/usr/lib/systemd目录下,新建一个tomcat.service:
vi /usr/lib/systemd/system/tomcat8.service
内容如下(注意把下面的/opt/apache-tomcat-8.5.34/路径修改为你的Tomcat实际安装路径):
[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target
[Service]
Type=forking
PIDFile=/opt/apache-tomcat-8.5.34/bin/tomcat.pid
ExecStart=/opt/apache-tomcat-8.5.34/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
2.6 启用、启动Tomcat服务器
systemctl enable tomcat8 # 启用Tomcat8服务
systemctl start tomcat8 # 启动Tomcat8服务
2.7 打开防火墙
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
3、其他几个小问题
手工下载、解压缩、配置安装的Tomcat,会碰到几个小问题。虽然解决起来不算麻烦,但还是记录下来,方便参考。
3.1 APR 问题
Tomcat启动时提示找不到APR:
info [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
主要是缺少APR、tomcat-native,安装上就可以了:
sudo yum install apr apr-util tomcat-native
另外,APR即时安装了,还是没有启用的。你看看Tomcat的启动日志catalina.out,如果里面有http-nio-8080表示使用的还是NIO模式。我们还需要修改Tomcat安装目录的conf/server.xml文件。
将默认值:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
将默认值:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改为:
<Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />
3.2 启动特别慢问题
Tomcat启动的特别慢,需要60多秒,看了下日志信息,发现有如下提示:
22-Sep-2018 14:48:28.359 WARNING [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [56,009] milliseconds.
主要是tomcat的session id的生成慢了(通过java.security.SecureRandom生成随机数来实现),在setenv.sh文件中加入以下参数,问题解决:
# 使用file:/dev/./urandom, 加快启动速度
export JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"