溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

tomcat 優(yōu)化 jvm參數(shù)

發(fā)布時(shí)間:2020-07-26 10:48:06 來(lái)源:網(wǎng)絡(luò) 閱讀:174 作者:w王不二 欄目:系統(tǒng)運(yùn)維

tomcat

1、Tomcat 簡(jiǎn)介Tomcat是Apache軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由
Apache、Sun和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。
Tomcat服務(wù)器是一個(gè)免費(fèi)的開(kā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 語(yǔ)言的軟件開(kāi)發(fā)工具包,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的java應(yīng)用程序。JDK是整個(gè)java開(kāi)發(fā)的核心,它包含了JAVA的運(yùn)行環(huán)境(JVM+Java系統(tǒng)類庫(kù))和JAVA工具。 http://www.oracle.com/technetwork/java/javase/downloads/index.html

端口: tomcat自身服務(wù)的端口:8005
tomcat和其他應(yīng)用通信的端口:8009 tomcat給客戶端瀏覽器訪問(wèn)頁(yè)面使用的端口:8080

JVM基礎(chǔ)

一、JVM 虛擬機(jī)常識(shí)作為了解JVM 虛擬機(jī)的開(kāi)始。我們很有必要弄明白以下兩個(gè)問(wèn)題。

1.什么是JAVA虛擬機(jī)

所謂虛擬機(jī),就是一臺(tái)虛擬的計(jì)算機(jī)。他是一款軟件,用來(lái)執(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é)碼指令。無(wú)論是系統(tǒng)虛擬機(jī)還是程序虛擬機(jī),在上面運(yùn)行的軟件都唄限制于虛擬機(jī)提供的資源中。

2.JAVA 如何做到跨平臺(tái)

同一個(gè)JAVA程序(JAVA字節(jié)碼的集合),通過(guò)JAVA虛擬機(jī)(JVM)運(yùn)行于各大主流操作系統(tǒng)平臺(tái)比如Windows、CentOS、Ubuntu等。程序以虛擬機(jī)為中介,來(lái)實(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庫(kù)(直接內(nèi)存)

允許Java程序使用直接內(nèi)存。直接內(nèi)存是在Java堆外的、直接向系統(tǒng)申請(qǐng)的內(nèi)存區(qū)間。通常訪問(wèn)直接內(nèi)存的速度會(huì)優(yōu)于Java堆。因此出于性能考慮,讀寫(xiě)頻繁的場(chǎng)合可能會(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出來(lái),當(dāng)伊甸區(qū)滿了,GC會(huì)對(duì)該區(qū)不用的對(duì)象銷毀,剩余有用的轉(zhuǎn)到幸存區(qū)。

老年代:老年區(qū)用于存放生成周期比較長(zhǎng)的對(duì)象。

3/14

永久代:永久區(qū)存放JDK自帶的class,interface。

JVM 運(yùn)維實(shí)用排障工具

jps

1、jps

用來(lái)查看Java進(jìn)程的具體狀態(tài), 包括進(jìn)程ID,進(jìn)程啟動(dòng)的路徑及啟動(dòng)參數(shù)等等,與unix上的ps類似,只不過(guò)jps是用來(lái)顯示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)境變量

vim /etc/profile JAVA_HOME=/usr/local/java

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.檢測(cè)
#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

/usr/local/tomcat/bin/startup.sh //啟動(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

netstat -tnlp |grep java

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

/usr/local/tomcat/bin/shutdown.sh //關(guān)閉tomcat關(guān)于tomcat端口:

Tomcat服務(wù)器通過(guò)Connector連接器組件與客戶程序建立連接,Connector組件負(fù)責(zé)接收客戶的請(qǐng)
求,以及把Tomcat服務(wù)器的響應(yīng)結(jié)果發(fā)送給客戶。默認(rèn)情況下,Tomcat在server.xml中配置了兩種連接器:
第一個(gè)連接器監(jiān)聽(tīng)8080端口,負(fù)責(zé)建立HTTP連接。在通過(guò)瀏覽器訪問(wèn)Tomcat服務(wù)器的Web應(yīng)用時(shí),使用的就是這個(gè)連接器。

第二個(gè)連接器監(jiān)聽(tīng)8009端口,負(fù)責(zé)和其他的HTTP服務(wù)器建立連接。在把Tomcat與其他HTTP服務(wù)器集成時(shí),就需要用到這個(gè)連接器。
8005是tomcat本身的端口

  1. 測(cè)試
    http://192.168.2.251:8080/ 二、安裝MySQL(略) 使用mysql(略)1.使用mariadb
    yum -y install mariadb mariadb-server systemctl start mariadb

mysqladmin -u root password '123'

創(chuàng)建數(shù)據(jù)庫(kù)并指定字符集 create database jspgou default charset=utf8; flush privileges;

三、部署jspgou

ls /usr/local/tomcat/webapps/ //默認(rèn)網(wǎng)站的基目錄base

docs examples host-manager manager ROOT

ls /usr/local/tomcat/webapps/ROOT //默認(rèn)網(wǎng)站的主目錄

#unzip jsp…… .zip

#cp -r ROOT/ /usr/usr/local/tomcat/webapps/

四、更改數(shù)據(jù)庫(kù)鏈接

程序包內(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ù)庫(kù)名?characterEncoding=UTF-8 jdbc.username=root
jdbc.password=123

3.導(dǎo)入數(shù)據(jù):
mysql -u root -p123 -D jspgou < jspgou.sql

五、測(cè)試
系統(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日志說(shuō)明
[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í)間較長(zhǎng),其中有一項(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ù)問(wèn)題導(dǎo)致的。Tocmat的Session ID是通過(guò)SHA1算法計(jì)算得到

的,計(jì)算Session ID的時(shí)候必須有一個(gè)密鑰。為了提高安全性Tomcat在啟動(dòng)的時(shí)候會(huì)通過(guò)隨機(jī)生成一個(gè)密鑰。

解決Tomcat啟動(dòng)慢的方法Tomcat啟動(dòng)慢主要原因是生成隨機(jī)數(shù)的時(shí)候卡住了,導(dǎo)致tomcat啟動(dòng)不了。
是否有足夠的熵來(lái)用于產(chǎn)生隨機(jī)數(shù),可以通過(guò)如下命令來(lái)查看

[root@java-tomcat1 ~]# cat /proc/sys/kernel/random/entropy_avail 1065

為了加速/dev/random提供隨機(jī)數(shù)的速度,你可以通過(guò)操作設(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中添加/刪除用戶,為用戶指定角色等將通過(guò)編輯此文件實(shí)現(xiàn);catalina.policy:Java相關(guān)的安全策略配置文件,在系統(tǒng)資源級(jí)別上提供訪問(wèn)控制的能力;catalina.properties:Tomcat內(nèi)部package的定義及訪問(wèn)相關(guān)的控制,也包括對(duì)通過(guò)類裝載器裝載的內(nèi)
容的控制;Tomcat6在啟動(dòng)時(shí)會(huì)事先讀取此文件的相關(guān)設(shè)置;
logging.properties: Tomcat6通過(guò)自己內(nèi)部實(shí)現(xiàn)的JAVA日志記錄器來(lái)記錄操作相關(guān)的日志,此文件即為日志記錄器相關(guān)的配置信息,可以用來(lái)定義日志記錄的組件級(jí)別以及日志文件的存在位置等;

context.xml:所有host的默認(rèn)配置信息;

1、Server組件:
<Server port=”8005” shutdown=”SHUTDOWN”> port: 接收shutdown指令的端口,默認(rèn)僅允許通過(guò)本機(jī)訪問(wèn),默認(rèn)為8005;
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è)連接器通過(guò)一個(gè)特定的端口和協(xié)議接收入站

請(qǐng)求交將其轉(zhuǎn)發(fā)至關(guān)聯(lián)的引擎進(jìn)行處理。困此,Service要包含一個(gè)引擎、一個(gè)或多個(gè)連接器。如上面示例中的定義:

<Service name=”Catalina”>
這定義了一個(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)求來(lái)自于前端的web服務(wù)器,這可能是Apache, IIS, Nginx等;Tomcat作為獨(dú)立服務(wù)器:請(qǐng)求來(lái)自于web瀏覽器;
Tomcat應(yīng)該考慮工作情形并為相應(yīng)情形下的請(qǐng)求分別定義好需要的連接器才能正確接收來(lái)自于客戶端的請(qǐng)求。一個(gè)引擎可以有一個(gè)或多個(gè)連接器,以適應(yīng)多種請(qǐng)求方式。

定義連接器可以使用多種屬性,有些屬性也只適用于某特定的連接器類型。一般說(shuō)來(lái),常見(jiàn)于server.xml中的連接器類型通常有4種:
1) HTTP連接器 2) SSL連接器 3) AJP 1.3連接器 4) proxy連接器如上面示例server.xml中定義的HTTP連接器:
<Connector port=”8080″ protocol=”HTTP/1.1″ maxThreads=”150″ connectionTimeout=”20000″ redirectPort=”8443″/>
4、Engine組件:
Engine是Servlet處理器的一個(gè)實(shí)例,即servlet引擎,默認(rèn)為定義在server.xml中的Catalina。Engine需要
defaultHost屬性來(lái)為其定義一個(gè)接收所有發(fā)往非明確定義虛擬主機(jī)的請(qǐng)求的host組件。如前面示例中定義的:

<Engine name=”Catalina” defaultHost=”localhost”>
5、Host組件:
位于Engine容器中用于接收請(qǐng)求并進(jìn)行相應(yīng)處理的主機(jī)或虛擬主機(jī),如前面示例中的定義:

<Host name=”localhost” appBase=”webapps” unpackWARs=”true” autoDeploy=”true” xmlValidation=”false” xmlNamespaceAware=”false”> </Host>

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)行展開(kāi);默認(rèn)為true;

Tomcat管理功能使用

注意:測(cè)試功能,生產(chǎn)環(huán)境不要用

Tomcat管理功能用于對(duì)Tomcat自身以及部署在Tomcat上的應(yīng)用進(jìn)行管理的web應(yīng)用。在默認(rèn)情況下是處于禁用狀態(tài)的。如果需要開(kāi)啟這個(gè)功能,就需要配置管理用戶,即配置tomcat-users.xml 文件。

[root@java-tomcat1 ~]# vim /data/application/tomcat/conf/tomcat-users.xml <role rolename="manager-gui"/>

<role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/>

<user username="tomcat" password="tomcat" roles="manager-status,manager-gui,manager-script,manager-jmx"/> </tomcat-users> # 在此行前加入上面三行

[root@java-tomcat1 conf]# vim ../webapps/manager/META-INF/context.xml

