linuxsoftware-tomcat

Posted by syboot on 2020-06-29
Estimated Reading Time 9 Minutes
Words 1.9k In Total

linux apache-tomcat-9.0.40

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun
的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现, 因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

添加专用用户

添加一个新用户,用来跑tomcat, 为了后期好管理,形成良好的习惯。

1
2
3
useradd admin
echo admin:新密码|chpasswd
chmod 755 /home/admin

如果有跳板机需要修改文件/etc/security/access.conf 下边代码加在access.conf 文件尾部。

1
+:admin:跳板机IP

安装JDK

JDK 是一种用于构建在 Java 平台上发布的应用程序、Applet 和组件的开发环境,即编写 Java 程序必须使用 JDK,它提供了编译和运行 Java 程序的环境。

我这里下载 gz 包方便后期 复制移植用。 包名 jdk-15.0.1_linux-x64_bin.tar.gz

JAVA 安装目录 JAVAHOME=/usr/java 没有目录就创建。

1
2
3
4
5
6
cp jdk-15.0.1_linux-x64_bin.tar.gz  /usr/java/
cd /usr/java
tar zxf jdk-15.0.1_linux-x64_bin.tar.gz
rm -f jdk-15.0.1_linux-x64_bin.tar.gz
chown root.root /usr/java/ -R
/usr/java/jdk-15.0.1/bin/java -version #查看版本

JDK15 下载页面

添加和修改环境变量

在admin 家目录下添加一个 .bash_profile 用来声明JDK变量 文件内容如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cat  /home/admin/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs
PATH=/usr/java/jdk-15.0.1/bin:$PATH:$HOME/bin
export PATH
export JAVA_HOME=/usr/java/jdk-15.0.1
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
LANG=en_US.UTF-8
unset USERNAME

修改 limits.conf 内容如下。

1
2
3
4
5
6
cat >>/etc/security/limits.conf<<EOF
$USERS hard nofile 1024000
$USERS soft nofile 1024000
$USERS hard nproc 102400
$USERS soft nproc 102400
EOF

安装apache-tomcat-9.0.40

1.下载安装包 apache-tomcat-9.0.40.tar.gz 到 /home/admin/ 下。

tomcat9.0 下载页面

解压 apache-tomcat-9.0.40.tar.gz 到当前目录。

1
2
3
4
5
6
 ln -s apache-tomcat-9.0.40  apache-tomcat
ls /home/admin/

apache-tomcat
apache-tomcat-9.0.40
logs

2.修改 apache-tomcat-9.0.40/bin/catalina.sh 在注释下方, 约125行处添加。以下代码。没有装APR的可以删除 “-D java.library.path=/usr/local/apr/lib”
这段。gc 选项是为了崩溃后排查用。

JAVA_OPTS='-server -Xms4096m -Xmx4096m -Xss256k -XX:+HeapDumpOnOutOfMemoryError -Djava.library.path=/usr/local/apr/lib -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/home/admin/logs/gc.log'

3.添加启动选项 init.d 下添加文件,内容如下。

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
cat /etc/init.d/tomcat_admin

#!/bin/bash
#
# Startup script for the tomcat
#
# chkconfig: 345 95 15
# description: tomcat service script
#
# Source function library.
. /etc/rc.d/init.d/functions

TOMCAT_HOME=/home/admin/apache-tomcat
USER=admin
UIDS=`id -u $USER`
RETVAL=0
PORT=8080
PROG=tomcat

