Bootstrap

中间件基础运维笔记

中间件

环境配置

1. jdk安装配置

卸载openjdk

# 查询系统安装的jdk
rpm -qa|grep jdk

# 卸载openjdk
rpm -e --nodeps 文件名
或
yum -y remove 文件名

安装jdk1.8

# 上传解压 jdk 安装包
tar -zxvf jdk-8u341-linux-x64.tar.gz

# 配置 Java 环境变量
vi /etc/profile
# 文件尾行追加以下内容
export JAVA_HOME=/opt/jdk1.8.0_341
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

# 使生效
source /etc/profile
# 验证 Java 版本
java -version

weblogic

1. 启动

bash /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin/startWebLogic.sh

# 登录控制台
浏览器输入:http://192.168.93.135:7001/console

2. 分发部署应用

  • 部署 - 安装 - 上载文件 - 选择文件 - 持续下一步至完成
  • 激活更改 - 启动部署 - 测试访问

3. 创建集群

# 配置 AdminServer 后台运行
cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain
nohup ./startWebLogic.sh &

# 创建集群
- 控制台新建集群cluster:左侧“环境”--> 集群 --> 右侧“新建”--> 修改集群名称为“cluster”--> 确定 --> 
左上方“激活更改”

# 新建服务器 Server-1、Server-2并加入集群
左侧“环境”--> 服务器 --> 右侧“新建”--> 修改服务器名称、服务器监听地址、服务器监听端口,并将此服 
务器设置为属于集群cluster的成员 --> 下一步 --> 完成 --> 左上方“激活更改”

# 配置 Server-1 后台运行(Server-2同理)
cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin
./startManagedWebLogic.sh Server-1 t3://127.0.0.1:7001
# 配置免密登录
mkdir /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/servers/Server-1/security
vi servers/Server-1/security/boot.properties
- username=weblogic 
- password=weblogic@123
# 后台运行命令
nohup ./startManagedWebLogic.sh Server-1 t3://127.0.0.1:7001 >> Server-1.log &

# 配置选择部署到所有服务器

nginx负载均衡

1. 安装nginx

# 安装启动nginx
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm \
&& yum install -y nginx \
&& systemctl start nginx.service \
&& systemctl enable nginx.service


# 查询Nginx默认目录
whereis nginx
(1) Nginx配置路径【常用】:/etc/nginx/
(2) PID目录:/var/run/nginx.pid
(3) 错误日志:/var/log/nginx/error.log
(4) 访问日志:/var/log/nginx/access.log
(5) 默认站点目录:/usr/share/nginx/html
事实上,只需知道Nginx配置路径,其他路径均可在/etc/nginx/nginx.conf 以及/etc/nginx/conf.d/default.conf 中查询到。

# 查看Nginx版本:
nginx -v 

# 查看Nginx安装目录
rpm -ql nginx

2. 增加 upstream 配置

vim /etc/nginx/conf.d/weblogic.conf
# 填写
upstream backend {
        server server-1ip:8001;
        server server-2ip:8002;
    }

server {
        listen    8080;
        location / {
        proxy_pass http://backend;
        }
}

# 增加配置后,重载配置
nginx -s reload

使用 proxy 服务的地址与监听端口访问服务,`http://192.168.93.132:8080/hello-world/`

如出现 503 类似的服务端报错,查看每台服务器的 SELINUX 是否关闭

# 查看命令。返回 Enforcing 表示开启中,需要关闭
getenforce 
- Enforcing
# 永久关闭命令
setenforce 0 && sed -i 's/enforcing/disabled/g' /etc/selinux/config

weblogic性能调优方法

1. 增加 JVM 内存分配

vim /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin/setDomainEnv.sh

# 修改 java 分配的默认内存,内存设置根据服务器可用资源分配

if [ "${JAVA_VENDOR}" = "Sun" ] ; then
        WLS_MEM_ARGS_64BIT="-Xms1024m -Xmx1024m"
        export WLS_MEM_ARGS_64BIT
        WLS_MEM_ARGS_32BIT="-Xms1024m -Xmx1024m"
        export WLS_MEM_ARGS_32BIT
else
        WLS_MEM_ARGS_64BIT="-Xms1024m -Xmx1024m"
        export WLS_MEM_ARGS_64BIT
        WLS_MEM_ARGS_32BIT="-Xms1024m -Xmx1024m"
        export WLS_MEM_ARGS_32BIT
fi

MEM_MAX_PERM_SIZE_64BIT="-XX:MaxPermSize=1024m"
MEM_MAX_PERM_SIZE_32BIT="-XX:MaxPermSize=1024m"

2. 增加 CPU 线程数

方法一、在启动命令后增加线程

bash /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin/startWebLogic.sh 
-Dweblogic.threadpool.MinPoolSize=100 -Dweblogic.threadpool.MaxPoolSize=100

方法二、修改配置文件config.xml

# 修改/home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/config/config.xml文件
<server>
<name>AdminServer</name>
<self-tuning-thread-pool-size-min>400</self-tuning-thread-pool-size-min>
<self-tuning-thread-pool-size-max>400</self-tuning-thread-pool-size-max>
<listen-address/>
</server>

# 重启生效,出现问题的话
ulimit -a

3. 查看线程及内存

jps -mlv

4. 后台运行

nohup 启动文件 &

# 关闭服务
kill -9 <主程序 pid> 
# 或者关闭脚本
/home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin stopWebLogic.sh

5. 配置免密

创建密钥文件

# 创建密钥目录 
mkdir -p /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/security 
# 创建密钥文件 
vi servers/AdminServer/security/boot.properties

# 文件内容
username=weblogic 
password=weblogic@123

# 启动
bash /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/startWebLogic .sh

tomcat

1. 安装及部署

解压安装

# 上传并解压
tar -zxvf apache-tomcat-9.0.65.tar.gz

# 启动
cd /opt/apache-tomcat-9.0.65/
bin/startup.sh

# 客户端访问 tomcat ,默认访问 webapps/ROOT 目录下的应用程序,
# 经测试,部署war包的话需要清空webapps,并将war包放在webapps目录下

