Tomcat服务部署及优化

52 阅读8分钟

Tomcat的端口和主要目录说明

Tomcat端口

客户端和tomcat进行连接时使用:

  • 8080端口:http的默认端口
  • 8443端口:https的默认端口

8005端口: shutdown用于关闭tomcat进程。tomcat监听的关闭端口,就是说这个端口负责监听关闭tomcat的请求。

8009端口: 用于转发,负责和其他http服务器建立连接。但一般不用,因为tomcat一般放在后端服务器,其他服务器转发给tomcat。

Tomcat主要目录

ls /usr/local/tomcat/

目录说明
bin存放启动和关闭Tomcat 的脚本文件,如catalina.sh、startup.sh、shutdown.sh
conf存放Tomcat 服务器的各种配置文件,如主配置文件server.xml 和应用默认的部署描述文件web.xml
lib存放Tomcat运行需要的库文件的jar 包,一般不作任何改动
logs存放Tomcat 执行时的日志
temp存放Tomcat 运行时产生的文件
webapps存放Tomcat默认的web应用项目资源的目录
workTomcat 的工作目录,存放web应用代码生成和编译文件

磁盘文件 和访问的url对应关系

tomcat:
/usr/local/tomcat/webapps     
 
/usr/local/tomcat/webapps/ROOT/index.jsp  -----> http://www.yxp.com/index.jsp
/usr/local/tomcat/webapps/test/index.jsp  -----> http://www.yxp.com/test/index.jsp

Tomcat 部署步骤

在部署 Tomcat 之前必须安装好 jdk,因为Tomcat是采用Java语言编写的,而jdk是java的开发工具,没有jdk,Tomcat是跑不起来的,所以 jdk 是 Tomcat 运行的必要环境。

官网下载JDK的安装包以及Tomcat的安装包:

JDK:www.oracle.com/java/techno…

Tomcat:tomcat.apache.org/

下载并安装 JDK

 1. #关闭防火墙
 systemctl disable --now firewalld
 setenforce 0
  
 2. #将安装 Tomcat 所需软件包传到/opt目录下。
 apache-tomcat-9.0.16.tar.gz 
 jdk-8u201-linux-x64.rpm
  
 3. #切换至/opt下,安装JDK
 cd /opt
 rpm -ivh jdk-8u201-linux-x64.rpm
 ​
 4. #设置JDK环境变量
 #/etc/profiled.d目录下存放着profile文件中调用的变量,所以我们在该目录下新建一个java的变量脚本,让profile调用即可。
 vim /etc/profile.d/java.sh
 export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64    #定义环境变量
 export JRE_HOME=$JAVA_HOME/jre                   #定义环境变量
 export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib  #定义环境变量
 export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH   
 #修改系统变量,将定义的变量加入全局,并且在原先的PATH路径变量前面,因为我们已经有了131版本的JDK,如果放在PATH后面,会优先找到131的JDK文件(linux查找可执行文件是根据PATH变量从左往右查找,找到即停止。
 ​
 source /etc/profile.d/java.sh     #刷新文件,使立即生效
 java -version                     #再次查看JDK版本
 ​
 ​
 --------------------------------小知识-------------------------------------------------------------------
 CLASSPAT :编译、运行Java程序时,JRE会去该变量指定的路径中搜索所需的类(.class)文件。
 JDK :java development kit (java开发工具)
 JRE :java runtime environment (java运行时环境)
 JVM :java virtuak machine (java虚拟机),使java程序可以在多种平台上运行class文件。


部署Tomcat


 1. #安装tomcat
 cd /opt
 tar zxf apache-tomcat-9.0.16.tar.gz    #解压tomcat安装包
 #将解压后的源码包目录拷贝至/usr/local/下并重命名为tomcat
 mv apache-tomcat-9.0.16 /usr/local/tomcat
 ​
 2. ##启动tomcat ##(去bin目录下)
 #后台启动
 /usr/local/tomcat/bin/startup.sh
 或
 /usr/local/tomcat/bin/catalina.sh start
 ​
 #前台启动
 /usr/local/tomcat/bin/catalina.sh run
 ​
 netstat -natp | grep 8080
 ​
 3. #浏览器访问测试
 浏览器访问Tomcat的默认主页 http://192.168.72.70:8080
 ​
 ​
 #启动Tomcat的方法:
 startup.sh          #后台启动tomcat
 catalina.sh start   #后台启动tomcat
 catalina.sh run     #前台启动 tomcat
 #关闭Tomcat的方法:
 shutdown.sh      关闭tomcat
 #查看tomcat是否启动:
 netstat ss ps jps

