tomcat
成都創(chuàng)新互聯(lián)主營濂溪網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),濂溪h5小程序設(shè)計(jì)搭建,濂溪網(wǎng)站營銷推廣歡迎濂溪等地區(qū)企業(yè)咨詢
1、Tomcat 簡介Tomcat是Apache軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由
Apache、Sun和其他一些公司及個(gè)人共同開發(fā)而成。
Tomcat服務(wù)器是一個(gè)免費(fèi)的開放源代碼的Web應(yīng)用服務(wù)器,屬于輕量級(jí)應(yīng)用服務(wù)器。目前Tomcat最新版本為9.0。Java容器還有resin、weblogic等。
Tomcat官網(wǎng): http://tomcat.apache.org
2、Tomcat好幫手---JDK
JDK是 Java 語言的軟件開發(fā)工具包,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序。JDK是整個(gè)java開發(fā)的核心,它包含了JAVA的運(yùn)行環(huán)境(JVM+Java系統(tǒng)類庫)和JAVA工具。 http://www.oracle.com/technetwork/java/javase/downloads/index.html
端口: tomcat自身服務(wù)的端口:8005
tomcat和其他應(yīng)用通信的端口:8009 tomcat給客戶端瀏覽器訪問頁面使用的端口:8080
JVM基礎(chǔ)
一、JVM 虛擬機(jī)常識(shí)作為了解JVM 虛擬機(jī)的開始。我們很有必要弄明白以下兩個(gè)問題。
1.什么是JAVA虛擬機(jī)
所謂虛擬機(jī),就是一臺(tái)虛擬的計(jì)算機(jī)。他是一款軟件,用來執(zhí)行一系列虛擬計(jì)算機(jī)指令。大體上,虛
擬機(jī)可以分為系統(tǒng)虛擬機(jī)和程序虛擬機(jī)。大名鼎鼎的VisualBox、VMware就屬于系統(tǒng)虛擬機(jī)。他們完全是對(duì)物理計(jì)算機(jī)的仿真。提供了一個(gè)可以運(yùn)行完整操作系統(tǒng)的軟件平臺(tái)。
程序虛擬機(jī)的典型代表就是Java虛擬機(jī),它專門為執(zhí)行單個(gè)計(jì)算機(jī)程序而設(shè)計(jì),在Java虛擬機(jī)中執(zhí)行
的指令我們稱為Java字節(jié)碼指令。無論是系統(tǒng)虛擬機(jī)還是程序虛擬機(jī),在上面運(yùn)行的軟件都唄限制于虛擬機(jī)提供的資源中。
2.JAVA 如何做到跨平臺(tái)
同一個(gè)JAVA程序(JAVA字節(jié)碼的集合),通過JAVA虛擬機(jī)(JVM)運(yùn)行于各大主流操作系統(tǒng)平臺(tái)比如Windows、CentOS、Ubuntu等。程序以虛擬機(jī)為中介,來實(shí)現(xiàn)跨平臺(tái)。
1/14
3.虛擬機(jī)基本結(jié)構(gòu)我們要對(duì)JVM虛擬機(jī)的結(jié)構(gòu)有一個(gè)感性的認(rèn)知。畢竟我們不是編程人員,認(rèn)知程度達(dá)不到那么深入。
1)、類加載子系統(tǒng)
負(fù)責(zé)從文件系統(tǒng)或者網(wǎng)絡(luò)中加載Class信息,加載的類信息存放于一塊稱為方法區(qū)的內(nèi)存空間。除了類信息外,方法區(qū)中可能還會(huì)存放運(yùn)行時(shí)常量池信息,包括字符串字面量和數(shù)字量。
2/14
2)、Java堆
在虛擬機(jī)啟動(dòng)的時(shí)候建立,它是Java程序最主要的內(nèi)存工作區(qū)域。幾乎所有的Java對(duì)象實(shí)例都放Java堆中。堆空間是所有線程共享的,這是一塊與Java應(yīng)用密切相關(guān)的內(nèi)存區(qū)間。
3)、Java的NIO庫(直接內(nèi)存)
允許Java程序使用直接內(nèi)存。直接內(nèi)存是在Java堆外的、直接向系統(tǒng)申請(qǐng)的內(nèi)存區(qū)間。通常訪問直接內(nèi)存的速度會(huì)優(yōu)于Java堆。因此出于性能考慮,讀寫頻繁的場合可能會(huì)考慮使用直接內(nèi)存。由于直接內(nèi)存
在Java堆外,因此它的大小不會(huì)受限于Xmx指定的最大堆大小。但是系統(tǒng)內(nèi)存是有限的,Java堆和直接內(nèi)存的總和依然受限于操作系統(tǒng)能給出的最大內(nèi)存。
4)、垃圾回收系統(tǒng)
垃圾回收系統(tǒng)是Java虛擬機(jī)的重要組成部分,垃圾回收器可以對(duì)方法區(qū)、Java堆和直接內(nèi)存進(jìn)行回
收。
5)、Java棧
每一個(gè)Java虛擬機(jī)線程都有一個(gè)私有的Java棧。一個(gè)線程的Java棧在線程創(chuàng)建的時(shí)候被創(chuàng)建。Java保存著幀信息,Java棧中保存著局部變量、方法參數(shù),同時(shí)和Java方法的調(diào)用、返回密切相關(guān)。
4.虛擬機(jī)堆內(nèi)存結(jié)構(gòu)
JVM中堆空間可以分成三個(gè)大區(qū),年輕代、老年代、永久代(方法區(qū))。
新生代:新生區(qū)
類在這里產(chǎn)生和應(yīng)用,最后被垃圾回收。所有的類在伊甸區(qū)被new出來,當(dāng)伊甸區(qū)滿了,GC會(huì)對(duì)該區(qū)不用的對(duì)象銷毀,剩余有用的轉(zhuǎn)到幸存區(qū)。
老年代:老年區(qū)用于存放生成周期比較長的對(duì)象。
3/14
永久代:永久區(qū)存放JDK自帶的class,interface。
JVM 運(yùn)維實(shí)用排障工具
jps
1、jps
用來查看Java進(jìn)程的具體狀態(tài), 包括進(jìn)程ID,進(jìn)程啟動(dòng)的路徑及啟動(dòng)參數(shù)等等,與unix上的ps類似,只不過jps是用來顯示java進(jìn)程,可以把jps理解為ps的一個(gè)子集。
常用參數(shù)如下:
-q:忽略輸出的類名、Jar名以及傳遞給main方法的參數(shù),只輸出pid -m:輸出傳遞給main方法的參數(shù),如果是內(nèi)嵌的JVM則輸出為null -l:輸出完全的包名,應(yīng)用主類名,jar的完全路徑名-v:輸出傳給jvm的參數(shù)
注意: 使用jps 時(shí)的運(yùn)行賬戶要和JVM 虛擬機(jī)啟動(dòng)的賬戶一致。若啟動(dòng)JVM虛擬機(jī)是運(yùn)行的賬戶為www,那使用jps指令時(shí),也要使用www 用戶去指定。 sudo -u www jps
Example:
// 查看已經(jīng)運(yùn)行的JVM 進(jìn)程的實(shí)際啟動(dòng)參數(shù)
[root@java-tomcat1 ~]# jps -v
58154 Jps -Denv.class.path=.:/usr/local/java/lib:/usr/local/java/jre/lib:/usr/local/java/lib/tools.jar - Dapplication.home=/usr/local/java -Xms8m
58015 Bootstrap -Djava.util.logging.config.file=/data/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=/data/ application/tomcat -Dcatalina.home=/data/application/tomcat -Djava.io.tmpdir=/data/application/tomcat/temp
部署Tomcat
Tomcat,Resin,JBOSS,WebSphere,Weblogic屬于oracle
一、Tomcat Http Server 1.安裝JDK和tomcat
#tar xf apache-tomcat-7.0.34.tar.gz -C /usr/local/
#tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local
#ln -s /usr/local/jdk1.8.0_91 /usr/local/java 做了一個(gè)連接,或者是改名.或者直接mv
#ln -s /usr/local/apache-tomcat-7.0.34 /usr/local/tomcat
2.修改環(huán)境變量
4/14
PATH=$JAVA_HOME/bin:$PATH //使用JAVA_HOME下的JAVA命令 export JAVA_HOME PATH
CATALINA_HOME=/usr/local/tomcat //Tomcat安裝目錄 export CATALINA_HOME
讓環(huán)境變量生效
#source /etc/profile 3.檢測
#java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
4.啟動(dòng)Tomcat
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.7.0_11
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
tcp 0 0 ::ffff:127.0.0.1:8005 ::: LISTEN 6191/java
tcp 0 0 :::8009 ::: LISTEN 6191/java
tcp 0 0 :::8080 :::* LISTEN 6191/java
Tomcat服務(wù)器通過Connector連接器組件與客戶程序建立連接,Connector組件負(fù)責(zé)接收客戶的請(qǐng)
求,以及把Tomcat服務(wù)器的響應(yīng)結(jié)果發(fā)送給客戶。默認(rèn)情況下,Tomcat在server.xml中配置了兩種連接器:
第一個(gè)連接器監(jiān)聽8080端口,負(fù)責(zé)建立HTTP連接。在通過瀏覽器訪問Tomcat服務(wù)器的Web應(yīng)用時(shí),使用的就是這個(gè)連接器。
第二個(gè)連接器監(jiān)聽8009端口,負(fù)責(zé)和其他的HTTP服務(wù)器建立連接。在把Tomcat與其他HTTP服務(wù)器集成時(shí),就需要用到這個(gè)連接器。
8005是tomcat本身的端口
mysqladmin -u root password '123'
創(chuàng)建數(shù)據(jù)庫并指定字符集 create database jspgou default charset=utf8; flush privileges;
三、部署jspgou
docs examples host-manager manager ROOT
#unzip jsp…… .zip
#cp -r ROOT/ /usr/usr/local/tomcat/webapps/
四、更改數(shù)據(jù)庫鏈接
程序包內(nèi)vim /usr/local/tomcat/webapps/ROOT\WEB-INF\config\jdbc.properties文件第20行左右jdbc.url=jdbc:mysql://127.0.0.1:3306/創(chuàng)建好的數(shù)據(jù)庫名?characterEncoding=UTF-8 jdbc.username=root
jdbc.password=123
3.導(dǎo)入數(shù)據(jù):
mysql -u root -p123 -D jspgou < jspgou.sql
五、測試
系統(tǒng)管理后臺(tái)登錄:http://localhost:8080/jeeadmin/jspgou/index.do
用戶名:admin
5/14
密 碼:123456
tomcat基礎(chǔ)
1、tomcat主目錄介紹 [root@java-tomcat1 tomcat]# tree -L 1
.
├── bin #存放tomcat的管理腳本
├── BUILDING.txt
├── conf #tomcat的配置文件
├── CONTRIBUTING.md
├── lib #web應(yīng)用調(diào)用的jar包存放路徑
├── LICENSE
├── logs #tomcat日志存放目錄
├── NOTICE
├── README.md
├── RELEASE-NOTES
├── RUNNING.txt
├── temp #存放臨時(shí)文件
├── webapps #默認(rèn)網(wǎng)站發(fā)布目錄
└── work #存放編譯生產(chǎn)的.java與.class文件
2.webapps目錄介紹 [root@java-tomcat1 webapps]# tree -L 1
.
├── docs #tomcat的幫助文檔 ├── examples #web應(yīng)用實(shí)例 ├── host-manager #主機(jī)管理 ├── manager #管理 └── ROOT #默認(rèn)站點(diǎn)根目錄
3.Tomcat配置文件目錄介紹(conf) [root@java-tomcat1 conf]# tree -L 1
.
├── Catalina ├── catalina.policy
├── catalina.properties ├── context.xml
├── logging.properties
├── logs
├── server.xml # tomcat 主配置文件
├── server.xml.bak
├── server.xml.bak2
├── tomcat-users.xml # tomcat 管理用戶配置文件
├── tomcat-users.xsd
└── web.xml
4.Tomcat的管理
啟動(dòng)程序 #/data/application/tomcat/bin/startup.sh 關(guān)閉程序 #/data/application/tomcat/bin/shutdown.sh
5.Tomcat日志說明
[root@java-tomcat1 bin]# tail -f /data/application/tomcat/logs/catalina.out
org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/data/application/tomcat/webapps/host-manager] has finished in [21] ms
04-Jul-2019 22:40:00.026 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/data/ application/tomcat/webapps/manager]
04-Jul-2019 22:40:00.042 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/data/ application/tomcat/webapps/manager] has finished in [16] ms
6/14
04-Jul-2019 22:40:00.048 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"] 04-Jul-2019 22:40:00.058 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"] 04-Jul-2019 22:40:00.062 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 479 ms
發(fā)現(xiàn)啟動(dòng)時(shí)間較長,其中有一項(xiàng)的啟動(dòng)時(shí)間占據(jù)了絕大多數(shù)
24-Nov-2017 15:09:50.629 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /application/ apache-tomcat-8.0.27/webapps/memtest.war has finished in 58,892 ms
發(fā)現(xiàn)耗時(shí)在這里:是session引起的隨機(jī)數(shù)問題導(dǎo)致的。Tocmat的Session ID是通過SHA1算法計(jì)算得到
的,計(jì)算Session ID的時(shí)候必須有一個(gè)密鑰。為了提高安全性Tomcat在啟動(dòng)的時(shí)候會(huì)通過隨機(jī)生成一個(gè)密鑰。
解決Tomcat啟動(dòng)慢的方法Tomcat啟動(dòng)慢主要原因是生成隨機(jī)數(shù)的時(shí)候卡住了,導(dǎo)致tomcat啟動(dòng)不了。
是否有足夠的熵來用于產(chǎn)生隨機(jī)數(shù),可以通過如下命令來查看
[root@java-tomcat1 ~]# cat /proc/sys/kernel/random/entropy_avail 1065
為了加速/dev/random提供隨機(jī)數(shù)的速度,你可以通過操作設(shè)備的外設(shè),讓其產(chǎn)生大量的中斷,網(wǎng)絡(luò)傳輸數(shù)據(jù),按鍵,移動(dòng)鼠標(biāo),在命令行敲幾個(gè)不同的命令,俗稱聚氣。
方法一:
vim $TOMCAT_HOME/bin/catalina.sh ---添加如下內(nèi)容 if [[ "$JAVA_OPTS" != -Djava.security.egd= ]]; then
JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"
fi
這個(gè)系統(tǒng)屬性egd表示熵收集守護(hù)進(jìn)程(entropy gathering daemon)
方法二:
yum install rng-tools # 安裝rngd服務(wù)(熵服務(wù),增大熵池) systemctl start rngd # 啟動(dòng)服務(wù)
tomcat主配置文件詳情
Tomcat的配置文件:
Tomcat的配置文件默認(rèn)存放在/usr/local/tomcat/conf目錄中,主要有以下幾個(gè)
server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關(guān)配置信息;
web.xml:遵循Servlet規(guī)范標(biāo)準(zhǔn)的配置文件,用于配置servlet,并為所有的Web應(yīng)用程序提供包括MIME映射等默認(rèn)配置信息;
tomcat-user.xml:Realm認(rèn)證時(shí)用到的相關(guān)角色、用戶和密碼等信息;Tomcat自帶的manager默認(rèn)情
況下會(huì)用到此文件;在Tomcat中添加/刪除用戶,為用戶指定角色等將通過編輯此文件實(shí)現(xiàn);catalina.policy:Java相關(guān)的安全策略配置文件,在系統(tǒng)資源級(jí)別上提供訪問控制的能力;catalina.properties:Tomcat內(nèi)部package的定義及訪問相關(guān)的控制,也包括對(duì)通過類裝載器裝載的內(nèi)
容的控制;Tomcat6在啟動(dòng)時(shí)會(huì)事先讀取此文件的相關(guān)設(shè)置;
logging.properties: Tomcat6通過自己內(nèi)部實(shí)現(xiàn)的JAVA日志記錄器來記錄操作相關(guān)的日志,此文件即為日志記錄器相關(guān)的配置信息,可以用來定義日志記錄的組件級(jí)別以及日志文件的存在位置等;
context.xml:所有host的默認(rèn)配置信息;
1、Server組件:
shutdown:發(fā)往此Server用于實(shí)現(xiàn)關(guān)閉tomcat實(shí)例的命令字符串,默認(rèn)為SHUTDOWN;
2、Service組件:
7/14
Service主要用于關(guān)聯(lián)一個(gè)引擎和與此引擎相關(guān)的連接器,每個(gè)連接器通過一個(gè)特定的端口和協(xié)議接收入站
請(qǐng)求交將其轉(zhuǎn)發(fā)至關(guān)聯(lián)的引擎進(jìn)行處理。困此,Service要包含一個(gè)引擎、一個(gè)或多個(gè)連接器。如上面示例中的定義:
這定義了一個(gè)名為Catalina的Service,此名字也會(huì)在產(chǎn)生相關(guān)的日志信息時(shí)記錄在日志文件當(dāng)中。
Service相關(guān)的屬性:
className: 用于實(shí)現(xiàn)service的類名,一般都是org.apache.catalina.core.StandardService。name:此服務(wù)的名稱,默認(rèn)為Catalina;
3、Connector組件:
進(jìn)入Tomcat的請(qǐng)求可以根據(jù)Tomcat的工作模式分為如下兩類:
Tomcat作為應(yīng)用程序服務(wù)器:請(qǐng)求來自于前端的web服務(wù)器,這可能是Apache, IIS, Nginx等;Tomcat作為獨(dú)立服務(wù)器:請(qǐng)求來自于web瀏覽器;
Tomcat應(yīng)該考慮工作情形并為相應(yīng)情形下的請(qǐng)求分別定義好需要的連接器才能正確接收來自于客戶端的請(qǐng)求。一個(gè)引擎可以有一個(gè)或多個(gè)連接器,以適應(yīng)多種請(qǐng)求方式。
定義連接器可以使用多種屬性,有些屬性也只適用于某特定的連接器類型。一般說來,常見于server.xml中的連接器類型通常有4種:
1) HTTP連接器 2) SSL連接器 3) AJP 1.3連接器 4) proxy連接器如上面示例server.xml中定義的HTTP連接器:
4、Engine組件:
Engine是Servlet處理器的一個(gè)實(shí)例,即servlet引擎,默認(rèn)為定義在server.xml中的Catalina。Engine需要
defaultHost屬性來為其定義一個(gè)接收所有發(fā)往非明確定義虛擬主機(jī)的請(qǐng)求的host組件。如前面示例中定義的:
5、Host組件:
位于Engine容器中用于接收請(qǐng)求并進(jìn)行相應(yīng)處理的主機(jī)或虛擬主機(jī),如前面示例中的定義:
autoDeploy:在Tomcat處于運(yùn)行狀態(tài)時(shí)放置于appBase目錄中的應(yīng)用程序文件是否自動(dòng)進(jìn)行deploy;默認(rèn)為true;unpackWars:在啟用此webapps時(shí)是否對(duì)WAR格式的歸檔文件先進(jìn)行展開;默認(rèn)為true;
Tomcat管理功能使用
注意:測試功能,生產(chǎn)環(huán)境不要用
Tomcat管理功能用于對(duì)Tomcat自身以及部署在Tomcat上的應(yīng)用進(jìn)行管理的web應(yīng)用。在默認(rèn)情況下是處于禁用狀態(tài)的。如果需要開啟這個(gè)功能,就需要配置管理用戶,即配置tomcat-users.xml 文件。
[root@java-tomcat1 ~]# vim /data/application/tomcat/conf/tomcat-users.xml
[root@java-tomcat1 conf]# vim ../webapps/manager/META-INF/context.xml
注釋掉以下部分
重啟tomcat:
8/14
[root@java-tomcat1 bin]# ./shutdown.sh [root@java-tomcat1 bin]# ./startup.sh
輸入之前配置的賬戶與密碼即可:
報(bào)錯(cuò)
注意:導(dǎo)入數(shù)據(jù)庫時(shí)如果報(bào)錯(cuò)
1.把所有datetime類型的字段默認(rèn)值改成CURRENT_TIMESTAMP
2.凡是NOT NULL 的報(bào)錯(cuò) :%s/00000000/CURRENT_TIMESTAMP/
3.將壓縮包內(nèi) DB文件中jspgou.sql文件導(dǎo)入至創(chuàng)建好的jspgou數(shù)據(jù)庫中,如導(dǎo)入中出現(xiàn)執(zhí)行sql語句過長問題,請(qǐng)修改mysql配置文件my.cnf中max_allowed_packet參數(shù)為64m,默認(rèn)為1m
mysql數(shù)據(jù)庫:
[root@jspgou DB]# vim /etc/my.cnf sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUB explicit_defaults_for_timestamp=1
修改完配置文件后重新啟動(dòng)服務(wù)后在導(dǎo)入數(shù)據(jù)庫
tomcat多實(shí)例部署
多實(shí)例:1.單機(jī)多實(shí)例,發(fā)布網(wǎng)站的目錄不動(dòng)
2.tomcat在不同服務(wù)器上,通過共享網(wǎng)站目錄實(shí)現(xiàn)不同tomcat主機(jī)訪問統(tǒng)一網(wǎng)站
Tomcat 一機(jī)多實(shí)例多實(shí)例運(yùn)行不同的應(yīng)用(類似虛擬主機(jī))
9/14
多實(shí)例運(yùn)行相同的應(yīng)用(實(shí)現(xiàn)負(fù)載均衡,支持高并發(fā)處理,session問題)
tomcat單機(jī)多實(shí)例配置
CATALINA_BASE: 在一個(gè)工作目錄下創(chuàng)建多實(shí)例目錄
instance1: /usr/local/tomcat/instance1/{conf,logs,temp,work} 8081 8091
instance2: /usr/local/tomcat/instance2/{conf,logs,temp,work} 8082 8092
instance3: /usr/local/tomcat/instance3/{conf,logs,temp,work} 8083 8093
webapps:
拷貝原來單實(shí)例的webapps到/下 /webapps/ROOT
[root@www ~]# /usr/local/tomcat/bin/shutdown.sh
配置多實(shí)例步驟:
1.創(chuàng)建多實(shí)例目錄,根據(jù)實(shí)例多少確定分別創(chuàng)建目錄instance1 instance2 instance3,拷貝原來的conf,log,temp,work到3個(gè)目錄下
[root@www ~]# tree -d -L 2 /usr/local/tomcat/
/usr/local/tomcat/ ├── bin
├── instance1
│├── conf
│├── logs
│├── temp
│└── work ├── instance2
│├── conf
│├── logs
│├── temp
│└── work ├── instance3
│├── conf
│├── logs
│├── temp
│└── work └── lib
[root@www ~]# vim /usr/local/tomcat/instance1/conf/server.xml
......
[root@www ~]# vim /usr/local/tomcat/instance1/ins1.sh
10/14
[root@www ~]# /usr/local/tomcat/instance1/ins1.sh start [root@www ~]# /usr/local/tomcat/instance2/ins2.sh start [root@www ~]# /usr/local/tomcat/instance3/ins3.sh start
[root@www ~]# ss -tnlp |grep :80
LISTEN 0 100 :::8081 ::: users:(("java",pid=7288,fd=48)) LISTEN 0 100 :::8082 ::: users:(("java",pid=7468,fd=48)) LISTEN 0 100 :::8083 :::* users:(("java",pid=7496,fd=48))
LISTEN 0 1 ::ffff:127.0.0.1:8091 ::: users:(("java",pid=7288,fd=61)) LISTEN 0 1 ::ffff:127.0.0.1:8092 ::: users:(("java",pid=7468,fd=61)) LISTEN 0 1 ::ffff:127.0.0.1:8093 :::* users:(("java",pid=7496,fd=61))
11/14
tomcat負(fù)載均衡
Nginx配置
[root@www ~]# vim /usr/local/nginx/conf/nginx.conf
這個(gè)地方是 地址池,這里包含了后端服務(wù)器的地址和端口,這里的名字隨便啟。 http {
upstream tomcat_pool { #ip_hash; 最大失敗次數(shù) 失敗超時(shí)時(shí)間
server 192.168.122.105:8081 weight=1 max_fails=2 fail_timeout=2; server 192.168.122.105:8082 weight=1 max_fails=2 fail_timeout=2; server 192.168.122.105:8083 weight=1 max_fails=2 fail_timeout=2; server 192.168.122.105:8084 weight=1 max_fails=2 fail_timeout=2;
}
負(fù)載均衡的算法: RR round robin session ip_hash 是常用的負(fù)載均衡的算法
server { location / {
proxy_pass http://tomcat_pool; proxy_redirect off; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
會(huì)話保持,即將同一個(gè)client的訪問始終調(diào)度到同一后端實(shí)例。
服務(wù)調(diào)優(yōu)
12/14
1、日志格式配置
[root@java-tomcat1 ~]# cd /data/application/tomcat/conf/ [root@java-tomcat1 conf]# vim server.xml
pattern="%{X-Real-IP}i - %v %t "%r" - %s %b %T "%{Referer}i" "% {User-Agent}i" %a "-" "-"" /> [root@java-tomcat1 conf]# mkdir -p /data/www 2、JVM 參數(shù)優(yōu)化 [root@java-tomcat1 conf]# cd ../bin/ [root@java-tomcat1 bin]# cp catalina.sh catalina.sh.bak [root@java-tomcat1 bin]# vim catalina.sh JAVA_OPTS="$JAVA_OPTS -Xms4096m -Xmx4096m -XX:PermSize=1024m -XX:MaxPermSize=2048m" 3、開啟GC日志 JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/logs/gc-%t.log" [root@java-tomcat1 bin]# mkdir /data/logs 設(shè)置初始堆、非堆內(nèi)存大小以及年輕代 -Xms50m –Xmx200m -XX:PermSize=30m -XX:MaxPermSize=60m -XX:+PrintGCTimeStamps (打印垃圾回收時(shí)間信息時(shí)的時(shí)間格式) -XX:+PrintGCDetails (打印垃圾回收詳情) -Xms:初始堆大小,默認(rèn)為物理內(nèi)存的1/64(<1GB) -Xmx:最大堆大小 13/14 14/14vim catalina.sh
-Xloggc:eclipse_gc.log (設(shè)置垃圾回收日志打印的文件,文件名稱可以自定義)
-XX:PermSize:設(shè)置永久代(perm gen)初始值。默認(rèn)值為物理內(nèi)存的1/64。
-XX:MaxPermSize:設(shè)置持久代最大值。物理內(nèi)存的1/4。
-Xmn:新生代的內(nèi)存空間大小,注意:此處的大小是(eden+ 2 survivor space)。與jmap -heap中顯示的
New gen是不同的。整個(gè)堆大小=新生代大小 + 老生代大小 + 永久代大小。
網(wǎng)頁標(biāo)題:tomcat優(yōu)化jvm參數(shù)
分享鏈接:http://weahome.cn/article/gpdggj.html