# 清空 webapps 目录下文件
cd /opt/apache-tomcat-9.0.65/ 
rm -rf webapps/*

# 部署应用分成两种情况
1. 上传测试应用war包,部署至 tomcat 的 webapps 目录下

2. 直接创建html文件,需要放在webapps/ROOT 目录下
mkdir webapps/ROOT


# 去掉productName 这层路径,修改server.xml文件
vim /opt/apache-tomcat-9.0.65/conf/server.xml
加上
<Context path="" docBase="jenkins" reloadable="true"></Context>
#docBase要改成你的项目目录。
#path为虚拟路径,访问时的路径,注意:不是根目录的,如果是其他路径比如"/test"一定要加"/"" debug建议设置为0
#reloadable设置为true
![server](/Users/renle/Documents/运行培训/笔记/中间件/server.png)

# 重启服务
bin/shutdown.sh
bin/startup.sh

# 访问测试应用地址,查看应用是否部署成功

yum安装

# 安装Tomcat
yum -y install tomcat
# 查看Tomcat是否安装成功
rpm -q tomcat

# 配置环境变量
Tomcat默认安装路径/usr/share/tomcat/

在/etc/profile配置文件中加入Tomcat环境变量
CATALINA_BASE=/usr/share/tomcat
CATALINA_HOME=/usr/share/tomcat
export JAVA_HOME PATH CLASSPATH CATALINA_BASE CATALINA_HOME

# 更改Tomcat在启动时使用的Java选项
在JAVA_OPTS行添加。 随意改变Xmx和MaxPermSize值,这些设置会影响Tomcat会使用多少内存:
JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Xmx512m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC"

# 保存并关闭profile文件,执行如下命令生效
source /etc/profile

# 使用如下命令查看Tomcat变量
echo $CATALINA_BASE
echo $CATALINA_HOME

# 安装Tomcat管理包
1. 安装Tomcat根页面(tomcat-webapps)和Tomcat Web应用程序管理器和Virtual Host Manager(tomcat-admin-webapps)

yum install -y tomcat-webapps tomcat-admin-webapps

2. 安装在线文档(可选)

yum install -y tomcat-docs-webapp tomcat-javadoc

安装完成后,检查/usr/share/tomcat/webapps目录是否存在如下文件夹


# 配置Tomcat Web管理界面
1. 修改tomcat-users.xml的文件

vim /usr/share/tomcat/conf/tomcat-users.xml

添加:
<role rolename="manager"/>   
<role rolename="manager-gui"/>   
<role rolename="admin"/>   
<role rolename="admin-gui"/>   
<user username="admin" password="admin" roles="admin-gui,admin,manager-gui,manager"/> 

# 重启Tomcat服务
systemctl restart tomcat


# 客户端访问 tomcat ,默认访问 webapps/ROOT 目录下的应用程序,
# 经测试,部署war包的话需要清空webapps,并将war包放在webapps目录下

# 清空 webapps 目录下文件
cd /opt/apache-tomcat-9.0.65/ 
rm -rf webapps/*

# 部署应用分成两种情况
1. 上传测试应用war包,部署至 tomcat 的 webapps 目录下

2. 直接创建html文件,需要放在webapps/ROOT 目录下
mkdir webapps/ROOT

# 重启Tomcat服务
systemctl restart tomcat

# 访问测试应用地址,查看应用是否部署成功


# 去掉productName 这层路径,修改server.xml文件
vim /usr/share/tomcat/conf/server.xml

加上
<Context path="" docBase="jenkins" reloadable="true"></Context>
#docBase要改成你的项目目录。
#path为虚拟路径,访问时的路径,注意:不是根目录的,如果是其他路径比如"/test"一定要加"/"" debug建议设置为0
#reloadable设置为true
![server](/Users/renle/Documents/运行培训/笔记/中间件/server.png)

# 重启Tomcat服务
systemctl restart tomcat


# 启动Tomcat和无法访问原因(防火墙端口)
# 永久开放8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent 

# 重启防火墙
systemctl restart firewalld.service

2. tomcat目录

子目录说明
bin命令中心(启动命令,关闭命令……)
conf配置中心(端口号,内存大小……)
libTomcat 的库文件。Tomcat 运行时需要的 jar 包所在的目录。
logs存放日志文件。
temp存储临时产生的文件,即缓存。
webapps存放项目的文件,web 应用放置到此目录下浏览器可以直接访问。
work编译以后的 class 文件。

bin

bin 目录用来存放 Tomcat 命令,主要分为两大类,一类是以.sh结尾的 Linux 命令,另一类是以.bat结尾的 Windows 命令。很多环境变量都在此处设置,例如 JDK 路径、Tomcat 路径等。
# 常用的 Tomcat 命令:
startup.sh/startup.bat:用来启动 Tomcat;
shutdown.sh/shutdown.bat:用来关闭 Tomcat;
catalina.bat/ catalina.bat:用来设置 Tomcat 的内存。

conf

conf 目录主要是用来存放 Tomcat 的配置文件.
# 常用到的几个文件:
server.xml 用来设置域名、IP、端口号、默认加载的项目、请求编码等;
context.xml 用来配置数据源等;
tomcat-users.xml 用来配置和管理 Tomcat 的用户与权限;
web.xml 可以设置 Tomcat 支持的文件类型;
在 Catalina 目录下可以设置默认加载的项目。 

lib

lib 目录主要用来存放 Tomcat 运行需要加载的 jar 包。

logs

logs 目录用来存放 Tomcat 在运行过程中产生的日志文件,清空该目录中的文件不会对 Tomcat 的运行带来影响。

在 Windows 系统中,控制台的输出日志在 catalina.xxxx-xx-xx.log 文件中;
在 Linux 系统中,控制台的输出日志在 catalina.out 文件中,localhost_access_log.xxxx-xx-xx.txt:服务访问记录

temp

temp 目录用来存放 Tomcat 在运行过程中产生的临时文件

**webapps **

webapps 目录用来存放应用程序(也就是通常所说的网站),当 Tomcat 启动时会去加载 webapps 目录下的应用程序,我们编写的 Servlet 程序就可以放在这里。Tomcat 允许以文件夹、war 包、jar 包的形式发布应用。

work

work 目录用来存放 Tomcat 在运行时的编译文件(也即 class 字节码文件),例如 JSP 编译后的文件。清空 work 目录,然后重启 Tomcat,可以达到清除缓存的作用。

3. tomcat配置文件

简介

server.xml:Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息;
web.xml:遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息;
context.xml:所有host的默认配置信息;
logging.properties:日志相关配置;
tomcat-users.xml:Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力,以安全模式启动Tomcat会使用这个配置
catalina.properties:Tomcat内部package的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置;
jaspic-providers.xml:用户认证配置文件

server.xml

<!-- port: 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;
     shutdown:发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;
     使用方式:telnet localhost 8005, 输入SHUTDOWN即可关闭tomcat   
  
     如果你不配置这两个属性,Tomcat的这种关闭机制还是会运行的。你不想暴露这种关闭机制的
     话,可以将端口设置成poer=-1,shutdown设置成一个复杂的字符串,比如shutdown="xscdeww#12"
 -->
<Server port="8005" shutdown="SHUTDOWN">
  <!-- 默认配置的Listener -->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <!-- 应用于整个服务器的JNDI映射,此可以避免每个Web应用程序都需要在各自的web.xml创建,这在web应用程序以WAR的形式存在时尤为有用。
   -->
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <!-- Service是多个Connector和单个Container的组合。Container是一个抽象的概念,由Engine, Realm,Valve和Hosts主组组成。
       在server.xml配置文件中可以同时配置多个Service标签
   -->
  <Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named threadpools
     --> 
    <!-- 默认情况下,每个连接器connector会使用自己创建的线程池,我们也可以配置多个线程池让连接器共享-->
    <!-- 如果想让连接器connector组件使用这个线程池,需要在连接器组件中配置executor属性.
         另外,Executor元素的配置应该放在Connector配置的前面,这样才会先加载Executor的配置。
        
         Executor的主要属性包括:
          - name:该线程池的名称id
          - maxThreads:线程池中最大活跃线程数,默认值200(Tomcat7和8都是)
          - minSpareThreads:线程池中保持的最小线程数,最小值是25
          - maxIdleTime:线程空闲的最大时间,当空闲超过该值时关闭线程(除非线程数小于
                         minSpareThreads),单位是ms,默认值60000(1分钟)
          - daemon:是否后台线程,默认值true
          - threadPriority:线程优先级,默认值5
          - namePrefix:线程名字的前缀,线程池中线程名字为:namePrefix+线程编号
     -->
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
              maxThreads="150" minSpareThreads="4"/>
    
    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <!-- Connector是Tomcat中请求接收和响应返回的端点,Tomcat中支持HTTP、AJP和APR等协议。
         下面的配置定义了一个支持Http协议的连接器,监听8080端口

         Connector组件支持以下组件的配置:
          - address:指定连接器监听的地址,默认为所有地址,即0.0.0.0;
          - port:监听的端口,默认为0;
          - protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;
          - connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
          - maxThreads:支持的最大并发连接数,默认为200;
          - redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,
                          则转发至此属性定义的端口;
          - enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;
                           默认为true;
          - acceptCount:设置等待队列的最大长度;
          - executor:指定共享的线程池组件;
     -->
    <Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000"
               redirectPort="8443"
               executor="tomcatThreadPool" />
    
    <!-- 下面是进行支持Https的配置 -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443
         This connector uses the NIO implementation. The default
         SSLImplementation will depend on the presence of the APR/native
         library and the useOpenSSL attribute of the
         AprLifecycleListener.
         Either JSSE or OpenSSL style configuration may be used regardless of
         the SSLImplementation selected. JSSE style configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->
    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
         This connector uses the APR/native implementation which always uses
         OpenSSL for TLS.
         Either JSSE or OpenSSL style configuration may be used. OpenSSL style
         configuration is used below.
    -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->
    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <!--
    <Connector protocol="AJP/1.3"
               address="::1"
               port="8009"
               redirectPort="8443" />
    -->
      
      
    <!-- Tomcat内部有4个级别的容器,分别是Engine、Host、Context和Wrapper。Engine代表全局Servlet引擎,每个Service组件只能包含一个Engine容器组件,但Engine组件可以包含若干Host容器组件 
     -->
    <!-- An Engine represents the entry point (within Catalina) that processes
         every request.  The Engine implementation for Tomcat stand alone
         analyzes the HTTP headers included with the request, and passes them
         on to the appropriate Host (virtual host).
         Documentation at /docs/config/engine.html -->
      
    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="localhost">

      <!--For clustering, please take a look at documentation at:
          /docs/cluster-howto.html  (simple how to)
          /docs/config/cluster.html (reference documentation) -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Use the LockOutRealm to prevent attempts to guess user passwords
           via a brute-force attack -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <!-- This Realm uses the UserDatabase configured in the global JNDI
             resources under the key "UserDatabase".  Any edits
             that are performed against this UserDatabase are immediately
             available for use by the Realm.  -->
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <!-- 配置虚拟主机,可以配置多个-->
      <!-- 一个Host下面可以有多个Context,也就是可以部署多个Webapp应用,一个webapp对应一个Context,用不同的ContextPath区分 
      -->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <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" />

        <!-- Host下面也可以配置Context相关的配置 -->
      </Host>
    </Engine>
  </Service>
</Server>

web.xml

Tomcat的conf目录下面的web.xml配置文件和我们平时应用中WEB-INF下面的配置web.xml功能一致,只是Tomcat下面的这个配置文件用来配置所有应用通用的配置,对所用应用生效。

配置默认servlet,Jsp处理器和一些其他的filter;
为所有的Web应用程序提供包括MIME映射;
并设置欢迎页面。

</web-app> 
   <!-- 默认的Servlet,如果请求没有匹配到任何一个Sevlet,就是匹配到这个Servlet -->
   <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

   <!-- 对JSP页面的支持 --> 
   <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>
 
    <!-- 对ssi功能的至此 -->
    <servlet>
        <servlet-name>ssi</servlet-name>
        <servlet-class>
          org.apache.catalina.ssi.SSIServlet
        </servlet-class>
        <init-param>
          <param-name>buffered</param-name>
          <param-value>1</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>false</param-value>
        </init-param>
        <load-on-startup>4</load-on-startup>
    </servlet>
    
    <!-- 对cgi请求的支持 -->
    <servlet>
        <servlet-name>cgi</servlet-name>
        <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
        <init-param>
          <param-name>cgiPathPrefix</param-name>
          <param-value>WEB-INF/cgi</param-value>
        </init-param>
        <load-on-startup>5</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ssi</servlet-name>
        <url-pattern>*.shtml</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>cgi</servlet-name>
        <url-pattern>/cgi-bin/*</url-pattern>
    </servlet-mapping>

    
    <!-- 一些内置的Filter,Filter默认是不打开的,要打开的话需要去Tomcat的web.xml中放开注释-->
    <!-- 另外,这个这些Filter默认都是可以配置很多初始化参数的,具体参数请参考原始配置中的注释,这边
         没有贴出来
     -->
     <!-- A filter that sets various security related HTTP Response headers.   -->
     <filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <async-supported>true</async-supported>
     </filter>
     
      <!-- A filter that sets character encoding that is used to decode 
           parameters in a POST request (对post请求生效)
      -->
    <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>
    
    <!-- 对于bad request,直接返回 -->
    <filter>
        <filter-name>failedRequestFilter</filter-name>
        <filter-class>
          org.apache.catalina.filters.FailedRequestFilter
        </filter-class>
        <async-supported>true</async-supported>
    </filter>
 
    <!-- 实现ssi功能 -->
    <!-- 上面还提供了实现ssi功能的servlet,不要同时开启两个,只要使用其中一个就行了 -->
    <filter>
        <filter-name>ssi</filter-name>
        <filter-class>
          org.apache.catalina.ssi.SSIFilter
        </filter-class>
        <init-param>
          <param-name>contentType</param-name>
          <param-value>text/x-server-parsed-html(;.*)?</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>false</param-value>
        </init-param>
    </filter>
  
    <filter-mapping>
        <filter-name>httpHeaderSecurity</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>
    <filter-mapping>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>failedRequestFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>ssi</filter-name>
        <url-pattern>*.shtml</url-pattern>
    </filter-mapping>

    <!-- 默认的session过期时间-->
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <!-- mime的mapping信息-->
    ...
    <mime-mapping>
        <extension>123</extension>
        <mime-type>application/vnd.lotus-1-2-3</mime-type>
    </mime-mapping>
    ...
    <!-- 配置欢迎页面 -->
	<welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

4. 其他配置

端口操作

# 查看tomcat占用端口
1、先查看tomcat的进程号

ps -ef | grep tomcat*

后面带*号,是为了查看多个tomcat,例如tomcat6,tomcat7。

2、根据进程号查看端口号

netstat -anop | grep 15161


3、此外,还可以通过端口号,查看其所属的进程号相关信息

lsof -i:8080


# 修改默认端口
修改 /conf/server.xml文件
<Connector port="8080" protocol="HTTP/1.1" 
               maxThreads="150" connectionTimeout="20000" 
               redirectPort="8443" />

修改线程

Executor代表了一个线程池,可以在Tomcat组件之间共享。也可以直接修改< Connector></Connector>里的参数。

# 要想使用线程池,首先需要在 Service标签中配置。
1. 修改 /conf/server.xml文件
<Service name="Catalina">  
  
  <Executor name="tomcatThreadPool"   
         namePrefix="catalina-exec-"   
         maxThreads="1000"   
         minSpareThreads="100"  
         maxIdleTime="60000"  
         maxQueueSize="Integer.MAX_VALUE"  
         prestartminSpareThreads="true"  
         threadPriority="5"  
         className="org.apache.catalina.core.StandardThreadExecutor"/>  
  ...
  
 2. 在Connector中指定线程池
   <Connector executor="tomcatThreadPool"  
              
              
 3. 参数详解
name
注:线程池名称,用于 Connector中指定。

namePrefix
注:所创建的每个线程的名称前缀,一个单独的线程名称为 namePrefix+threadNumber。

maxThreads
注:池中最大线程数。

minSpareThreads
注:活跃线程数,也就是核心池线程数,这些线程不会被销毁,会一直存在。

maxIdleTime
注:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。

maxQueueSize
注:在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要更改,否则会有请求不会被处理的情况发生。

prestartminSpareThreads
注:启动线程池时是否启动 minSpareThreads部分线程。默认值为false,即不启动。

threadPriority
注:线程池中线程优先级,默认值为5,值从1到10。

className
注:线程池实现类,未指定情况下,默认实现类为org.apache.catalina.core.StandardThreadExecutor。如果想使用自定义线程池首先需要实现 org.apache.catalina.Executor接口。

内存操作

# 查看内存配置
1、jps:查看本地正在运行的java进程和进程ID(pid)

2、jinfo pid,查看指定pid的所有JVM信息

  1)jinfo -flags pid 查询虚拟机运行参数信息。

  2)jinfo -flag name pid,查询具体参数信息,如jinfo -flag UseSerialGC 42324,查看是否启用UseSerialGC

3、jmap

  1)jmap -heap pid:输出堆内存设置和使用情况(JDK11使用jhsdb jmap --heap --pid pid)

  2)jmap -histo pid:输出heap的直方图,包括类名,对象数量,对象占用大小

  3)jmap -histo:live pid:同上,只输出存活对象信息

  4)jmap -clstats pid:输出加载类信息

  5)jmap -help:jmap命令帮助信息



# 修改内存配置

1. 打开在Tomcat的安装目录的bin文件的catalina.sh文件
vim tomcat目录/bin/catalina.sh

2. 在注释后面加上如下脚本:
#JAVA_OPTS='-Xms512m -Xmx1024m' 是设置Tomcat使用的内存的大小.
JAVA_OPTS='-Xms512m -Xmx1024m'
#XX:PermSize=64M -XX:MaxPermSize=256m 指定类空间(用于加载类)的内存大小 
JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=64M -XX:MaxPermSize=256m"

3. 重启服务
;