将tomcat添加到服务

1. #先关闭服务
/usr/local/tomcat/bin/shutdown.sh
 
2. #添加用户设置属主属组
useradd -s /sbin/nologin tomcat
chown tomcat:tomcat tomcat/ -R
 
3. #新建服务文件
vim /etc/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
 
[Service]
Type=forking
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
RestartSec=3
PrivateTmp=true
User=tomcat
Group=tomcat
 
[Install]
WantedBy=multi-user.target
 
4. #重新加载服务,并开启,查看是否成功启动
systemctl daemon-reload
systemctl start tomcat
ss -ntap |grep 8080

Tomcat配置文件

[root@localhost logs]# cd /usr/local/tomcat/conf/
[root@localhost conf]# ll -h
total 216K
drwxr-xr-x. 3 root root 4.0K Oct 24 09:20 Catalina
-rw-------. 1 root root  13K Sep 28  2015 catalina.policy
-rw-------. 1 root root 7.0K Sep 28  2015 catalina.properties
-rw-------. 1 root root 1.6K Sep 28  2015 context.xml
-rw-------. 1 root root 3.4K Sep 28  2015 logging.properties
-rw-------. 1 root root 6.4K Sep 28  2015 server.xml    #主配置文件
-rw-------. 1 root root 1.8K Sep 28  2015 tomcat-users.xml  #Tomcat管理用户配置文件
-rw-------. 1 root root 1.9K Sep 28  2015 tomcat-users.xsd
-rw-------. 1 root root 164K Sep 28  2015 web.xml

使用war包部署web站点


1. #创建一个/data并在里面创建/app1
mkdir /data
cd /data
mkdir app1
cd app1/
 
2. #切换至app1,创建文件test.html 、 test.jsp
vim test.html
<h1> this is test <\h1>
 
vim test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<! DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<%
out.println ("test jsp");
%>
%<br>
<%=request.getRequestURL()%>
</body>
</html>
 
3. #打包,将app1下的所有打包到/opt目录下,包名为app1.war
jar cvf /opt/app1.war *
 
4. #切换至/opt下查看,并拷贝至/usr/local/tomcat/webapps/
cd /opt/
ls
cp app1.war /usr/local/tomcat/webapps/
 
5. #查看拷贝过去的文件
cd /usr/local/tomcat/webapps/
ls
 
6. #在网页测试
http://192.168.59.118:8080/app1/test.jsp
http://192.168.59.118:8080/app1/test.html
 
 
7. #如果想要站点下线,将war包删掉就好了
rm -rf app1.war
 
8. #测试
http://192.168.59.118:8080/app1/test.jsp

tomcat优化

优化主要包括三方面,分别为操作系统优化(内核参数优化)  ,Tomcat配置文件参数优化Java虚拟机(JVM))调优

Tomcat 配置 JVM 参数:

环境规格以 2C4G 为例。