checkjava(){
if [ -z "$JAVA_HOME" ]; then
export JAVA_HOME=/usr/java/jdk-15.0.1
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
fi
}
checkrun(){
ps aux --width=1000 | grep "[o]rg.apache.catalina.startup.Bootstrap start" \
| egrep "$USER" | awk '{printf $2 " "}' \
| wc | awk '{print $2}' >/tmp/tomcat_process_count.txt
read line < /tmp/tomcat_process_count.txt
if [ $line -gt 0 ]; then
RETVAL=1
return $RETVAL
else
RETVAL=0
return $RETVAL
fi
}
start(){
checkjava
checkrun
if [ $RETVAL -eq 0 ]; then
echo -n "Starting $PROG"
su - $USER -c "$TOMCAT_HOME/bin/startup.sh" >/dev/null 2>&1
RETVAL=$?
usleep 100000
[ $RETVAL -ne 0 ] && failure $"$PROG startup"
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$PROG && success $"$PROG startup"
echo
return $RETVAL
else
echo "$PROG already running"
fi
}
stop(){
checkjava
checkrun
if [ $RETVAL -eq 1 ]; then
echo -n "Shutting down tomcat"
su - $USER -c "$TOMCAT_HOME/bin/shutdown.sh" >/dev/null 2>&1
while [ $RETVAL -eq 1 ]; do
sleep 5
PIDS=$(ps aux --width=1000 | grep "org.apache.catalina.startup.Bootstrap start" \
| egrep "$USER" | awk '{printf $2 " "}')
kill -9 $PIDS
checkrun
done
RETVAL=$?
usleep 100000
[ $RETVAL -ne 0 ] && failure $"$PROG stop"
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG && success $"$PROG stop"
echo
else
echo "$PROG is not running"
fi
}
status(){
checkrun
if [ $RETVAL -eq 1 ]; then
echo -n "Tomcat ( pid "
ps aux --width=1000 | grep "org.apache.catalina.startup.Bootstrap start" | egrep "$USER" | awk '{printf $2 " "}'
echo -n ") is running..."
echo
else
echo "Tomcat is stopped"
fi
echo "---------------------------------------------"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
esac
exit 0

然后修改权限

1
chmod  +x  /etc/init.d/tomcat_admin

4.修改 tomcat 主配置文件 server.xml

将源文件里的2处内容替换为新的。 第一处源内容:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

替换内容:

APR 模式下的替换配置
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" enableLookups="false" maxThreads="800" acceptCount="800" acceptorThreadCount="2" connectionTimeout="6000" redirectPort="8443" compression="on" maxKeepAliveRequests="1"/>

NIO 模式下的替换配置
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" enableLookups="false" maxThreads="800" acceptCount="800" acceptorThreadCount="2" connectionTimeout="6000" redirectPort="8443" compression="on" maxKeepAliveRequests="1"/>

9.0以后的协议处理类:

org.apache.coyote.http11.Http11NioProtocol:对应非阻塞 IO
org.apache.coyote.http11.Http11Nio2Protocol:对应异步 IO
org.apache.coyote.http2.Http2Protocol:对应 http2 协议
org.apache.coyote.http11.Http11AprProtocol 对应 APR 从操作系统级别来解决异步的IO问题,大幅度的提高性能。 

logs 格式的替换 第二处源内容:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

替换内容:

	<Valve className="org.apache.catalina.valves.AccessLogValve" directory="${user.home}/logs"
       prefix="ip.access.log." suffix="" buffered="false"
       pattern="%{X-Forwarded-For}i %{CLIENT_IP}i %l %u %t %T %r %s %b '%{Referer}i' %{User-Agent}i" />

APR 的安装

APR (Apache Portable Runtime (APR) based Native library for Tomcat)

Tomcat可以使用Apache Portable Runtime提供出色的可伸缩性,性能以及与本机服务器技术的更好集成。 Apache可移植运行时是一个高度可移植的库,它是Apache HTTP Server 2.x的核心。
APR有许多用途,包括访问高级IO功能(例如sendfile,epoll和OpenSSL),操作系统级别的功能(生成随机数,系统状态等)和本机进程处理(共享内存,NT管道和Unix套接字)。
这些功能使Tomcat成为通用的Web服务器,可以更好地与其他本机Web技术集成,并且从总体上使Java作为完整的Web服务器平台而不是仅以后端为中心的技术更加可行。

1.安装需要三个基础APR包。 分别为:

apr-x.x.x
apr-util-x.x.x
apr-iconv-x.x.x

三个包的版本需要匹配,否则安装失败。新手三个包建议 用yum apt dnf 这类工具来安装。

编译安装:

cd apr-x.x.x

1
2
./configure;make;make install
echo "/usr/local/apr/lib" >> /etc/ld.so.conf

cd apr-util-x.x.x

1
./configure --with-apr=/usr/local/apr;make;make install

cd apr-iconv-x.x.x

1
./configure --with-apr=/usr/local/apr;make;make install

查看配置

1
ldconfig

2.apache-tomcat-9.0.40 中安装 tomcat-native组件

cd /home/admin/apache-tomcat/bin/

tar zvf tomcat-native.tar.gz

cd tomcat-native-1.2.25-src

1
./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk-15.0.1;make;make install

装好了APR, server.xml 中才可以启用APR配置。

启动tomcat

1
service tomcat_admin start

赞助广告

秋冬欧美蓝白撞色条纹弹力打底衫

查看购买上图商品 淘宝店铺 品牌官网

感谢 lxeridium品牌赞助. 品牌官网:http://www.lxeridium.com 

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !