tomcat安装在公网IP为x.x.x.x的服务器上
tomcat安装
第一步,下载server-jre-8u202-linux-x64.tar.gz和apache-tomcat-8.5.55.tar.gz安装包。
登录地址:https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html下载server-jre-8u202-linux-x64.tar.gz安装包。登录地址:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.55/bin下载apache-tomcat-8.5.55.tar.gz安装包。然后使用WinSCP将安装包上传到/usr/local/src文件夹中。也可以使用wget命令下载。
命令:cd /usr/local/src
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.55/bin/apache-tomcat-8.5.55.tar.gz
第二步,解压server-jre-8u202-linux-x64.tar.gz和apache-tomcat-8.5.55.tar.gz安装包。
命令:cd /usr/local/src
tar -zxvf server-jre-8u202-linux-x64.tar.gz -C /usr/local
tar -zxvf apache-tomcat-8.5.55.tar.gz -C/usr/local
cd /usr/local
mv apache-tomcat-8.5.55 tomcat1
第三步,将/usr/local/jdk1.8.0_202和/usr/local/tomcat1的所有者及所属组改为tomcat。
命令:useradd tomcat
chown -R tomcat:tomcat /usr/local/jdk1.8.0_202
chown -R tomcat:tomcat /usr/local/tomcat1
第四步,配置环境变量。
配置/etc/profile文件,在文件添加下面的代码:
export JAVA_HOME=/usr/local/jdk1.8.0_202
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:$JRE_HOME/lib/rt.jar:$JRE_HOME/lib/ext:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
# 刷新profile文件
命令:source /etc/profile
第五步,测试server-jre是否配置成功。
# 查看jdk版本
命令:java -version
若结果显示server-jre的版本,则说明server-jre配置成功。
tomcat配置及启动
第一步,编辑配置/usr/local/tomcat1中的server.xml文件。
进入文件夹/usr/local/tomcat1/conf,server.xml编辑完成后代码如下:
<?xml version="1.0" encoding="UTF-8"?>
...
<Server port="8105" shutdown="SHUTDOWN"> #port设置为8105
...
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="800" minSpareThreads="100" prestartminSpareThreads="true" maxQueueSize="100"/>
...
<Connector executor="tomcatThreadPool" port="8081" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"
maxPostSize="-1" maxHttpHeaderSize ="102400"/>
<!-- A "Connector" using the shared thread pool-->
...
</Server>
第二步,编辑配置/usr/local/tomcat1/bin下的 catalina.sh文件。
为防止出错,先提前备份一下,然后在第117行添加下面的代码:
JAVA_HOME=/usr/local/jdk1.8.0_202
JRE_HOME=/usr/local/jdk1.8.0_202/jre
JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m"
把UMASK="0027"修改为UMASK="0022"。
最后赋予权限。
命令:cd /usr/local/tomcat1/bin
chmod a+x catalina.sh
第三步,测试tomcat1是否配置成功。
命令:cd /usr/local/tomcat1/bin
./startup.sh
netstat -ntl | grep 8081
若结果成功显示“Tomcat started”,则说明tomcat成功启动。
若tomcat启动失败,则可能是启动时使用的端口被其他应用程序占用了,可以查看端口被哪个应用程序占用了。
命令:lsof -i:端口号
ps -ef | grep 进程号PID
tomcat成功启动后,然后直接根据http://x.x.x.x:8081(http://x.x.x.x/index.jsp)在本地浏览器访问。
若页面成功显示“Apache Tomcat/8.5.55”,则说明tomcat配置成功。
若发现访问不到,则可以查看防火墙是否开着。
# 查看防火墙的状态
命令:systemctl status firewalld.service
# 临时将防火墙关闭
命令:systemctl stop firewalld.service
# 关闭tomcat
命令:./shutdown.sh
第四步,复制tomcat1文件夹7次并都粘贴在/usr/local/文件夹中。
cp -pr /usr/local/tomcat1 /usr/local/tomcat2
cp -pr /usr/local/tomcat1 /usr/local/tomcat3
cp -pr /usr/local/tomcat1 /usr/local/tomcat4
cp -pr /usr/local/tomcat1 /usr/local/tomcat5
cp -pr /usr/local/tomcat1 /usr/local/tomcat6
cp -pr /usr/local/tomcat1 /usr/local/tomcat7
cp -pr /usr/local/tomcat1 /usr/local/tomcat8
第五步,重复“tomcat配置及启动”中的第一、二和三步。
在配置文件server.xml中更改端口号,编辑配置 catalina.sh文件。
关机重启,tomcat会自动启动
第一步,编辑配置/etc/rc.d/rc.local,在/etc/rc.d/rc.local文件最后一行另起一行,添加下面的代码:
export JAVA_HOME=/usr/local/jdk1.8.0_202
export JRE_HOME=$JAVA_HOME/jre
/usr/local/tomcat1/bin/startup.sh start
/usr/local/tomcat2/bin/startup.sh start
/usr/local/tomcat3/bin/startup.sh start
/usr/local/tomcat4/bin/startup.sh start
/usr/local/tomcat5/bin/startup.sh start
/usr/local/tomcat6/bin/startup.sh start
/usr/local/tomcat7/bin/startup.sh start
/usr/local/tomcat8/bin/startup.sh start
第二步,编辑rc.local文件为可执行。
命令:chmod +x /etc/rc.d/rc.local
第三步,重启服务器,然后查看tomcat是否启动。
命令:reboot 或 shutdown -r now 或 shutdown -r 10 或 init 6
lsof -i:[tomcat端口号]
netstat -ntl | grep [tomcat端口号]
不进入tomcat根目录即可进行相应的操作
第一步,进入/etc/rc.d/init.d文件夹,新建文件,命名为tomcat,并在文件中编写脚本。文件的脚本如下:
#!/bin/bash
#
# tomcat startup script for the Tomcat server
#
#
# chkconfig: 2345 80 20
# description: start the tomcat deamon
#
# Source function library
. /etc/rc.d/init.d/functions
prog=tomcat
case "$1" in
start)
echo "Starting Tomcat1..."
/usr/local/tomcat1/bin/startup.sh
echo "Starting Tomcat2..."
/usr/local/tomcat2/bin/startup.sh
echo "Starting Tomcat3..."
/usr/local/tomcat3/bin/startup.sh
echo "Starting Tomcat4..."
/usr/local/tomcat4/bin/startup.sh
echo "Starting Tomcat5..."
/usr/local/tomcat5/bin/startup.sh
echo "Starting Tomcat6..."
/usr/local/tomcat6/bin/startup.sh
echo "Starting Tomcat7..."
/usr/local/tomcat7/bin/startup.sh
echo "Starting Tomcat8..."
/usr/local/tomcat8/bin/startup.sh
;;
stop)
echo "Stopping Tomcat1..."
/usr/local/tomcat1/bin/shutdown.sh
echo "Stopping Tomcat2..."
/usr/local/tomcat2/bin/shutdown.sh
echo "Stopping Tomcat3..."
/usr/local/tomcat3/bin/shutdown.sh
echo "Stopping Tomcat4..."
/usr/local/tomcat4/bin/shutdown.sh
echo "Stopping Tomcat5..."
/usr/local/tomcat5/bin/shutdown.sh
echo "Stopping Tomcat6..."
/usr/local/tomcat6/bin/shutdown.sh
echo "Stopping Tomcat7..."
/usr/local/tomcat7/bin/shutdown.sh
echo "Stopping Tomcat8..."
/usr/local/tomcat8/bin/shutdown.sh
;;
res)
echo "Stopping Tomcat1..."
/usr/local/tomcat1/bin/shutdown.sh
echo "Stopping Tomcat2..."
/usr/local/tomcat2/bin/shutdown.sh
echo "Stopping Tomcat3..."
/usr/local/tomcat3/bin/shutdown.sh
echo "Stopping Tomcat4..."
/usr/local/tomcat4/bin/shutdown.sh
echo "Stopping Tomcat5..."
/usr/local/tomcat5/bin/shutdown.sh
echo "Stopping Tomcat6..."
/usr/local/tomcat6/bin/shutdown.sh
echo "Stopping Tomcat7..."
/usr/local/tomcat7/bin/shutdown.sh
echo "Stopping Tomcat8..."
/usr/local/tomcat8/bin/shutdown.sh
sleep 10
echo "Starting Tomcat1..."
/usr/local/tomcat1/bin/startup.sh
echo "Starting Tomcat2..."
/usr/local/tomcat2/bin/startup.sh
echo "Starting Tomcat3..."
/usr/local/tomcat3/bin/startup.sh
echo "Starting Tomcat4..."
/usr/local/tomcat4/bin/startup.sh
echo "Starting Tomcat5..."
/usr/local/tomcat5/bin/startup.sh
echo "Starting Tomcat6..."
/usr/local/tomcat6/bin/startup.sh
echo "Starting Tomcat7..."
/usr/local/tomcat7/bin/startup.sh
echo "Starting Tomcat8..."
/usr/local/tomcat8/bin/startup.sh
;;
*)
echo "Usage: $prog {start|stop|res}"
;;
esac
exit 0
第二步,添加执行权限并设置开机自启。
命令 :chmod +x /etc/init.d/tomcat
# 设置开机自启
命令:chkconfig --add tomcat
chkconfig tomcat on
# 检查tomcat命令
命令:service tomcat
/etc/init.d/tomcat: line 20: [: =: unary operator expected
Usage: tomcat {start|stop|restart|reload|status|help}
第三步,检查一下脚本是否有用。
命令:/sbin/chkconfig tomcat on
sudo /sbin/chkconfig --list tomcat
如果结果显示“tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off”,则说明脚本文件有用。
第四步,nginx启动、关闭以及重启命令。
命令:service tomcat start
service tomcat stop
service tomcat restart
第五步,再新建8个文件,分别命名为tomcat1、tomcat2、...和tomcat8,重复执行第一、二、三和四步。
设置tomcat服务启动速度非常快
有五种解决办法:
1)在tomcat环境中解决
可以通过配置JRE使用非阻塞的Entropy Source。
在/usr/local/tomcat1/bin/catalina.sh中加入这么一行:
-Djava.security.egd=file:/dev/./urandom
加入后再启动tomcat,启动速度就非常快。
2)在JVM环境中解决
打开$JAVA_HOME/jre/lib/security/java.security文件,找到
“securerandom.source=file:/dev/urandom”,并把它修改成
“securerandom.source=file:/dev/./urandom”。(对所有使用JVM的应用生效)修改之后启动tomcat,启动速度就非常快。
3)增大/dev/random的熵池
# 可以查看现在的熵池大小(45)
cat /proc/sys/kernel/random/entropy_avail
# 要增大熵池的值,CPU要支持DRNG特性,可以充分利用硬件来提高熵池产生的速度,查看服务器是否支持DRNG特性
cat /proc/cpuinfo | grep rdrand
# 安装rng-tools(安装rngd服务(熵服务))
yum -y install rng-tools
systemctl enable rngd
systemctl start rngd
# 查看熵池的值是否会变大(3097)
cat /proc/sys/kernel/random/entropy_avail
安装rng-tools之后可以直接使用random生成随机数,而不需要修改$JAVA_HOME/jre/lib/security/java.security中的生成随机数。
最后启动tomcat, 会发现启动速度就非常快。
如果CPU不支持DRNG特性或者使用虚拟机,可以使用/dev/unrandom来模拟。
cp /usr/lib/systemd/system/rngd.service /etc/systemd/system
编辑配置/etc/systemd/system/rngd.service文件,设置“ExecStart=/sbin/rngd -f -r /dev/urandom”。
systemctl daemon-reload #重新载入服务
systemctl restart rngd #重启服务
# 可以查看现在的熵池大小(基本上在3000左右)
cat /proc/sys/kernel/random/entropy_avail
# 可以测试随机数的生成速度
watch -n 1 cat /proc/sys/kernel/random/entropy_avail
#重新打开一个shell,用dd命令测试随机数(5秒产生了40960个随机数,/proc/sys/kernel/random/entropy_avail会有剧烈的变化,所有随机数产生之后它又会保持在3000左右)
dd if=/dev/random of=random.dat count=40960
最好选择第三种方式,熵池不仅仅tomcat使用,Linux下的所有应用程序产生随机数都会用到这个,因此不仅仅是tomcat可能被阻塞。根治的方法应该是通过rngd提高随机数生成的速度。
如何重现故障
systemctl stop rngd #停止rngd服务(如果你有启动rngd)
# 查看当前熵池的大小
cat /proc/sys/kernel/random/entropy_avail
# 强制消费1024个随机数,系统会长时间没有反应,然后直接Ctrl+C
head -c 1024 /dev/random
# 再次查看熵池的大小,保证它的大小在尽可能的小
cat /proc/sys/kernel/random/entropy_avail
最后启动tomcat,会发现会长时间等待。
4)tomcat 需要部署的web应用程序太多
tomcat启动比较慢是因为它需要部署的web应用程序太多,但是其中有些应用程序是不需要的,可以将不需要的webapps删除,然后再进行发布。如果想并行启动多个web应用程序且服务器是多核的,那么可以设置Host的属性startStopThreads值设置大于1,但不超过内核数。
5)tomcat启动内存不足
如果项目比较大,使用默认的参数去启动的tomcat是很有可能内存不足的,这样的话,需要设置JVM,将内存调整,JVM的最大值和最小值建议是不要相差太大(最好一致)。
在启动脚本/usr/local/tomcat1/bin/catalina.sh文件加上:
JAVA_OPTS='-server -Xms1024m -Xmx1024m'
具体的内存大小,可以根据业务调整。