【魚說科技】魚說科技入駐華為云市場,科技擊活文化,文化賦能產業!
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進行溝通 |
| ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
異步類似于有一張表,根據對應的信息找對應的頁面
同步類似于在一個目錄中,在每一個文件中找想要的信息

## 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

我們需要修改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后一定要查看進程和端口在不在
```

tomcat8.5以后的版本默認只允許機訪問,換需要修改webapps/manager/META-INF/context.xml
```sh
#將value class的行注釋掉即可
[root@localhost tomcat]# cat webapps/manager/META-INF/context.xml
```

## 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

```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




- 我們去重啟一下tomcat
- jpress的配置文件位于webapps/jpress/WEB-INF/classes, db.properties
- 安裝完成默認是進入整體的首頁,我們可以使用單獨賬號進行登錄
- 然后去訪問http://192.168.81.210:8080/jpress/admin


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

- 在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

## 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 ```  ```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小時內刪除侵權內容。