主機名 | 服務 | 外網 | 內網 |
web01 | jdk tomcat | 10.0.0.7 | 172.16.1.7 |
db01 | mariadb | 10.0.0.51 | 172.16.1.51 |
- jdk tomcat版本選擇
- jdk版本一般為1.8.0 x 或者1.8.5
- tomcat 9.0 8.5 8.0 7.x
jdk工具:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
工具包下載:https://pan.baidu.com/s/1ZF4K6rPP2CaH8ezKGBWriQ
提取碼:nprd
[root@web01 /]# mkdir /server/tools #壓縮包存放地址 [root@web01 /]# mkdir /application #安裝地址也可以指定默認地址/usr/local [root@web01 /]# rpm -qa | grep java [root@web01 /server/tools]# ln -s /application/jdk1.8.0_60/ /application/jdk #創建軟連接
java jdk 環境變量
#具體安裝目錄配置自定義 cat >>/etc/profile<<'EOF' export JAVA_HOME=/application/jdk export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar export TOMCAT_HOME=/application/tomcat EOF #讓配置文件生效 [root@web01 /]# source /etc/profile #jdk環境准備完成 [root@web01 /]# java -version java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
參考:https://blog.csdn.net/qq_14898543/article/details/53939197
tomcat與nginx比較:
-
不同點:
-
如果客戶端請求的是靜態頁面,則只需要Apache服務器響應請求。 如果客戶端請求動態頁面,則是Tomcat服務器響應請求。 因為JSP是服務器端解釋代碼的,這樣整合就可以減少Tomcat的服務開銷。
wget -P /server/tools https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.55/bin/apache-tomcat-8.5.55.tar.gz
編譯安裝tomcat
[root@web01 /server/tools]# tar xf apache-tomcat-8.5.55.tar.gz -C /application/ [root@web01 /]# ln -s /application/apache-tomcat-8.5.55/ /application/tomcat [root@web01 /application/tomcat]# ll total 92 drwxr-xr-x 2 root root 4096 Dec 18 14:36 bin drwxr-xr-x 2 root root 182 Sep 28 2015 conf drwxr-xr-x 2 root root 4096 Dec 18 14:36 lib -rw-r--r-- 1 root root 57011 Sep 28 2015 LICENSE drwxr-xr-x 2 root root 6 Sep 28 2015 logs -rw-r--r-- 1 root root 1444 Sep 28 2015 NOTICE -rw-r--r-- 1 root root 6741 Sep 28 2015 RELEASE-NOTES -rw-r--r-- 1 root root 16204 Sep 28 2015 RUNNING.txt drwxr-xr-x 2 root root 30 Dec 18 14:36 temp drwxr-xr-x 7 root root 81 Sep 28 2015 webapps drwxr-xr-x 2 root root 6 Sep 28 2015 work #進行測試,tomcat和jdk是否可以共存 [root@web01 /]# /application/tomcat/bin/version.shUsing CATALINA_BASE: /application/tomcat Using CATALINA_HOME: /application/tomcat Using CATALINA_TMPDIR: /application/tomcat/temp Using JRE_HOME: /usr/java/jdk1.8.0_241-amd64/ Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-j Server version: Apache Tomcat/8.5.55 Server built: May 5 2020 22:10:54 UTC Server number: 8.5.55.0 OS Name: Linux OS Version: 3.10.0-957.el7.x86_64 Architecture: amd64 JVM Version: 1.8.0_60-b27 <-----jdk環境 JVM Vendor: Oracle Corporation
🍋目錄 | 🍓文件 | 🍑作用 | |
tomcat/bin | 命令管理目錄 | startup.sh | 開啟服務 |
shutdown.sh | 關閉服務 | ||
version.sh | 測試tomcat與jdk連接 | ||
catalina.sh | tomcat核心腳本startup shutdown 都會調用這個腳本 | ||
tomcat/conf | 配置文件 | server.xml | nginx.conf 主配置文件 |
web.xml | 補充 額外功能 | ||
tomcat-user.xml | tomcat管理端配置文件 用戶名 和 密碼 | ||
tomcat/logs | 日志文件 | catalina.out | tomcat最全日志 查看 error startup 啟動的時間 |
catalina.2019-12-16.log | catalina.out的切割日志 | ||
localhost_access_log.2019-12-16.txt | tomcat access.log 訪問日志 | ||
webapps | 站點目錄 | tomcat.jsp | 首頁文件 |
lib | 庫文件tomcat插件 |
[root@web01 ~]# /application/tomcat/bin/startup.sh #開啟tomcat [root@web01 ~]# /application/tomcat/bin/shutdown.sh #關閉tomcat [root@web01 /application]# ss -lntup | grep java #查看端口,默認有8009,8080,8005 tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=9250,fd=51)) tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=9250,fd=46)) tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=9250,fd=66))
[root@web01 /application/tomcat/conf]# cat tomcat-users.xml <?xml version='1.0' encoding='utf-8'?> <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="manager-gui"/> <role rolename="host-gui"/> <user username="tomcat" password="tomcat" roles="admin-gui,manager-gui,host-gui"/> </tomcat-users> #最后一行user雙引號內容更改,登錄使用 user:tomcat password:tomcat [root@web01 /]# /application/tomcat/bin/shutdown.sh #重啟一下 [root@web01 /]# /application/tomcat/bin/startup.sh
點擊server status 輸入用戶名和密碼
#java有時會出現端口沒了,進程還在的尷尬現象
進行壓力測試,web瀏覽器會顯示數值
[root@web01 /]# yum -y install httpd-tools [root@web01 /]# ab -c 10 -n 99999 10.0.0.7:8080/ #斜杠一定要加上 This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 10.0.0.7 (be patient) Completed 9999 requests Completed 19998 requests Completed 29997 requests Completed 39996 requests Completed 49995 requests Completed 59994 requests Completed 69993 requests Completed 79992 requests Completed 89991 requests Completed 99990 requests Finished 99999 requests Server Software: Apache-Coyote/1.1 Server Hostname: 10.0.0.7 Server Port: 8080 Document Path: / Document Length: 11230 bytes Concurrency Level: 10 Time taken for tests: 20.088 seconds Complete requests: 99999 Failed requests: 0 Write errors: 0 Total transferred: 1137088629 bytes HTML transferred: 1122988770 bytes Requests per second: 4977.96 [#/sec] (mean) Time per request: 2.009 [ms] (mean) Time per request: 0.201 [ms] (mean, across all concurrent requests) Transfer rate: 55277.69 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.1 0 6 Processing: 0 2 2.3 1 56 Waiting: 0 2 2.2 1 56 Total: 1 2 2.3 1 56 Percentage of the requests served within a certain time (ms) 50% 1 66% 2 75% 2 80% 2 90% 3 95% 5 98% 13 99% 13 100% 56 (longest request)
#server.xml <Server port="8005" shutdown="SHUTDOWN"> ###tomcat shutdown端口 連接到8005這個端口 輸入暗號SHUTDOWN tomcat關閉 因為比較危險所以只能127.0.0.1連接 <GlobalNamingResources> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> #用戶客戶端 認證模式 用戶名模式 <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> #tomcat web端口 <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> #tomcat與apache 連接使用的端口 如果不使用apache 則可以注釋 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> #配置 tomcat 虛擬主機的內容 nginx tomcat Server_name Host name 域名 root appBase 站點目錄 #自動解壓,把壓縮吧放在目錄里就可以部署網站了 unpackWARs="true" #自動部署 autoDeploy="true" <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" #prefix日志的前綴 #日志的后綴 pattern="%h %l %u %t "%r" %s %b" /> </Host>
環境准備 | 作用 |
web01 | tomcat |
db01 | 數據庫 |
#將軟件剪切到webapps下 ##沒有解壓是因為沒有啟動tomcat [root@web01 ~]# mv jpress.war /application/tomcat/webapps/ [root@web01 /]# ll /application/tomcat/webapps/ total 20320 drwxr-xr-x 14 root root 4096 Dec 18 20:27 docs drwxr-xr-x 6 root root 83 Dec 18 20:27 examples drwxr-xr-x 5 root root 87 Dec 18 20:27 host-manager drwxr-xr-x 7 root root 102 Dec 19 19:56 jpress -rw-r--r-- 1 root root 20797013 Mar 3 2017 jpress.war drwxr-xr-x 5 root root 103 Dec 18 20:27 manager drwxr-xr-x 3 root root 4096 Dec 18 20:27 ROOT
db01 安裝數據庫
[root@db01 ~]# yum install mariadb mariadb-server -y # mariadb-server 安裝的mysql命令 [root@db01 ~]# systemctl start mariadb ; systemctl enable mariadb
創建tomcat數據庫
#進入數據庫 mysql MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.00 sec) #創建數據庫 jpress MariaDB [(none)]> create database jpress charset utf8; Query OK, 1 row affected (0.00 sec) #字符編碼設置為utf8 默認為拉丁文latin */ MariaDB [(none)]> show create database jpress; +----------+-----------------------------------------------------------------+ | Database | Create Database | +----------+-----------------------------------------------------------------+ | jpress | CREATE DATABASE `jpress` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+-----------------------------------------------------------------+ 1 row in set (0.00 sec) ##grant 授權 添加用戶 #指定主機連接 MariaDB [(none)]> grant all on jpress.*to 'jpress'@'172.16.1.7' identified by '123456'; Query OK, 0 rows affected (0.00 sec) #指定網段連接 MariaDB [(none)]> grant all on jpress.*to 'jpress'@'172.16.1.%' identified by '123456'; Query OK, 0 rows affected (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)]> flush privileges; Query OK, 0 rows affected (0.00 sec) #所有權限在jpress數據庫,中所有表 172.16.1.7 #精確172.16.1.% 172.16.1.% #局域網訪問localhost localhost #本地訪問 % #所有
web01連接測試
[root@web01 /]# yum install mariadb-server -y [root@web01 /]# mysql -ujpress -p123456 -h 172.16.1.51 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 8 Server version: 5.5.64-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
sql 語句
查看:
- show databases;
- show tables from db;
- select user,host from mysql.user;
添加:
- 建庫: create database jpress charset utf8;
- 添加用戶: grant all on jpress.*to 'jpress'@'172.16.1.%' identified by '123456';
刪除:
- drop database db;
- drop user jpress@localhost;
備份:
- mysqldump
#密碼登錄名自定義
#服務重啟,否則網站無法顯示 [root@web01 /]# /application/tomcat/bin/shutdown.sh [root@web01 /]# /application/tomcat/bin/startup.sh
jpress 連接數據庫存放的文件
[root@web01 /]# cat /application/tomcat/webapps/jpress/WEB-INF/classes/db.properties #Auto create by JPress #Thu Dec 19 20:47:33 CST 2019 db_name=jpress db_host_port=3306 db_tablePrefix=jpress_ db_host=172.16.1.51 db_password=123456 db_user=jpress
用戶上傳目錄及數據庫內容查看
#存放目錄默認在/webapps/jpress/attachment/下 attachment存儲數據時自動創建 [root@web01 /]# ll /application/tomcat/webapps/jpress/attachment/20191220 total 448 -rw-r----- 1 root root 26864 Dec 20 10:13 79b321d14e8c48f982f7a8c854bd02f0_780x240.jpg -rw-r----- 1 root root 92400 Dec 20 10:13 79b321d14e8c48f982f7a8c854bd02f0.jpg -rw-r----- 1 root root 10791 Dec 20 10:12 a8dbbf8eb07c40708a5d041af7ed48c2_240x140.jpg -rw-r----- 1 root root 27133 Dec 20 10:12 a8dbbf8eb07c40708a5d041af7ed48c2_300x300.jpg -rw-r----- 1 root root 51171 Dec 20 10:12 a8dbbf8eb07c40708a5d041af7ed48c2_600x300.jpg -rw-r----- 1 root root 51089 Dec 20 10:12 a8dbbf8eb07c40708a5d041af7ed48c2_780x240.jpg -rw-r----- 1 root root 187540 Dec 20 10:12 a8dbbf8eb07c40708a5d041af7ed48c2.jpg
nio(new I/O)
# nio2模式 protocol="org.apache.coyote.http11.Http11Nio2Protocol 69 <Connector port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol" connectionTimeout="20000" redirectPort="8443" /> #重啟tomcat [root@web01 /]# /application/tomcat/bin/shutdown.sh #關閉時最好查看一下后台進行是否關閉,有時服務關閉進程還在。 [root@web01 /]# ps -ef | grep java [root@web01 /]# ss -lntup | grep java [root@web01 /]# /application/tomcat/bin/startup.sh
查看修改結果-tomcat管理端
#安裝apr環境 yum -y install apr apr-devel tomcat-native #修改8080&8009端口對應的server.xml protocol="org.apache.coyote.http11.Http11Nio2Protocol" 把Nio2 修改為Apr protocol="org.apache.coyote.http11.Http11AprProtocol" #重啟tomcat [root@web01 /]# /application/tomcat/bin/shutdown.sh #關閉時最好查看一下后台進行是否關閉,有時服務關閉進程還在。 [root@web01 /]# ps -ef | grep java [root@web01 /]# ss -lntup | grep java [root@web01 /]# /application/tomcat/bin/startup.sh
tomcat-native 安裝方式二: 編譯安裝
1.安裝需要的軟件 [root@web01 /]# yum install -y gcc apr-devel apr apr-util gcc-4.8.5-39.el7.x86_64 apr-devel-1.4.8-5.el7.x86_64 apr-1.4.8-5.el7.x86_64 apr-util-1.5.2-6.el7.x86_64 2.安裝tomcat-native-1.2.23 源碼下載地址: https://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.8/source/ 將下載下來的源碼包tomcat-native-1.2.23-src.tar.gz放在/server/tools目錄下面,然后解壓 到/application/ 在線下載: wget https://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.8/source/tomcat-native-1.2.8-src.tar.gz [root@web01 /server/tools]# tar -zxvf tomcat-native-1.2.8-src.tar.gz -C /application/ [root@web01 /application/tomcat-native-1.2.8-src/native]# ./configure --with-apr=/usr/bin/apr-1-config --prefix=$CATALINA_HOME && make && make install #修改環境變量:vim /application/apache-tomcat-8.0.27/bin/catalina.sh,添加如下配置: LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib export LD_LIBRARY_PATH #配置Tomcat Connector,使用apr模式 [root@web01 /]# vim /application/tomcat/conf/server.xml 69 <Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" 70 connectionTimeout="20000" 71 redirectPort="8443" /> #重啟ttomcat服務
[root@web01 /]# cd /server/tools/ [root@web01 /server/tools]# tar -zxvf apache-tomcat-8.0.27.tar.gz [root@web01 /server/tools]# cp -r apache-tomcat-8.0.27 /application/tomcat8081 [root@web01 /server/tools]# cp -r apache-tomcat-8.0.27 /application/tomcat8082 #修改tomcat8081端口號 [root@web01 /application]# sed -i 's#8080#8081#g' tomcat8081/conf/server.xml [root@web01 /application]# sed -i 's#8005#8006#g' tomcat8081/conf/server.xml [root@web01 /application]# sed -i 's#8009#8010#g' tomcat8081/conf/server.xml #修改tomcat8082端口 [root@web01 /application]# sed -i 's#8080#8082#g' tomcat8082/conf/server.xml [root@web01 /application]# sed -i 's#8005#8007#g' tomcat8082/conf/server.xml [root@web01 /application]# sed -i 's#8009#8011#g' tomcat8082/conf/server.xml #查看端口,確定好端口是否替換正確,否則會少端口 ##java進程有時服務關閉,后台進程還在請查看好: 查看進程:ps -ef | grep java 殺死全部進程:pkill java [root@web01 /]# ss -lntup | grep java tcp LISTEN 0 1 ::ffff:127.0.0.1:8007 :::* users:(("java",pid=7924,fd=52)) tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=7382,fd=47)) tcp LISTEN 0 100 :::8010 :::* users:(("java",pid=7691,fd=47)) tcp LISTEN 0 100 :::8011 :::* users:(("java",pid=7860,fd=47)) tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=7382,fd=46)) tcp LISTEN 0 100 :::8081 :::* users:(("java",pid=7691,fd=46)) tcp LISTEN 0 100 :::8082 :::* users:(("java",pid=7860,fd=46)) tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=7382,fd=65)) tcp LISTEN 0 1 ::ffff:127.0.0.1:8006 :::* users:(("java",pid=7691,fd=64))
#創建首頁文件進行測試 [root@web01 /]# echo "welcome to tomcat_8081" >/application/tomcat8081/webapps/ROOT/index.jsp [root@web01 /]# echo "welcome to tomcat_8082" >/application/tomcat8082/webapps/ROOT/index.jsp #測試文件 [root@web01 /]# curl 10.0.0.7:8081 welcome to tomcat_8081 [root@web01 /]# curl 10.0.0.7:8082 welcome to tomcat_8082
[root@web01 /]# jps -lvm 8355 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8082/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8082/endorsed -Dcatalina.base=/application/tomcat8082 -Dcatalina.home=/application/tomcat8082 -Djava.io.tmpdir=/application/tomcat8082/temp 7382 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat/endorsed -Dcatalina.base=/application/tomcat -Dcatalina.home=/application/tomcat -Djava.io.tmpdir=/application/tomcat/temp 7691 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/application/tomcat8081/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/application/tomcat8081/endorsed -Dcatalina.base=/application/tomcat8081 -Dcatalina.home=/application/tomcat8081 -Djava.io.tmpdir=/application/tomcat8081/temp 8429 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
提取碼:7hut
##根據java線程繁忙排序 線程是指進程內的一個執行單元, #進程 進程擁有自已獨立的堆和棧,既不共享堆,亦不共享棧,進程由操作系統調度。 #線程 線程擁有自己獨立的棧和共享的堆,共享堆,不共享棧,線程亦由操作系統調度 #協程和線程 協程避免了無意義的調度,由此可以提高性能:但同時協程也失去了線程使用多CPU的能力 進程與線程的區別 (1)地址空間:線程是進程內的一個執行單位,進程內至少有一個線程,他們共享進程的地 址空間,而進程有白己獨立 的地址空間 (2)資源擁有:進程是資源分配和擁有的單位,同一個進程內線程共享進程的資源 (3)線程是處理器調度的基本單位,但進程不是 (4)二者均可並發執行 (5)每個獨立的線程有一個程序運行的入口 安裝命令:yum install psmisc -y [root@web01 /]# pstree -p ├─java(7382)─┬─{java}(7383) │ ├─{java}(7384) │ ├─{java}(7385) │ ├─{java}(7386) │ ├─{java}(7387)
[root@web01 /server/scripts]# sh show-busy-java-threads.sh [1] Busy(0.4%) thread(8545/0x2161)#16進制 stack of java process(7382) under user(root): "http-apr-8080-exec-1" #23 daemon prio=5 os_prio=0 tid=0x00007fa5a839e000 nid=0x2161 waiting on condition [0x00007fa5848cd000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000000f67f8320> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
修改 tomcat/bin/catalina.sh CATALINA_OPTS java內置變量 修改java啟動參數(tomcat) CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote #jmx remote開啟tomcat遠程監控功能 -Dcom.sun.management.jmxremote.port=12345 #指定端口 12345 還有2個隨機端口 -Dcom.sun.management.jmxremote.authenticate=false #auth 認證 -Dcom.sun.management.jmxremote.ssl=false #https -Djava.rmi.server.hostname=10.0.0.7" #tomcat監聽的ip地址 本地ip 10.0.0.7 172.16.1.7 寫內網ip CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.7" [root@web01 ~]# cd /application/tomcat/bin/ [root@web01 bin]# vim catalina.sh 寫在第2行或者97行 #重啟tomcat ##檢查進程和端口 [root@web01 /application]# ps -ef | grep java root 9046 1 13 05:56 pts/0 00:00:01 /application/jdk/bin/java -Djava.util.logging.config.file=/application/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.0.0.7 -Djava.endorsed.dirs=/application/tomcat/endorsed -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 root 9072 7332 0 05:56 pts/0 00:00:00 grep --color=auto java [root@web01 /application]# ss -lntup | grep java tcp LISTEN 0 100 :::8009 :::* users:(("java",pid=9046,fd=51)) tcp LISTEN 0 100 :::8080 :::* users:(("java",pid=9046,fd=50)) tcp LISTEN 0 50 :::40661 #隨機端口 :::* users:(("java",pid=9046,fd=19)) tcp LISTEN 0 50 :::12345 #指定端口 :::* users:(("java",pid=9046,fd=20)) tcp LISTEN 0 50 :::38368 #隨機端口 :::* users:(("java",pid=9046,fd=21)) tcp LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* users:(("java",pid=9046,fd=68))
- 通過Windows 就console 連接(模擬zabbix連接) Linux tomcat
- 路徑:C:\Program Files\Java\jdk1.8.0_31\bin\jconsole.exe
#壓力測試 [root@web01 ~]# ab -c 5 -n 9999999 10.0.0.7:8080/ #詳細說明 ab詳細參數博客地址:https://www.cnblogs.com/myvic/p/7703973.html -n: 在測試會話中所執行的請求個數。默認時,僅執行一個請求。請求的總數量 -c: 一次產生的請求個數。默認是一次一個。請求的用戶量 -t: 測試所進行的最大秒數。其內部隱含值是-n 50000,它可以使對服務器的測試限制在一個固定的總時間以內。默認時,沒有時間限制。 -V: 顯示版本號並退出。
#測壓結果:
[root@web01 /etc/nginx/conf.d]# cat tomcat.conf server { listen 80; server_name wei.com; client_max_body_size 10m; root /application/tomcat/webapps; location / { index index.jsp index.html index.htm; } location ~ \.jsp$ { proxy_pass http://127.0.0.1:8080; } } #nginx反向代理 + tomcat upstream tomcat { server 10.0.0.7:8080; server 10.0.0.7:8081; server 10.0.0.8:8080; } server { listen 80; server_name tomcat.com; location / { proxy_pass http://tomcat ; } }
[root@web01 /]# cat /etc/sysctl.conf vm.swappiness =0 net.ipv4.ip_forward=1 [root@web01 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@web01 ~]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all #相關解釋 vm.swappiness =0 #控制系統是否優先使用物理內存 數越小 越優先使用物理內存 net.ipv4.ip_forward=1 #開啟內核轉發.nat的時候 需要配置 net.ipv4.icmp_echo_ignore_all=0 #關閉ICMP回應功能
tomcat負載高
排查流程
- vmstat /top/ps aux 找出哪個進程的問題
[root@web01 /]# vmstat 1 10 #r 這個數字如果大,意味着系統的cpu使用率較高 #b 數字較大 意味着 磁盤讀寫io較高 #內存 #swap分區 #磁盤 #系統 #cpu procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 253724 116 502652 0 0 10 6 79 218 0 0 99 0 0 0 0 0 253700 116 502652 0 0 0 0 75 133 0 0 100 0 0
- 通過top -Hp java進程id 找出是哪個java線程的問題
- 找出線程的id 2358 (10進制)轉換為16進制
[root@web01 /]# ps -ef | grep java root 9046 1 0 10:49 ? [root@web01 /]# top -Hp 9046 #精確到找到某個線程 top - 19:11:56 up 9:54, 1 user, load average: 0.00, 0.01, 0.05 Threads: 34 total, 0 running, 34 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 6.2 sy, 0.0 ni, 93.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 995896 total, 253056 free, 239748 used, 503092 buff/cache KiB Swap: 819196 total, 819196 free, 0 used. 575224 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9046 root 20 0 2337496 143356 14900 S 0.0 14.4 0:00.00 java 9047 root 20 0 2337496 143356 14900 S 0.0 14.4 0:00.47 java 9048 root 20 0 2337496 143356 14900 S 0.0 14.4 0:04.78 java 9049 root 20 0 2337496 143356 14900 S 0.0 14.4 0:00.01 java [root@web01 /]# yum install bc -y [root@web01 /]# echo 'obase=16;9048' | bc 2358
- jstack pid (java進程)然后過濾 線程16進制的pid
[root@web01 /]# jstack 9046 | grep -i -C 5 '2358' at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) "VM Thread" os_prio=0 tid=0x00007f829406d800 nid=0x2358 runnable "VM Periodic Task Thread" os_prio=0 tid=0x00007f829418e000 nid=0x2363 waiting on condition JNI global references: 262
- jmap (顯示java jvm內容/信息) jmap -heap java進行id 顯示jvm的內存使用情況
[root@web01 /]# jmap -heap 9046 Attaching to process ID 9046, 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 = 19464192 (18.5625MB) used = 15386216 (14.673439025878906MB) free = 4077976 (3.8890609741210938MB) 79.04882976904462% used Eden Space: capacity = 17367040 (16.5625MB) used = 15024488 (14.328468322753906MB) free = 2342552 (2.2340316772460938MB) 86.5115068543632% used From Space: capacity = 2097152 (2.0MB) used = 361728 (0.344970703125MB) free = 1735424 (1.655029296875MB) 17.24853515625% used To Space: capacity = 2097152 (2.0MB) used = 0 (0.0MB) free = 2097152 (2.0MB) 0.0% used tenured generation: capacity = 43020288 (41.02734375MB) used = 30485784 (29.073509216308594MB) free = 12534504 (11.953834533691406MB) 70.86373759283062% used 14035 interned Strings occupying 1907800 bytes.
[root@web01 /]# jmap -dump:format=b,file=/tmp/tomcat.bin 9046 Dumping heap to /tmp/tomcat.bin ... Heap dump file created [root@web01 /]# file /tmp/tomcat.bin /tmp/tomcat.bin: data #文件格式為data
#安全優化 ##1.telnet管理端口保護(強制) tomcat shutdown端口 <Server port="8527" shutdown="dangerous"> ##2.ajp連接端口保護(推薦) 如果使用的apache+tomcat 修改端口 如果沒有使用apache 則把這一行注釋 <!-- 開始 注釋結束 --> ##3.禁用管理端(強制) ###1. 刪除默認的{Tomcat安裝目錄}/conf/tomcat-users.xml文件,重啟tomcat 后將會自動生成新的文件; ###2. 刪除{Tomcat安裝目錄}/webapps下默認的所有目錄和文件; ###3. 將tomcat 應用根目錄配置為tomcat安裝目錄以外的目錄;
##4. 降權啟動(模式)(監牢模式 keep in jail) 降權啟動/監牢模式 讓服務通過普通用戶運行 普通用戶管理 [root@web01 /]# useradd tomcat [root@web01 /]# id tomcat uid=1006(tomcat) gid=1006(tomcat) groups=1006(tomcat) [root@web01 /]# chown -R tomcat.tomcat /application/tomcat/ #遞歸將目錄權限修改為普通用戶 [root@web01 /]# pkill java #關閉java進程 [root@web01 /]# ps -ef | grep java #查看進程是否還在 root 10440 9635 0 20:09 pts/0 00:00:00 grep --color=auto java #切換用戶啟動進程 # Linux 1-1024端口 特權端口 只能root使用. [root@web01 /]# su - tomcat [tomcat@web01 ~]$ /application/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.
鏈接:https://pan.baidu.com/s/1pNscsGtXg59ou_SJ7-S41w
提取碼:8u0a
maxThreads="500" #最大的線程數量 200-400之間 minSpareThreads="10" #空閑時候最小的線程數量 #進行測試 基准測試 什么都沒有配置的時候的結果 #修改 優化 進行測試 與基准測試進行對比
圖片一:
圖片二:
圖片五:
圖片六:
apr 注釋掉8009 ajp
[root@docker01 ~]#