配置添加在 Tomcat 的 bin 目录下 catalina.sh 里,位置在 cygwin=false 前。

 vim /usr/local/tomcat/bin/catalina.sh
 ​
 JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC" 
 cygwin=false
 -server:一定要作为第一个参数,在多个CPU时性能佳
 ​
 -Xms:初始Java初始化堆的大小,是分配JVM的最小内存,cpu性能高时此值应设的大一些
 ​
 -Xmx:最大Java堆的大小,是分配JVM的最大内存,取决于硬件物理内存的大小,建议-Xms与-Xmx设成一样的值,均设为物理内存的一半。其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。
 ​
 -Xmn:新生代的内存大小,官方推荐配置为整个堆的 3/8。
 ----------------------------------------------------
 ●堆区进一步细化分为:新生代、中生代、老生代。
 ●java中每新new一个对象所占用的内存空间就是新生代的空间,当java垃圾回收机制对堆区进行资源回收后,那些新生代中没有被回收的资源将被转移到中生代,中生代的被转移到老生代。
 ●整个JVM堆大小 = 新生代大小 + 老生代大小 + 永久代大小
 ----------------------------------------------------
 ​
 -XX:ParallelGCThreads:配置并行收集器的线程数,即:同时有多少个线程一起进行垃圾回收,此值建议配置与 CPU 数目相等。
 ​
 -XX:PermSize:设置非堆内存初始值,即持久代内存大小,默认是物理内存的1/64
 ​
 -XX:MaxPermSize:最大非堆内存的大小,即最大持久代内存大小,默认是物理内存的1/4
 ----------------------------------------------------
 ●非堆区内存是不会被java垃圾回收机制进行处理的,且最大堆内存与最大非堆内存的和不能超出操作系统的可用内存。
 ●XMXXMS设置一样大,MaxPermSizeMinPermSize设置一样大,这样可以减轻伸缩堆大小带来的压力。
 ----------------------------------------------------
 ​
 -Djava.awt.headless=true:免避在 Linux/Unix 环境下 Web 网页不能正常显示图片
 ​
 -XX:+DisableExplicitGC:禁止调用System.gc(),防止误调用gc方法导致系统的 JVM 大起大落而使系统响应时间严重降低。
 ​
 -XX:+UseParNewGC:对新生代采用多线程并行回收,缩短垃圾收集的时间
 ​
 -XX:+UseConcMarkSweepGC:并发标记清除收集器,它是老年代的收集算法,缩短垃圾收集的时间
 ​
 -XX:+CMSParallelRemarkEnabled:启用并行标记,降低标记停顿
 ​
 -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0:这两个参数默认值就是这样的,表示触发FullGC时压缩堆,优化内存碎片
 ​
 -XX:CMSInitiatingOccupancyFraction=70:在应用程序使用70%完内存后开始CMS垃圾收集。

Tomcat虚拟主机

1. #创建 yxp 和 accp 项目目录和文件
cd /usr/local/tomcat/webapps
mkdir yxp accp
 
2. #创建文件
echo "this is yxp web" > yxp/index.html
echo "this is accp web" > accp/index.html
 
3. #修改主配置文件
vim /usr/local/tomcat/conf/server.xml 
  </Host>
 
        <Host name="www.yxp.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"
              xmlValidation="false" xmlNamespaceAware="false">
              <Context docBase="/usr/local/tomcat/webapps/yxp"
                path="" reloadable="true" />
     </Host>
        <Host name="www.accp.com"  appBase="/usr/local/tomcat/webapps" unpackWARs="true" autoDeploy="true"
              xmlValidation="false" xmlNamespaceAware="false">
              <Context docBase="/usr/local/tomcat/webapps/accp"
                path="" reloadable="true" />
     </Host>
     
 ##Host配置项  
 ● name:主机名。  
 ● appBase:Tomcat程序工作目录,即存放web应用程序的目录;相对路径为webapps,绝对路径为/usr/local/tomcat/webapps。 
 ● unpackWARs:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true。 
 ● autoDeploy:在Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true。 
 ● xmlValidation:是否验证xml文件执行有效性检验的标志 
 ● xmlNamespaceAware:是否启用xml命名空间,设置该值与xmlValidation为true,表示对web.xml文件执行有效性检验  ​  
 ##Context配置项  
 ● docBase:指定相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径。 
 ● path:相对于web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径/。 
 ● reloadable:是否允许重新加载此context相关的Web应用程序的类;默认为false。

    
     
 
 
4. #重启服务
systemctl restart tomcat
 
5. #再开启一台centos虚拟机,更改host文件
192.168.59.118  www.yxp.com  www.accp.com
 
6. #在网页中测试
http://www.accp.com:8080/accp/
http://www.yxp.com:8080/yxp/