注釋掉以下部分

<!--

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.\d+.\d+.\d+|::1|0:0:0:0:0:0:0:1" />

-->

重啟tomcat:

8/14

[root@java-tomcat1 bin]# ./shutdown.sh [root@java-tomcat1 bin]# ./startup.sh

輸入之前配置的賬戶與密碼即可:

報(bào)錯(cuò)

注意:導(dǎo)入數(shù)據(jù)庫(kù)時(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ù)庫(kù)中,如導(dǎo)入中出現(xiàn)執(zhí)行sql語(yǔ)句過(guò)長(zhǎng)問(wèn)題,請(qǐng)修改mysql配置文件my.cnf中max_allowed_packet參數(shù)為64m,默認(rèn)為1m

mysql數(shù)據(jù)庫(kù):
[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ù)庫(kù)

tomcat多實(shí)例部署

多實(shí)例:1.單機(jī)多實(shí)例,發(fā)布網(wǎng)站的目錄不動(dòng)

2.tomcat在不同服務(wù)器上,通過(guò)共享網(wǎng)站目錄實(shí)現(xiàn)不同tomcat主機(jī)訪問(wèn)統(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問(wèn)題)

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:

拷貝原來(lái)單實(shí)例的webapps到/下 /webapps/ROOT

  1. 以單實(shí)例為基礎(chǔ)

[root@www ~]# /usr/local/tomcat/bin/shutdown.sh

配置多實(shí)例步驟:

1.創(chuàng)建多實(shí)例目錄,根據(jù)實(shí)例多少確定分別創(chuàng)建目錄instance1 instance2 instance3,拷貝原來(lái)的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

  1. 配置實(shí)例server.xml

[root@www ~]# vim /usr/local/tomcat/instance1/conf/server.xml <Server port="8091" shutdown="SHUTDOWN"> //修改8005
<Connector port="8081" protocol="HTTP/1.1" //刪掉8080和8009的配置,添加此配置 connectionTimeout="20000"
redirectPort="8443" />

<Host name="localhost" appBase="/webapps" //修改網(wǎng)站基準(zhǔn)目錄 unpackWARs="true" autoDeploy="true">
......

  1. 腳本內(nèi)容

[root@www ~]# vim /usr/local/tomcat/instance1/ins1.sh

10/14

  1. 啟動(dòng)測(cè)試

[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的訪問(wèn)始終調(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

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/www/logs" prefix="jenkins-" suffix="-access_log"

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、開(kāi)啟GC日志

vim catalina.sh

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
-Xloggc:eclipse_gc.log (設(shè)置垃圾回收日志打印的文件,文件名稱可以自定義)

-XX:+PrintGCTimeStamps (打印垃圾回收時(shí)間信息時(shí)的時(shí)間格式) -XX:+PrintGCDetails (打印垃圾回收詳情)
-XX:PermSize:設(shè)置永久代(perm gen)初始值。默認(rèn)值為物理內(nèi)存的1/64。
-XX:MaxPermSize:設(shè)置持久代最大值。物理內(nèi)存的1/4。

-Xms:初始堆大小,默認(rèn)為物理內(nèi)存的1/64(<1GB) -Xmx:最大堆大小
-Xmn:新生代的內(nèi)存空間大小,注意:此處的大小是(eden+ 2 survivor space)。與jmap -heap中顯示的
New gen是不同的。整個(gè)堆大小=新生代大小 + 老生代大小 + 永久代大小。

13/14

14/14

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI