?萬字長篇超詳細的圖解Tomcat中間件方方面面儲備知識?

      網友投稿 742 2025-03-31

      # LNMT


      ## 1.JAVA簡介

      常見的大型平臺有LNMP、LNMP、LNMT

      JAVA:LNMT(T表示Tomcat容器,放java代碼的)

      Tomcat

      resin

      weblogic(配合oracle數據庫進行使用)

      | 環境 | 處理模型 ? ? ? ? ? ? ? ? ? ? ? | 處理用戶請求區別 ? ? ? ? ? ? ? ?|

      | ---- | ------------------------------ | ------------------------------- |

      | lnmp | epoll(異步)緩存 ? ? ? ? ? ? ?| 通過fastcgi交給php-fpm進行處理 ?|

      | lamp | select(同步)遇到一個處理一個 | lamp通過Apache模塊與php進行溝通 |

      | ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |

      異步類似于有一張表,根據對應的信息找對應的頁面

      同步類似于在一個目錄中,在每一個文件中找想要的信息

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502220826692.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ## 2.Tomcat必備知識

      - [x] tomcat部署

      - [x] 目錄結構

      - [x] 配置tomcat管理功能

      - [x] 部署jpress

      - [ ] tomcat多實例

      - [ ] tomcat監控

      - [ ] tomcat安全優化

      - Tomcat:apache-tomcat

      - 與Tomcat有關的

      - jvm:java virtual machine java虛擬機

      - 解決了代碼的可移植性,1份代碼處處使用

      - 占用內存

      - ? ?jdk java development kit java開發環境

      - java命令

      - jvm環境

      - jdk版本

      - oracle jdk ? ?官網下載

      - openjdk ? ? Linux自帶,開源

      ## 3.Tomcat環境搭建

      服務器 ?192.168.81.210 ?ens33

      ### 3.1.jdk

      ```sh

      #這里的eof使用單引號引起來是為了讓特殊符號也寫入文件

      #PATH 存放命令的路徑,如果不小心改錯了/etc/profile文件那么命令就不能使用了,可以使用命令的絕對路徑來修改/bin/vim /etc/profile改完后exit重新連一下就行

      #安裝jdk之前先把之前rpm裝的刪掉

      cat >>/etc/profile <<'EOF'

      export JAVA_HOME=/application/jdk

      export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

      export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

      EOF

      [root@localhost ~]# mkdir /application

      [root@localhost application]# rz -E

      rz waiting to receive.

      [root@localhost application]# ln -s jdk1.8.0_60/ jdk

      ```

      ### 3.2.Tomcat

      ```sh

      [root@localhost application]# tar xf apache-tomcat-8.5.53.tar.gz

      [root@localhost application]# ln -s apache-tomcat-8.5.53 tomcat

      [root@localhost application]# mkdir soft

      [root@localhost application]# mv *.gz soft/

      [root@localhost application]# /application/tomcat/bin/version.sh

      Using CATALINA_BASE: ? /application/tomcat

      Using CATALINA_HOME: ? /application/tomcat

      Using CATALINA_TMPDIR: /application/tomcat/temp

      Using JRE_HOME: ? ? ? ?/application/jdk

      Using CLASSPATH: ? ? ? /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

      Server version: Apache Tomcat/8.5.53

      Server built: ? Mar 11 2020 10:01:39 UTC

      Server number: ?8.5.53.0

      OS Name: ? ? ? ?Linux

      OS Version: ? ? 3.10.0-957.el7.x86_64

      Architecture: ? amd64

      JVM Version: ? ?1.8.0_60-b27

      JVM Vendor: ? ? Oracle Corporation

      #到此為止Tomcat部署完成

      ```

      ### 3.3.啟動與管理

      - startup.sh ? ?啟動

      - shutdown.sh ? ? 關閉

      - catalina.sh ? ?核心腳本

      ```sh

      #startup.sh最主要的部分

      PRG="$0" ? ? ? ?#腳本名:/application/bin/startup.sh

      PRGDIR=`dirname "$PRG"` ? ? ? ?#dirname用于取出文件所在的路徑,basename用于取出文件名

      EXECUTABLE=catalina.sh

      exec "$PRGDIR"/"$EXECUTABLE" start "$@"

      #相當于 exec /application/tomcat/bin/catalina.sh start ? ? ? ?exec可以省略

      ```

      啟動分析

      ```sh

      [root@localhost tomcat]# ./bin/startup.sh

      Using CATALINA_BASE: ? /application/tomcat

      Using CATALINA_HOME: ? /application/tomcat

      Using CATALINA_TMPDIR: /application/tomcat/temp

      Using JRE_HOME: ? ? ? ?/application/jdk

      Using CLASSPATH: ? ? ? /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

      Tomcat started.

      [root@localhost tomcat]# ss -lnptu | grep java

      tcp ? ?LISTEN ? ? 0 ? ? ?100 ? ? ?:::8080 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? users:(("java",pid=67926,fd=52))

      tcp ? ?LISTEN ? ? 0 ? ? ?1 ? ? ?::ffff:127.0.0.1:8005 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? users:(("java",pid=67926,fd=64))

      [root@localhost tomcat]# ps -ef | grep java

      root ? ? ?67926 ? ? ?1 21 14:31 pts/0 ? ?00:00:04 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start

      /application/jdk/bin/java ? ? #java啟動程序的目錄

      #日志的配置文件

      -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties

      -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

      -Djdk.tls.ephemeralDHKeySize=2048

      -Djava.protocol.handler.pkgs=org.apache.catalina.webresources

      -Dorg.apache.catalina.security.SecurityListener.UMASK=0027

      -Dignore.endorsed.dirs=

      -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

      #Tomcat的部署目錄,多實例在區分時主要看這里

      -Dcatalina.base=/application/tomcat

      -Dcatalina.home=/application/tomcat

      -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap

      start

      ```

      ## 4.Tomcat目錄結構

      ```sh

      [root@localhost tomcat]# ll

      總用量 124

      drwxr-x---. 2 root root ?4096 3月 ?31 14:30 bin

      -rw-r-----. 1 root root 19318 3月 ?11 18:06 BUILDING.txt

      drwx------. 3 root root ? 254 3月 ?31 14:31 conf

      -rw-r-----. 1 root root ?5408 3月 ?11 18:06 CONTRIBUTING.md

      drwxr-x---. 2 root root ?4096 3月 ?31 14:05 lib

      -rw-r-----. 1 root root 57011 3月 ?11 18:06 LICENSE

      drwxr-x---. 2 root root ? 197 3月 ?31 14:31 logs

      -rw-r-----. 1 root root ?1726 3月 ?11 18:06 NOTICE

      -rw-r-----. 1 root root ?3255 3月 ?11 18:06 README.md

      -rw-r-----. 1 root root ?7136 3月 ?11 18:06 RELEASE-NOTES

      -rw-r-----. 1 root root 16262 3月 ?11 18:06 RUNNING.txt

      drwxr-x---. 2 root root ? ?30 3月 ?31 14:05 temp

      drwxr-x---. 7 root root ? ?81 3月 ?11 18:04 webapps

      drwxr-x---. 3 root root ? ?22 3月 ?31 14:31 work

      ```

      - bin tomcat管理命令 startup.sh shutdown.sh catalina.sh

      - catalina.sh是startup.sh和shutdown.sh都會調用的

      - 以后對于Tomcat優化(jvm優化 設置最大內存 最小內存)和配置監控功能

      - conf 配置文件存放目錄

      - server.xml(相當于nginx.conf)都是主配置文件

      - web.xm ?如果要增加插架或者優化都需要修改此文件

      - tomcat-users.xml ? ?tomcat管理端配置文件

      - webapps ? ?tomcat的站點目錄類似于nginx的html

      - log 日志文件存放目錄

      - catalina.out ? ? ? ?tomcat的核心日志文件,存放著從啟動到關閉做的所有操作,這個文件會持續變大持續增加,即使做了日志切割這個文件也不會縮小

      - catalina.2019-09-20.log ?catalina.out切割出來的日志,Linux系統有一個切割工具logrotate,yum裝的程序默認會采用這個進行切割

      - localhost.2020-03-31.log ? ?tomcat的訪問日志和nginx的access.log基本一致

      ```sh

      [root@localhost tomcat]# cat /etc/log

      login.defs ? ? ?logrotate.conf ?logrotate.d/

      [root@localhost tomcat]# cat /etc/logrotate.d/

      bootlog ? ? ? ? cups ? ? ? ? ? ?httpd ? ? ? ? ? libvirtd ? ? ? ?libvirtd.qemu ? numad ? ? ? ? ? psacct ? ? ? ? ?sssd ? ? ? ? ? ?wpa_supplicant

      chrony ? ? ? ? ?glusterfs ? ? ? iscsiuiolog ? ? libvirtd.lxc ? ?mariadb ? ? ? ? ppp ? ? ? ? ? ? samba ? ? ? ? ? syslog ? ? ? ? ?yum

      [root@localhost tomcat]# cat /etc/logrotate.d/syslog

      /var/log/cron

      /var/log/maillog

      /var/log/messages

      /var/log/secure

      /var/log/spooler

      {

      missingok

      sharedscripts

      postrotate

      /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

      endscript

      }

      [root@localhost tomcat]#

      ```

      ## 5.配置Tomcat管理功能

      啟動完tomcat點下圖框中默認會報錯,因為沒有賬號密碼,嘗試多次后會報401

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502220909683.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      我們需要修改conf/tomcat-users.xml文件即可,下載在登錄時輸入username當時配置的即可正常登錄

      ```sh

      [root@localhost tomcat]# cat conf/tomcat-users.xml

      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"

      version="1.0">

      #配置完成后需要重啟

      在執行./shutdown后一定要查看進程和端口在不在

      ```

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502220946745.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      tomcat8.5以后的版本默認只允許機訪問,換需要修改webapps/manager/META-INF/context.xml

      ```sh

      #將value class的行注釋掉即可

      [root@localhost tomcat]# cat webapps/manager/META-INF/context.xml

      ```

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/2020050222102775.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ## 6.部署jpress

      ### 6.1.數據庫準備

      ```sh

      MariaDB [(none)]> create database jpress charset utf8mb4;

      Query OK, 1 row affected (0.02 sec)

      MariaDB [(none)]> show create database jpress;

      +----------+--------------------------------------------------------------------+

      | Database | Create Database ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

      +----------+--------------------------------------------------------------------+

      | jpress ? | CREATE DATABASE `jpress` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |

      +----------+--------------------------------------------------------------------+

      1 row in set (0.00 sec)

      MariaDB [(none)]> grant all on jpress.* to 'jpress'@'localhost' identified by '123456';

      Query OK, 0 rows affected (0.00 sec)

      MariaDB [(none)]>

      MariaDB [(none)]> select user,host from mysql.user;

      +--------+-----------------------+

      | user ? | host ? ? ? ? ? ? ? ? ?|

      +--------+-----------------------+

      | root ? | 127.0.0.1 ? ? ? ? ? ? |

      | root ? | ::1 ? ? ? ? ? ? ? ? ? |

      | ? ? ? ?| localhost ? ? ? ? ? ? |

      | jpress | localhost ? ? ? ? ? ? |

      | root ? | localhost ? ? ? ? ? ? |

      | ? ? ? ?| localhost.localdomain |

      | root ? | localhost.localdomain |

      +--------+-----------------------+

      7 rows in set (0.00 sec)

      MariaDB [(none)]> grant all on jpress.* to 'jpress'@'192.168.81.%' identified by '123456';

      Query OK, 0 rows affected (0.00 sec)

      MariaDB [(none)]> drop user ''@'localhost';

      Query OK, 0 rows affected (0.00 sec)

      MariaDB [(none)]>

      MariaDB [(none)]> select user,host from mysql.user;

      +--------+-----------------------+

      | user ? | host ? ? ? ? ? ? ? ? ?|

      +--------+-----------------------+

      | root ? | 127.0.0.1 ? ? ? ? ? ? |

      | jpress | 192.168.81.% ? ? ? ? ?|

      | root ? | ::1 ? ? ? ? ? ? ? ? ? |

      | jpress | localhost ? ? ? ? ? ? |

      | root ? | localhost ? ? ? ? ? ? |

      | ? ? ? ?| localhost.localdomain |

      | root ? | localhost.localdomain |

      +--------+-----------------------+

      7 rows in set (0.00 sec)

      MariaDB [(none)]> flush privileges;

      Query OK, 0 rows affected (0.00 sec)

      ```

      ### 6.2.獲取jpress代碼

      - https://gitee.com/GalaIO/jpress/blob/master/wars/jpress-web-newest.war

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221054840.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ```sh

      [root@localhost webapps]# cp jpress/jpress/wars/jpress-web-newest.war ?.

      [root@localhost webapps]# rm -rf jpress

      [root@localhost webapps]# rm -rf jpress.war

      [root@localhost webapps]# mv jpress-web-newest jpress

      [root@localhost webapps]# mv jpress-web-newest.war jpress.war

      [root@localhost webapps]# ls

      docs ?examples ?host-manager ?jpress ?jpress.war ?jpress-web-newest ?manager ?ROOT

      ```

      - 下面訪問http://192.168.81.210:8080/jpress

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221126344.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221151818.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221209322.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221247953.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      - 我們去重啟一下tomcat

      - jpress的配置文件位于webapps/jpress/WEB-INF/classes, db.properties

      - 安裝完成默認是進入整體的首頁,我們可以使用單獨賬號進行登錄

      - 然后去訪問http://192.168.81.210:8080/jpress/admin

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221414412.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221516725.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      - 可以寫一篇文章并上傳圖片

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221538238.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      - 在jpress/attachment/20200331/目錄可以看到用戶上傳的附件

      - 可以看到jpress中的表

      ```sh

      MariaDB [(none)]> show tables from jpress;

      +-------------------+

      | Tables_in_jpress ?|

      +-------------------+

      | jpress_attachment |

      | jpress_comment ? ?|

      | jpress_content ? ?|

      | jpress_mapping ? ?|

      | jpress_metadata ? |

      | jpress_option ? ? |

      | jpress_taxonomy ? |

      | jpress_user ? ? ? |

      +-------------------+

      8 rows in set (0.01 sec)

      文章內容應該是在content表中

      MariaDB [(none)]> select * from jpress.jpress_content \G;

      *************************** 1. row ***************************

      id: 1

      title: 第一篇測試文檔

      text:

      江曉龍很牛!!!!啊啊啊

      thumbnail: NULL

      module: article

      style: NULL

      user_id: 1

      parent_id: NULL

      object_id: NULL

      order_number: 0

      status: normal

      vote_up: 0

      vote_down: 0

      price: 0.00

      comment_status: NULL

      comment_count: 0

      view_count: 0

      created: 2020-03-31 18:16:56

      modified: 2020-03-31 18:16:56

      slug: 第一篇測試文檔

      flag: NULL

      lng: NULL

      lat: NULL

      meta_keywords: NULL

      meta_description: NULL

      remarks: NULL

      ```

      - 刪除這條記錄,頁面的文章跟著消失

      - 在插回去,內容還會存在

      ## 7.顯示jvm內存信息

      ```sh

      #需要在webapps/ROOT目錄下寫一個mem.jsp的文件

      [root@localhost tomcat]# cat webapps/ROOT/mem.jsp

      <%

      Runtime rtm = Runtime.getRuntime();

      long mm = rtm.maxMemory()/1024/1024;

      long tm = rtm.totalMemory()/1024/1024;

      long fm = rtm.freeMemory()/1024/1024;

      out.println("JVM memory detail info :
      ");

      out.println("Max memory:"+mm+"MB"+"
      ");

      out.println("Total memory:"+tm+"MB"+"
      ");

      out.println("Free memory:"+fm+"MB"+"
      ");

      out.println("Available memory can be used is :"+(mm+fm-tm)+"MB"+"
      ");

      %>

      ```

      - 訪問http://192.168.81.210:8080/mem.jsp

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/202005022216493.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ## 8.Tomcat主配置文件

      ```sh

      #shutdown端口 ?連接到這個端口并輸入后面的暗號 SHUTDOWN 把tomcat關閉,需要把暗號給改掉

      [root@localhost tomcat]# ss -lnptu | grep java

      tcp ? ?LISTEN ? ? 0 ? ? ?100 ? ? ?:::8080 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? users:(("java",pid=77014,fd=52))

      tcp ? ?LISTEN ? ? 0 ? ? ?1 ? ? ?::ffff:127.0.0.1:8005 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? users:(("java",pid=77014,fd=62))

      [root@localhost tomcat]# telnet 127.0.0.1 8005

      Trying 127.0.0.1...

      Connected to 127.0.0.1.

      Escape character is '^]'.

      SHUTDOWN

      Connection closed by foreign host.

      [root@localhost tomcat]# ss -lnptu | grep java

      #tomcat管理端,一般不開放,以免用戶看到配置

      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" />

      #設置tomcat的端口,web功能,redirectPort是表示啟用了https后的端口也就是443

      connectionTimeout="20000"

      redirectPort="8443" />

      #tomcat線程數,maxThreads表示在tomcat忙的時候最多處理多少個線程,minSpareThreads表示正常情況下tomcat處理線程的數量

      maxThreads="150" minSpareThreads="4"/>

      #8009 ajp 工作方式:與Apache配合

      address="::1"

      port="8009"

      redirectPort="8443" />

      #host ?虛擬主機部分

      #host name:配置域名

      #appBase:站點目錄

      #uppackWARS:是否自動解壓war包,true就是解壓,false就是不解壓

      #autoDeploy:是否自動部署把磁盤中的扔到jvm中

      unpackWARs="true" autoDeploy="true">

      prefix="localhost_access_log" suffix=".txt"

      pattern="%h %l %u %t "%r" %s %b" />

      #tomcat訪問日志的格式

      prefix="localhost_access_log" suffix=".txt"

      pattern="%h %l %u %t "%r" %s %b" />

      ```

      ## 9.Tomcat多實例配置

      一臺主機可能會跑多個tomcat

      ```sh

      [root@localhost soft]# tar -xf apache-tomcat-8.5.53.tar.gz

      [root@localhost soft]# ls

      apache-tomcat-8.5.53 ?apache-tomcat-8.5.53.tar.gz ?jdk-8u60-linux-x64.tar.gz

      [root@localhost soft]# mv apache-tomcat-8.5.53 ../tomcat_8081

      [root@localhost soft]# tar -xf apache-tomcat-8.5.53.tar.gz

      [root@localhost soft]# mv apache-tomcat-8.5.53 ../tomcat_8082

      [root@localhost application]# sed -ri 's/8080/8081/g' tomcat_8081/conf/server.xml

      [root@localhost application]# sed -ri 's/8005/8006/g' tomcat_8081/conf/server.xml

      [root@localhost application]# sed -ri 's/8009/8010/g' tomcat_8081/conf/server.xml

      [root@localhost application]# sed -ri 's/8080/8082/g' tomcat_8082/conf/server.xml

      [root@localhost application]# sed -ri 's/8005/8007/g' tomcat_8082/conf/server.xml

      [root@localhost application]# sed -ri 's/8009/8011/g' tomcat_8082/conf/server.xml

      [root@localhost application]# tomcat_8081/bin/startup.sh

      [root@localhost application]# tomcat_8082/bin/startup.sh

      ```

      ![在這里插入圖片描述](https://img-blog.csdnimg.cn/20200502221730623.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDk1MzY1OA==,size_16,color_FFFFFF,t_70#pic_center)

      ```sh

      #書寫tomcat相關腳本時(啟動 重啟 監控)都有精確過濾

      ps aux | grep java | grep tomcat_8081

      ```

      ## 10.Tomcat監控

      監控方式

      - 簡單命令

      - 現成腳本

      - 通過zabbix自定義監控

      - 自定義監控 ? ? ? ?只要是用命令能得到的東西都能去監控

      - 通過jmx ? ? ? ?對java進行監控

      - 其他監控

      - 通過ipmi ? ? ? ?監控硬件的

      - 通過snmp ? ? ? 監控網絡設備的,只要支持snmp都能監控

      java自帶的監控命令

      - jps ? ?導出java相關的進程

      - 格式:jps ?-lvm

      - 參數選項:-lvm最詳細

      ```sh

      [root@localhost ~]# jps -lvm

      7457 org.apache.catalina.startup.Bootstrap start start -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp

      7525 org.apache.catalina.startup.Bootstrap start start -Djava.util.logging.config.file=/application/tomcat_8082/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/application/tomcat_8082 -Dcatalina.home=/application/tomcat_8082 -Djava.io.tmpdir=/application/tomcat_8082/temp

      9144 sun.tools.jps.Jps -lvm -Denv.class.path=.:/application/jdk/lib:/application/jdk/jre/lib:/application/jdk/lib/tools.jar -Dapplication.home=/application/jdk1.8.0_60 -Xms8m

      7482 org.apache.catalina.startup.Bootstrap start start -Djava.util.logging.config.file=/application/tomcat_8081/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -Dcatalina.base=/application/tomcat_8081 -Dcatalina.home=/application/tomcat_8081 -Djava.io.tmpdir=/application/tomcat_8081/temp

      ```

      - jmap ? ? 導出jvm信息,常用于自定義監控

      - 格式:jmap ?pid

      - 參數:-heap

      ```sh

      [root@localhost ~]# jmap -heap 7457

      Attaching to process ID 7457, please wait...

      Debugger attached successfully.

      Server compiler detected.

      JVM version is 25.60-b23

      using thread-local object allocation.

      Mark Sweep Compact GC

      Heap Configuration:

      MinHeapFreeRatio ? ? ? ? = 40

      MaxHeapFreeRatio ? ? ? ? = 70

      MaxHeapSize ? ? ? ? ? ? ?= 255852544 (244.0MB)

      NewSize ? ? ? ? ? ? ? ? ?= 5570560 (5.3125MB)

      MaxNewSize ? ? ? ? ? ? ? = 85262336 (81.3125MB)

      OldSize ? ? ? ? ? ? ? ? ?= 11206656 (10.6875MB)

      NewRatio ? ? ? ? ? ? ? ? = 2

      SurvivorRatio ? ? ? ? ? ?= 8

      MetaspaceSize ? ? ? ? ? ?= 21807104 (20.796875MB)

      CompressedClassSpaceSize = 1073741824 (1024.0MB)

      MaxMetaspaceSize ? ? ? ? = 17592186044415 MB

      G1HeapRegionSize ? ? ? ? = 0 (0.0MB)

      Heap Usage: ? ? ? ? ? ?#監控的話關注這一列

      New Generation (Eden + 1 Survivor Space):

      capacity = 12779520 (12.1875MB)

      used ? ? = 11689352 (11.147834777832031MB)

      free ? ? = 1090168 (1.0396652221679688MB)

      91.46941356169872% used

      Eden Space: ? ? ? ? ? ? ? ?#監控的話關注這一列

      capacity = 11403264 (10.875MB)

      used ? ? = 11059616 (10.547271728515625MB)

      free ? ? = 343648 (0.327728271484375MB)

      96.98640669899426% used

      From Space: ? ? ? ? ? ? ? ? ? ?#監控的話關注這一列

      capacity = 1376256 (1.3125MB)

      used ? ? = 629736 (0.6005630493164062MB)

      free ? ? = 746520 (0.7119369506835938MB)

      45.75718470982143% used

      To Space: ? ? ? ? ? ? ? ?#監控的話關注這一列

      capacity = 1376256 (1.3125MB)

      used ? ? = 0 (0.0MB)

      free ? ? = 1376256 (1.3125MB)

      0.0% used

      tenured generation: ? ? ? ? ? ? ? ?#監控的話關注這一列

      capacity = 28164096 (26.859375MB)

      used ? ? = 18313224 (17.46485137939453MB)

      free ? ? = 9850872 (9.394523620605469MB)

      65.02329774760035% used

      21146 interned Strings occupying 1882520 bytes.

      ```

      - jstatck ? 導出java的進程信息,常用于java程序故障,需要導出線程信息與開發一起研究

      - 格式:jstack -l pid

      ```sh

      [root@localhost ~]# ?jstack -l 7457

      ```

      - tomcat故障案例:系統負載高,tomcat占用CPU較高

      - 1.jps/top/htop精確確定哪個java進程導致

      - 2.jstack導出java線程

      - 3.catalina.out日志分析

      - 4.jmap導出jvm信息,可以通過mat工具進行分析

      - tomcat監控

      - 自定義監控:直接在tomcat服務器上寫好腳本,在zabbix配置文件寫好就行

      - 首先需要在zabiix服務端安裝zabbix-java-gateway然后在tomcat服務器開啟監控功能

      - tomcat開啟jmx監控功能

      ```sh

      #修改bin/catalina.sh

      [root@localhost tomcat]# vim bin/catalina.sh

      #注意不能分行寫會報錯找不到命令,要寫在一行上

      CATALINA_OPTS="$CATALINA_OPTS"

      -Dcom.sun.management.jmxremote

      -Dcom.sun.management.jmxremote.port=12345

      -Dcom.sun.management.jmxremote.authenticate=false

      -Dcom.sun.management.jxmremote.ssl=false

      -Djava.rmi.server.hostname="192.168.81.210"

      #正確寫法

      CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jxmremote.ssl=false -Djava.rmi.server.hostname=192.168.81.210"

      #說明

      CATALINA_OPTS="$CATALINA_OPTS" ? ? ? ?#修改tomcat啟動參數

      -Dcom.sun.management.jmxremote ? ? ? ?#開啟tomcat遠程管理功能

      -Dcom.sun.management.jmxremote.port=12345 ? ?#遠程管理功能,除了12345端口,還會生成2個隨機端口,我們可以開放所有端口

      Dcom.sun.management.jmxremote.authenticat=false ? ? ? ? ? ?#是否在監控時需要認證

      -Dcom.sun.management.jmxremote.ssl=false ? ?#是否開啟ssl連接

      -Djava.rmi.server.hostname="192.168.81.210" ? ? ? ?#設置tomcat所在服務器的ip

      配置完成后重啟tomcat即可

      使用ps命令可以看到輸出的信息多了我們寫入的幾行

      [root@localhost tomcat]# ps aux | grep java

      root ? ? ?17786 ?5.7 10.6 2306592 105860 pts/1 ?Sl ? 15:52 ? 0:08 /application/jdk/bin/java

      -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties

      -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

      -Djdk.tls.ephemeralDHKeySize=2048

      -Djava.protocol.handler.pkgs=org.apache.catalina.webresources

      -Dorg.apache.catalina.security.SecurityListener.UMASK=0027

      -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345

      -Dcom.sun.management.jmxremote.authenticate=false

      -Dcom.sun.management.jxmremote.ssl=false

      -Djava.rmi.server.hostname=192.168.81.210

      -Dignore.endorsed.dirs=

      -classpath /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jar

      -Dcatalina.base=/application/tomcat

      -Dcatalina.home=/application/tomcat

      -Djava.io.tmpdir=/application/tomcat/temp org.apache.catalina.startup.Bootstrap start

      使用ss/netstat 命令可以看到多出啦的三個端口

      [root@localhost tomcat]# ss -lnptu | grep java

      tcp ? ?LISTEN ? ? 0 ? ? ?100 ? ? ?:::8080 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? users:(("java",pid=17786,fd=56))

      #我們制定的

      tcp ? ?LISTEN ? ? 0 ? ? ?50 ? ? ? :::12345 ? ? ? ? ? ? ? ?:::* ? ? ? ? ? ? ? ? ? users:(("java",pid=17786,fd=22))

      #隨機的1

      tcp ? ?LISTEN ? ? 0 ? ? ?50 ? ? ? :::46272 ? ? ? ? ? ? ? ?:::* ? ? ? ? ? ? ? ? ? users:(("java",pid=17786,fd=21))

      #隨機的2

      tcp ? ?LISTEN ? ? 0 ? ? ?50 ? ? ? :::46081 ? ? ? ? ? ? ? ?:::* ? ? ? ? ? ? ? ? ? users:(("java",pid=17786,fd=24))

      tcp ? ?LISTEN ? ? 0 ? ? ?1 ? ? ?::ffff:127.0.0.1:8005 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? users:(("java",pid=17786,fd=65))

      ```

      - 可以使用jsconsole進行測試

      ## 11.Tomcat安全優化

      tomcat安全管理規范

      - 修改8005端口的暗號

      - 修改8009端口

      - 禁用管理端

      - 降權啟動,tomcat一般以普通用戶進行管理

      - 關閉文件列表功能

      - 版本信息隱藏,tomcat報錯后會有版本提示,定義一個error-code

      - server header重寫,修改http響應頭中的服務端名稱

      - 設置訪問限制

      - 腳本權限設置

      - 日志設置

      ## 12.Tomcat總結

      - tomcat故障案例

      - tomcat安全優化

      - tomcat目錄 配置

      - 多實例

      - 監控

      Tomcat

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:VLOOKUP函數基礎教程-查找
      下一篇:通過匹配Excel中兩個工作表/工作簿中的列輕松更新或合并表
      相關文章
      亚洲xxxxxx| 亚洲人成在线影院| 亚洲国产精品综合久久久| 亚洲美女免费视频| 97亚洲熟妇自偷自拍另类图片| 亚洲免费在线视频| 久久精品国产亚洲av麻豆小说| 亚洲网址在线观看你懂的| 亚洲AV福利天堂一区二区三| 国产精品国产亚洲精品看不卡| 日本亚洲欧洲免费天堂午夜看片女人员 | 在线观看亚洲人成网站| 亚洲视频在线观看一区| 亚洲av日韩av不卡在线观看| 亚洲男人的天堂在线播放| 亚洲第一二三四区| 亚洲制服丝袜在线播放| 麻豆狠色伊人亚洲综合网站| 久久亚洲国产最新网站| 亚洲日韩精品无码AV海量| 亚洲欧洲无码一区二区三区| 亚洲av日韩av永久无码电影| 成人亚洲综合天堂| 久久久久亚洲AV成人网人人软件 | 亚洲免费视频播放| 亚洲人成综合网站7777香蕉| 亚洲乱码av中文一区二区| 丰满亚洲大尺度无码无码专线| 亚洲Av无码乱码在线znlu| 亚洲视频在线一区二区| 亚洲中文字幕不卡无码| 久久伊人久久亚洲综合| 中文字幕亚洲色图| 亚洲av无码国产综合专区| 亚洲国产欧美一区二区三区| 国产精品亚洲综合一区在线观看| 亚洲日本在线观看视频| 亚洲国产美女精品久久久久∴| 亚洲国产女人aaa毛片在线 | 亚洲免费网站在线观看| 亚洲jizzjizz少妇|