Akemi

Tomcat基础知识

2024/08/21

jdk1.8
tomcat9.0.93
主机网络分配
192.168.10.161 web1
192.168.10.162 web2
192.168.10.163 web3
192.168.10.164 nginx1
192.168.10.165 nginx2

tomcat部署

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
#jdk包
#下载地址https://www.oracle.com/java/technologies/downloads/#java8
tar -xf jdk-8u421-linux-x64.tar.gz
mv jdk1.8.0_421 /usr/local/
/usr/local/jdk1.8.0_421/bin/java -version
#java version "1.8.0_421"
#Java(TM) SE Runtime Environment (build 1.8.0_421-b09)
#Java HotSpot(TM) 64-Bit Server VM (build 25.421-b09, mixed mode)

#tomcat包
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.93/bin/apache-tomcat-9.0.93.tar.gz
tar -xf apache-tomcat-9.0.93.tar.gz
mv apache-tomcat-9.0.93 /usr/local/tomcat
echo "export JAVA_HOME=/usr/local/jdk1.8.0_421" >> /etc/profile
source /etc/profile
#查看tomcat版本信息
cd /usr/local/tomcat/bin/
./version.sh
#Using CATALINA_BASE: /usr/local/tomcat
#Using CATALINA_HOME: /usr/local/tomcat
#Using CATALINA_TMPDIR: /usr/local/tomcat/temp
#Using JRE_HOME: /usr/local/jdk1.8.0_421
#Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
#Using CATALINA_OPTS:
#Server version: Apache Tomcat/9.0.93
#Server built: Aug 2 2024 21:24:59 UTC
#Server number: 9.0.93.0
#OS Name: Linux
#OS Version: 3.10.0-1160.108.1.el7.x86_64
#Architecture: amd64
#JVM Version: 1.8.0_421-b09
#JVM Vendor: Oracle Corporation

#启动tomcat
./startup.sh
ps -ef | grep java | grep -cv "grep"
#1
#查看日志-启动时间
tail /usr/local/tomcat/logs/catalina.out
#查看日志-访问日志
curl localhost:8080
cat /usr/local/tomcat/logs/localhost_access_log.2024-08-20.txt
#0:0:0:0:0:0:0:1 - - [20/Aug/2024:16:23:40 +0800] "GET / HTTP/1.1" 200 11230
#0:0:0:0:0:0:0:1 - - [20/Aug/2024:16:23:44 +0800] "GET / HTTP/1.1" 200 11230

#关闭tomcat
/usr/local/tomcat/bin/shutdown.sh

tomcat文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bin目录:
启停脚本startup.sh,shutdown.sh
修改配置脚本catalina.sh
版本信息version.sh

conf目录:
主配置文件server.xml:
虚拟主机配置 Host
端口(协议)配置 Connector(http协议8080、AJP协议8009)
日志输出格式logging.properties

lib目录:
存放默认的jar包

webapps目录:
放java程序的目录
ROOT目录-java程序默认的根目录

tomcat管理界面

生产环境别用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
默认安装完后,安全功能处于未打开状态
vim /usr/local/tomcat/conf/tomcat-users.xml
添加
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="admin-gui"/>
<role rolename="host-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,host-gui,manager-gui"/>
</tomcat-users>

vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
将allow修改为自己当前网段
allow="192\.168\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

#重启服务
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

#访问ip:8080/status

tomcat 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
26
27
28
29
1.定义关闭tomcat的方法
<Server port="8005" shutdown="SHUTDOWN">
默认情况下通过如下操作就可以关闭tomcat
telnet 127.0.0.1 8005
SHUTDOWN

修改默认关闭方式
<Server port="8123" shutdown="wangsheng">
pkill java
/usr/local/tomcat/bin/startup.sh
netstat -tunlp | grep java
#tcp6 0 0 :::8080 :::* LISTEN 3505/java
#tcp6 0 0 127.0.0.1:8123 :::* LISTEN 3505/java
telnet 127.0.0.1 8123
wangsheng

2.网站根目录
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
name="localhost"网站名称
appBase="webapps"网站根目录
unpackWARs="true"自动解压war包
autoDeploy="true"自动部署
<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" />
directory="logs"日志目录
prefix="localhost_access_log" suffix=".txt"日志前缀后缀
pattern="%h %l %u %t &quot;%r&quot; %s %b"日志格式化方式

tomcat部署界面

简单界面部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#清理所有应用
cd /usr/local/tomcat/webapps/
mv docs examples host-manager manager /tmp
mv ROOT/* /tmp

#拷贝一个war包过来
scp memtest.war 192.168.10.161:/usr/local/tomcat/webapps

#自动解压
cd /usr/local/tomcat/webapps/
ls
#memtest memtest.war ROOT
curl localhost:8080/memtest/meminfo.jsp
JVM memory detail info :<br>
Max memory:1739MB<br>
Total memory:177MB<br>
Free memory:135MB<br>
Available memory can be used is :1697MB<br>

部署jpress

进入jpress下载war包

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
scp jpress-web-newest.war  192.168.10.161:/usr/local/tomcat/webapps
#自动解压
cd /usr/local/tomcat/webapps
ls
#jpress-web-newest jpress-web-newest.war memtest memtest.war ROOT
mv jpress-web-newest.war jpress.war
ls
#jpress jpress.war memtest memtest.war ROOT

浏览器登录http://192.168.10.161:8080/jpress
进行jpress安装

在发布博客后,其文档和图片信息都会存储在数据库中
select * from jpress_content\G
*************************** 1. row ***************************
id: 1
title: wangsheng
text: <p><img src="/jpress/attachment/20240820/b32ec766fc8d47fdaad220b395ec4f5e.png" alt="" width="1080" height="764"></p>
summary: NULL
link_to: NULL
markdown_enable: 0
thumbnail: NULL
module: article
style: NULL
user_id: 1
author: NULL
user_email: NULL
user_ip: NULL
user_agent: NULL
parent_id: NULL
object_id: NULL
order_number: 0
status: normal
vote_up: 0
vote_down: 0
rate: NULL
rate_count: 0
price: 0.00
comment_status: NULL
comment_count: 0
comment_time: NULL
view_count: 0
created: 2024-08-20 20:32:22
modified: 2024-08-20 20:32:22
slug: wangsheng
flag: NULL
lng: NULL
lat: NULL
meta_keywords: NULL
meta_description: NULL
remarks: NULL

tomcat多虚拟主机部署

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
多复制几个tomcat的目录,并修改其端口号
rm -rf /usr/local/tomcat
tar xf /root/apache-tomcat-9.0.93.tar.gz
mv /root/apache-tomcat-9.0.93 /usr/local/tomcat-1
cp -R /usr/local/tomcat-1 /usr/local/tomcat-2
cp -R /usr/local/tomcat-1 /usr/local/tomcat-3

修改tomcat/conf/server.xml文件中的port
vim /usr/local/tomcat-1/conf/server.xml
<Server port="9001" shutdown="SHUTDOWN">
<Connector port="8081" protocol="HTTP/1.1"
vim /usr/local/tomcat-2/conf/server.xml
<Server port="9002" shutdown="SHUTDOWN">
<Connector port="8082" protocol="HTTP/1.1"
vim /usr/local/tomcat-3/conf/server.xml
<Server port="9003" shutdown="SHUTDOWN">
<Connector port="8083" protocol="HTTP/1.1"

#分别启动三个start.sh
/usr/local/tomcat-1/bin/startup.sh
/usr/local/tomcat-2/bin/startup.sh
/usr/local/tomcat-3/bin/startup.sh
ss -tunlp | grep java
tcp LISTEN 0 1 [::ffff:127.0.0.1]:9001 [::]:* users:(("java",pid=11545,fd=67))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:9002 [::]:* users:(("java",pid=11597,fd=67))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:9003 [::]:* users:(("java",pid=11629,fd=67))
tcp LISTEN 0 100 [::]:8080 [::]:* users:(("java",pid=9340,fd=58))
tcp LISTEN 0 100 [::]:8081 [::]:* users:(("java",pid=11545,fd=58))
tcp LISTEN 0 100 [::]:8082 [::]:* users:(("java",pid=11597,fd=58))
tcp LISTEN 0 100 [::]:8083 [::]:* users:(("java",pid=11629,fd=58))
tcp LISTEN 0 1 [::ffff:127.0.0.1]:8123 [::]:* users:(("java",pid=9340,fd=67))

nginx配置tomcat反向代理

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
nginx主机
主配置文件
include /usr/local/nginx/conf/vhost/*.conf
mkdir /usr/local/nginx/conf/vhost
cat > /usr/local/nginx/conf/vhost/tomcat-LB.conf << 'EOF'
upstream java {
server 192.168.10.161:8081;
server 192.168.10.161:8082;
server 192.168.10.161:8083;
}
server {
listen 8080;
server_name www.jpress.com;
location / {
proxy_pass http://java;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

EOF
chown -R www.www /usr/local/nginx
nginx -s reload
curl 192.168.10.164:8080 >> /dev/null 2>&1
echo $?
#0

tomcat优化

1
2
3
4
5
6
7
8
9
10
11
关闭dns解析
vim /usr/local/tomcat-1/conf/server.xml
...
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxParameterCount="1000"
enableLookups='false'
/>
...

jvm调优

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
一般以运行环境的为准
在bin/catalina.sh中添加
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m -XX:MaxPermSize=512m"
server:一定要作为第一个参数,在多个CPU时性能佳
-Xms:初始堆内存Heap大小,使用的最小内存,cpu性能高时此值应设的大一些
-Xmx:初始堆内存heap最大值,使用的最大内存
上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。
-XX:PermSize:设定内存的永久保存区域
-XX:MaxPermSize:设定最大内存的永久保存区域
-XX:MaxNewSize:
-Xss 15120 这使得JBoss每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.
+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。
-Xss:每个线程的Stack大小
-verbose:gc 现实垃圾收集信息
-Xloggc:gc.log 指定垃圾收集日志文件
-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一
-XX:+UseParNewGC :缩短minor收集的时间
-XX:+UseConcMarkSweepGC :缩短major收集的时间

启动慢问题

查看logs/catalina.out发现启动时间过长

1
2
3
4
5
6
find / -name "java.security"
/usr/local/jdk1.8.0_421/jre/lib/security/java.security
禁止随机数生成

sed -n '117p' /usr/local/jdk1.8.0_421/jre/lib/security/java.security
securerandom.source=file:/dev/urandom
CATALOG
  1. 1. tomcat部署
  • tomcat文件
  • tomcat管理界面
  • tomcat server.xml文件
  • tomcat部署界面
  • tomcat多虚拟主机部署
  • nginx配置tomcat反向代理
  • tomcat优化