如何做旅游網(wǎng)站的旅行家網(wǎng)址推廣
tomcat
1、tomcat
·tomcat和
php`一樣,都是用來處理動(dòng)態(tài)頁面的。
tomcat也可以作為web應(yīng)用服務(wù)器,開源的。
php .php
tomcat .jsp
nginx .html
tomcat 是用Java代碼寫的程序,運(yùn)行的是Java的web應(yīng)用程序。
tomcat的特點(diǎn)和功能:
1、servlet
容器:執(zhí)行java servlet
,服務(wù)端的java程序,處理客戶端的http請(qǐng)求,以及響應(yīng)。
2、jsp
容器,Javaserver page
這是一種動(dòng)態(tài)頁面的技術(shù),可以在html的頁面里面嵌入Java代碼。
3、自身也是一個(gè)http的服務(wù)器。
4、tomcat
是一個(gè)輕量級(jí)的動(dòng)態(tài)頁面的處理程序,高并發(fā)場景不使用。
優(yōu)化,tomcat自身的優(yōu)化,以及系統(tǒng)的內(nèi)核優(yōu)化,jvm的優(yōu)化。
servlet
:
-
是java語言中用來開發(fā)web應(yīng)用程序的關(guān)鍵組件。處理http請(qǐng)求,生成動(dòng)態(tài)內(nèi)容,以及響應(yīng)客戶端的請(qǐng)求。
-
處理http請(qǐng)求
-
生成動(dòng)態(tài)內(nèi)容
-
處理Java的業(yè)務(wù)邏輯
-
會(huì)話管理,保持用戶的狀態(tài)信息,購物車同步,用戶登錄等等。
-
也可以轉(zhuǎn)發(fā)nginx的動(dòng)態(tài)請(qǐng)求到數(shù)據(jù)庫。
jsp
-
web應(yīng)用程序的界面,這個(gè)界面的語言是用Java實(shí)現(xiàn)的。
-
.jsp為結(jié)尾的文件
-
index.jsp
2、tomcat
的組件:
-
connector
:負(fù)責(zé)對(duì)外接受和響應(yīng)請(qǐng)求,它是tomcat于客戶端溝通的一個(gè)樞紐,監(jiān)聽端口接受外界請(qǐng)求。 -
端口:8080
-
接收到請(qǐng)求之后,傳遞給其他組件進(jìn)行處理,處理完成之后回到connector,再響應(yīng)客戶端。
-
container
:負(fù)責(zé)處理業(yè)務(wù)邏輯,engin host contxt wrapper
四個(gè)功能組成 -
engine:用來管理多個(gè)虛擬主機(jī)host,一個(gè)service只能有一個(gè)engine。
-
host:一個(gè)host就是一個(gè)主機(jī),也可以叫站點(diǎn),通過配置host,可以添加多個(gè)站點(diǎn)。
-
context :一個(gè)context代表一個(gè)web應(yīng)用。
-
wrapper:封裝器,負(fù)責(zé)處理最底層的邏輯。
service:對(duì)外提供外部服務(wù),包含connector和container
tomcat可以有多個(gè)service,每個(gè)service之間是互相獨(dú)立的。
3、tomcat目錄的作用:
bin
:存放啟動(dòng)和關(guān)閉tomcat腳本的文件。startup.sh
shutdow.sh
conf
存放tomcat的主配置文件,server.xml主配置文件
context.xml
:host的默認(rèn)配置信息
tomcat-user.xml
登錄時(shí)認(rèn)證用戶和密碼的相關(guān)信息,manager文件必須要賦權(quán)修改之后才能打開。
lib
:tomacat運(yùn)行時(shí)需要的jar包。一般不動(dòng)
logs
:日志文件,catalina.out主日志文件。
temp
:存放tomcat運(yùn)行時(shí)產(chǎn)生的文件。
webapps
:部署web應(yīng)用的目錄,類似于nginx的html。
4、tomcat服務(wù)部署
---------------------Tomcat 服務(wù)部署-------------------------
在部署 Tomcat 之前必須安裝好 jdk,因?yàn)?jdk 是 Tomcat 運(yùn)行的必要環(huán)境。
1.關(guān)閉防火墻,將安裝 Tomcat 所需軟件包傳到/opt目錄下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gzsystemctl stop firewalld
systemctl disable firewalld
setenforce 02.安裝JDK
cd /opt
rpm -ivh jdk-8u201-linux-x64.rpm
java -version3.設(shè)置JDK環(huán)境變量
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH##解釋:
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64:
這個(gè)命令設(shè)置了一個(gè)名為JAVA_HOME的環(huán)境變量,它指向Java JDK的安裝路徑。
這對(duì)于告訴系統(tǒng)和其他應(yīng)用程序Java的安裝位置非常重要。你需要將路徑替換為你實(shí)際安裝Java的路徑。export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:
這個(gè)命令設(shè)置了一個(gè)名為CLASSPATH的環(huán)境變量,它用于指定Java類的搜索路徑。
在這個(gè)命令中,.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar 表示當(dāng)前目錄(.)
以及Java工具庫(tools.jar)和Java遠(yuǎn)程調(diào)試庫(dt.jar)的路徑。這些庫通常包含一些Java開發(fā)所需的類。export PATH=$JAVA_HOME/bin:$PATH:
這個(gè)命令將Java可執(zhí)行文件的路徑添加到系統(tǒng)的PATH環(huán)境變量中。
這使得你可以在終端中直接運(yùn)行Java工具,而不需要輸入完整的路徑。
這將Java的bin目錄添加到了PATH中,使得java、javac等命令可以直接運(yùn)行。source /etc/profile.d/java.sh
java -version----------------------------------------------------------------------------------------------------------CLASSPATH:編譯、運(yùn)行Java程序時(shí),JRE會(huì)去該變量指定的路徑中搜索所需的類(.class)文件。
dt.jar:是關(guān)于運(yùn)行環(huán)境的類庫,主要是可視化的 swing 的包。
tools.jar:主要是一些jdk工具的類庫,包括javac、java、javap(jdk自帶的一個(gè)反編譯工具)、javadoc等。
JDK (Java Development Kit):JDK是Java開發(fā)工具包,它是用于開發(fā)Java應(yīng)用程序的軟件包。
JDK包括了編譯器(javac)、調(diào)試器、各種工具、Java標(biāo)準(zhǔn)類庫(Java API)、以及Java文檔等。
JDK是開發(fā)者用來創(chuàng)建、編譯和運(yùn)行Java應(yīng)用程序的重要組件。JRE (Java Runtime Environment):JRE是Java運(yùn)行時(shí)環(huán)境,它是用于執(zhí)行Java應(yīng)用程序的部分。
JRE包括了Java虛擬機(jī)(JVM)以及Java類庫(Java API),這使得用戶能夠在計(jì)算機(jī)上運(yùn)行已編譯的Java程序,
而不需要進(jìn)行開發(fā)。JRE是終端用戶需要安裝的部分,以便能夠運(yùn)行Java應(yīng)用程序。JVM (Java Virtual Machine):JVM是Java虛擬機(jī),它是Java應(yīng)用程序在計(jì)算機(jī)上運(yùn)行的核心組件。
JVM負(fù)責(zé)將編譯后的Java字節(jié)碼(.class文件)解釋或編譯成本地機(jī)器碼,以便計(jì)算機(jī)能夠執(zhí)行它。JVM提供了內(nèi)存管理、垃圾回收、線程管理等功能,以確保Java程序在不同平臺(tái)上具有相似的行為。首先使用文本工具編寫java源代碼,比如 Hello.java ;
在命令行中,輸入命令:javac
5、tomacat安裝
1、安裝啟動(dòng)Tomcat
安裝啟動(dòng)Tomcat
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
##啟動(dòng)tomcat ##
#后臺(tái)啟動(dòng)
/usr/local/tomcat/bin/startup.sh
或
/usr/local/tomcat/bin/catalina.sh start#前臺(tái)啟動(dòng)
/usr/local/tomcat/bin/catalina.sh run netstat -natp | grep 8080瀏覽器訪問Tomcat的默認(rèn)主頁 http://192.168.233.21:80805.優(yōu)化tomcat啟動(dòng)速度
第一次啟動(dòng)tomcat可能會(huì)發(fā)現(xiàn) Tomcat 啟動(dòng)很慢,默認(rèn)情況下可能會(huì)需要幾十秒,可以修改jdk參數(shù)進(jìn)行改。
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改securerandom.source=file:/dev/urandom/dev/urandom是/dev/random的非阻塞版本,/dev/random的 random pool 依賴于系統(tǒng)中斷,因此在系統(tǒng)的中斷數(shù)不足時(shí),
/dev/random 設(shè)備會(huì)一直封鎖,嘗試讀取的進(jìn)程就會(huì)進(jìn)入等待狀態(tài),直到系統(tǒng)的中斷數(shù)充分夠用,
/dev/random設(shè)備可以保證數(shù)據(jù)的隨機(jī)性。 /dev/urandom不依賴系統(tǒng)的中斷,也就不會(huì)造成進(jìn)程忙等待,
但是數(shù)據(jù)的隨機(jī)性也不高,所以該隨機(jī)數(shù)的安全性理論上不高。如果應(yīng)用對(duì)安全性要求很高,那么應(yīng)該使用/dev/random。
------主要目錄說明----------------------------------------------------------------------------------------------
●bin:存放啟動(dòng)和關(guān)閉Tomcat的腳本文件,比較常用的是 catalina.sh、startup.sh、shutdown.sh三個(gè)文件
●conf:存放Tomcat 服務(wù)器的各種配置文件,比較常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四個(gè)文件。
① server.xml: Tomcat的主配置文件,包含Service,Connector,Engine,Realm,Valve,Hosts主組件的相關(guān)配置信息;
② context.xml:所有host的默認(rèn)配置信息;
③ tomcat-user.xml:Realm認(rèn)證時(shí)用到的相關(guān)角色、用戶和密碼等信息,Tomcat自帶的manager默認(rèn)情況下會(huì)用到此文件,在Tomcat中添加/刪除用戶,為用戶指|定角色等將通過編輯此文件實(shí)現(xiàn);
④ web.xml:遵循Servlet規(guī)范標(biāo)準(zhǔn)的配置文件,用于配置servlet,并為所有的web應(yīng)用程序提供包括MIME映射等默認(rèn)配置信息;
●lib:存放Tomcat運(yùn)行需要的庫文件的jar 包,一般不作任何改動(dòng),除非連接第三方服務(wù),比如 redis,那就需要添加相對(duì)應(yīng)的jar 包
●logs:存放 Tomcat 執(zhí)行時(shí)的日志
●temp:存放 Tomcat 運(yùn)行時(shí)產(chǎn)生的文件
●webapps:存放 Tomcat 默認(rèn)的 Web 應(yīng)用部署目錄
●work:Tomcat工作日錄,存放jsp編譯后產(chǎn)生的class文件,一般清除Tomcat緩存的時(shí)候會(huì)使用到
●src:存放Tomcat 的源代碼●doc:存放Tomcat文檔
----------------------------------------------------------------------------------------------------------查看manager文件:
cd /usr/local/tomcat/webapps/manager/META-INF
vim context.xml<Context antiResourceLocking="false" privileged="true" ><Valve className="org.apache.catalina.valves.RemoteAddrValve"allow=".*" /> #允許所有主機(jī)訪問。cd /usr/local/tomcat/conf##設(shè)置登錄頁面:
在conf,tomcat-users.xml中,添加賬戶密碼
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>cd ..
cd bin
[root@test4 bin]# ./shutdown.sh
[root@test4 bin]# ./startup.sh
[root@test4 bin]# ss -antp | grep 8080
6、配置tomcat的虛擬主機(jī)
---------------------Tomcat 虛擬主機(jī)配置-------------------------
很多時(shí)候公司會(huì)有多個(gè)項(xiàng)目需要運(yùn)行,一般不會(huì)是在一臺(tái)服務(wù)器上運(yùn)行多個(gè) Tomcat 服務(wù),這樣會(huì)消耗太多的系統(tǒng)資源。此時(shí), 就需要使用到 Tomcat 虛擬主機(jī)。
例如現(xiàn)在新增兩個(gè)域名 www.kgc.com 和 www.benet.com, 希望通過這兩個(gè)域名訪問到不同的項(xiàng)目內(nèi)容。1.創(chuàng)建 kgc 和 benet 項(xiàng)目目錄和文件
mkdir /usr/local/tomcat/webapps/kgc
mkdir /usr/local/tomcat/webapps/benet
echo "This is kgc page\!" > /usr/local/tomcat/webapps/kgc/index.jsp
echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp2.修改 Tomcat 主配置文件 server.xml ##等于是nginx.conf
vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host> <Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>
##添加網(wǎng)站
----------------------------------------------------------------------------------------------------------Host name:主機(jī)名
appBase:Tomcat程序工作目錄,即存放web應(yīng)用程序的目錄;相對(duì)路徑為webapps,絕對(duì)路徑為 /usr/local/tomcat/webapps
unpackWARs:在啟用此webapps時(shí)是否對(duì)WAR格式的歸檔文件先進(jìn)行展開;默認(rèn)為true
autoDeploy:在Tomcat處于運(yùn)行狀態(tài)時(shí)放置于appBase目錄中的應(yīng)用程序文件是否自動(dòng)進(jìn)行deploy;默認(rèn)為true
xmlValidation:是否驗(yàn)證xml文件執(zhí)行有效性檢驗(yàn)的標(biāo)志
xmlNamespaceAware:是否啟用xml命名空間,設(shè)置該值與xmlValidation為true,表示對(duì)web.xml文件執(zhí)行有效性檢驗(yàn)docBase:相應(yīng)的Web應(yīng)用程序的存放位置;也可以使用相對(duì)路徑,起始路徑為此Context所屬Host中appBase定義的路徑;
path:相對(duì)于Web服務(wù)器根路徑而言的URI;如果為空“”,則表示為此webapp的根路徑 / ;
reloadable:是否允許重新加載此context相關(guān)的Web應(yīng)用程序的類;默認(rèn)為false
首先使用文本工具編寫java源代碼,比如 Hello.java ;
在命令行中,輸入命令:javac Hello.java,對(duì)源代碼進(jìn)行編譯,生成 class 字節(jié)碼文件;
編譯完成后,如果沒有報(bào)錯(cuò)信息,輸入命令:java Hello,運(yùn)行 class 字節(jié)碼文件,由 JVM 對(duì)字節(jié)碼進(jìn)行解釋和運(yùn)行,
打印 “Hello World”。vim Hello.javapublic class Hello { public static void main(String[] args){System.out.println("Hello world!");}
}javac Hello.java
java Hellopublic: 這是一個(gè)訪問修飾符,表示類是公共的,可以從其他地方訪問。
class: 關(guān)鍵字用于定義一個(gè)類。
Hello: 這是類的名稱,這里是一個(gè)叫做 "Hello" 的類。public static void main(String[] args){
public: 訪問修飾符,表示這個(gè)方法是公共的,可以從其他地方訪問。
static: 靜態(tài)修飾符,表示這個(gè)方法屬于類而不是實(shí)例,可以通過類名直接調(diào)用。
void: 這是方法的返回類型,void 表示方法沒有返回值。
main: 這是方法的名稱,是程序的入口點(diǎn),當(dāng)程序運(yùn)行時(shí)會(huì)從這里開始執(zhí)行。
(String[] args): 這是方法的參數(shù)列表,args 是一個(gè)字符串?dāng)?shù)組,可以在命令行傳遞參數(shù)給程序。System.out.println("Hello world!");
System.out: System 是一個(gè)類,out 是這個(gè)類的一個(gè)靜態(tài)成員,它代表標(biāo)準(zhǔn)輸出流。
println: 這是輸出方法的名稱,它會(huì)在控制臺(tái)輸出一行內(nèi)容。
"Hello world!": 這是要輸出的內(nèi)容,是一個(gè)字符串。
7、tomcat的優(yōu)化:
tomcat自身的優(yōu)化
內(nèi)核優(yōu)化
jvm優(yōu)化
tomcat的并發(fā)處理能力不強(qiáng),大項(xiàng)目不使用tomcat作為轉(zhuǎn)發(fā)動(dòng)態(tài)的中間件(k8s集群,python,rubby),小項(xiàng)目會(huì)使用(內(nèi)部使用)。動(dòng)靜分離。
7.1、優(yōu)化tomcat的啟動(dòng)速度
file:/dev/urandom,—非阻塞的版本,不依賴系統(tǒng)的終端,進(jìn)程忙也不會(huì)進(jìn)入等待狀態(tài)。所以處理速度相對(duì)比較快。
如果對(duì)應(yīng)用的安全性要求比較高,/dev/random
默認(rèn)配置不適合生成環(huán)境,可能頻繁的出現(xiàn)假死,需要不停的重啟。
根據(jù)生產(chǎn)環(huán)境的實(shí)際情況,自行測試。
port 8080 http
8443 https 443
接受客戶端https的請(qǐng)求
<Connector port="8080" protocol="HTTP/1.1"70 connectionTimeout="20000"71 redirectPort="8443"72 maxThreads="500"73 />
- maxThreads:tomcat使用線程來處理接收請(qǐng)求的個(gè)數(shù)。tomcat最多可以創(chuàng)建多少個(gè)線程。默認(rèn)200個(gè),500,1000。
- minSpareThreads:最小空閑數(shù)線程,就是有沒有使用,最少開啟線程數(shù),tomcat開啟之后,沒人使用也會(huì)有進(jìn)程待命,默認(rèn)值10。
- maxSpareThreads:最大空閑數(shù)線程,一旦線程總數(shù)超過這個(gè)值,tomcat就會(huì)關(guān)閉不再需要的線程,默認(rèn)就是-1,不限制,一般不設(shè)置。
- connectionTimeout="20000"網(wǎng)絡(luò)連接超時(shí)時(shí)間,單位是亳秒,設(shè)置為0,永不超時(shí)。默認(rèn)即可200000ms。
- enableLookups:是否支持反向解析,true,false。
- 提高處理速度。
- disableUplaodTimeout:上傳時(shí)是否使用超時(shí)時(shí)間機(jī)制,10s,true和false。true關(guān)閉,false開啟。
- connectionUplaodTimeout:上傳的超時(shí)時(shí)間。先得打開超時(shí)限制,再設(shè)置時(shí)間。
- acceptCount:當(dāng)所有可用的請(qǐng)求的線程都被使用時(shí),可用接入請(qǐng)求的最大隊(duì)列長度,超過了這個(gè)數(shù)字的請(qǐng)求將不予處理(直接丟棄),默認(rèn)100個(gè)
- compression:是否對(duì)響應(yīng)數(shù)據(jù)進(jìn)行壓縮,on開啟,off就是關(guān)閉。
- 開啟壓縮之后,可以有效減少頁面的大小(文本無效。圖片,音頻,視頻)一般可用減少1/3,節(jié)省帶寬,默認(rèn)off。
- compression=“on”
- compressionMinSize=“”:表示響應(yīng)壓縮的最小值,只有響應(yīng)報(bào)文大于這個(gè)值才會(huì)壓縮。如果開啟了壓縮,默認(rèn)值時(shí)2048。
- noCompressionUserAgents="瀏覽器名稱"對(duì)于這些瀏覽器,不啟用壓縮。
- compressableMimeType="text/plain,video/mp4"壓縮類型,指定對(duì)哪些類型的文件進(jìn)行壓縮。
7.2、常用的頁面類型:
- 文本類型:text/plain,text/html,text/css,text/javascript
- 圖片類型:image/jpg,image/jpeg,img/gif
- 音頻:audio/ogg,wav,mpeg
- 視頻:video/mp4,webm,rmvb,quicktime。
- 應(yīng)用程序:application/pdf、json、xml。
7.3、內(nèi)核優(yōu)化:
系統(tǒng)安全的優(yōu)化補(bǔ)齊。
內(nèi)核優(yōu)化的配置文件:
1、打開文件數(shù)的限制,系統(tǒng)初始化的第一步要做的事情--------vim /etc/security/limits.conf。
2、內(nèi)核參數(shù)文件---------vim /etc/sysctl.conf
sysctl -a
sysctl -c
net.ipv4.ip_forward=0/1 禁用或者開啟數(shù)據(jù)包的轉(zhuǎn)發(fā)功能,要做路由器必須打開,0是關(guān),1是開。net.ipv4.tcp_max_tw_buckets=2000 允許timewait的最大數(shù)量2000。net.ipv4.tcp_sack=1啟用有選擇的應(yīng)答,提高tcp的處理性能。net.core.netdev_max_backlog=262144 (字節(jié)) 網(wǎng)絡(luò)接收數(shù)據(jù)包隊(duì)列的最大的大小。vm.swappiness=0 ,關(guān)閉內(nèi)存的交換行為,不使用交換分區(qū),k8s默認(rèn)就不能使用交換分區(qū),否則會(huì)報(bào)錯(cuò)。net.ipv4.tcp_max_orphans:系統(tǒng)允許的最大的tcp連接數(shù)量。net.ipv4.ip_local_port_range=1024 650001024-65000設(shè)定系統(tǒng)的端口范圍。net.ipv4.tcp_fin_timeout=10 設(shè)置tcp關(guān)閉連接的超時(shí)時(shí)間。net.ipv4.tcp_keepalive_time:設(shè)置tcp的keepalive包探測包的發(fā)送頻率,以檢測連接狀態(tài)。
記住上面的,下面了解
kernel.sysrq = 0: 禁用了內(nèi)核的SysRq功能,SysRq允許在系統(tǒng)崩潰或出現(xiàn)問題時(shí)執(zhí)行一些調(diào)試操作。kernel.core_uses_pid = 1: 設(shè)置核心轉(zhuǎn)儲(chǔ)文件名中包含進(jìn)程ID,有助于標(biāo)識(shí)是哪個(gè)進(jìn)程導(dǎo)致了核心轉(zhuǎn)儲(chǔ)。kernel.msgmnb 和 kernel.msgmax: 增加IPC消息隊(duì)列的默認(rèn)和最大大小,用于進(jìn)程間通信。kernel.shmmax 和 kernel.shmall: 調(diào)整共享內(nèi)存的最大大小和分配頁面數(shù)。net.ipv4.ip_forward = 0: 禁用IP數(shù)據(jù)包的轉(zhuǎn)發(fā)功能,通常用于不充當(dāng)路由器的系統(tǒng)。net.ipv4.conf.default.rp_filter 和 net.ipv4.conf.all.rp_filter: 控制反向路徑過濾,提高網(wǎng)絡(luò)安全性。net.ipv4.icmp_echo_ignore_all: 允許或禁止系統(tǒng)響應(yīng)ping請(qǐng)求。net.ipv4.icmp_echo_ignore_broadcasts: 禁止系統(tǒng)對(duì)廣播和多播地址的ICMP回顯和時(shí)間戳請(qǐng)求作出響應(yīng)。net.ipv4.conf.default.accept_source_route: 不接受源路由,增加網(wǎng)絡(luò)安全性。net.ipv4.tcp_syncookies = 1: 啟用SYN Cookies,保護(hù)系統(tǒng)免受TCP SYN 攻擊。net.ipv4.tcp_max_tw_buckets = 6000: 設(shè)置允許的TIME_WAIT套接字最大數(shù)量,避免服務(wù)器性能下降。net.ipv4.tcp_sack = 1: 啟用有選擇的應(yīng)答(SACK)來提高TCP性能。net.ipv4.tcp_window_scaling = 1: 啟用TCP窗口縮放功能,允許大窗口的TCP傳輸。net.ipv4.tcp_rmem, net.ipv4.tcp_wmem: 調(diào)整TCP套接字讀取和寫入緩沖區(qū)大小。net.ipv4.tcp_mem: 設(shè)置TCP緩沖區(qū)的最小、默認(rèn)和最大值。net.core.wmem_default, net.core.rmem_default, net.core.rmem_max, net.core.wmem_max: 調(diào)整網(wǎng)絡(luò)核心
緩沖區(qū)的大小。net.core.netdev_max_backlog: 控制網(wǎng)絡(luò)接口接收數(shù)據(jù)包的排隊(duì)隊(duì)列大小。net.ipv4.tcp_max_orphans: 設(shè)置系統(tǒng)允許的孤立TCP連接最大數(shù)量。net.ipv4.tcp_max_syn_backlog: 控制系統(tǒng)允許的三次握手隊(duì)列長度。net.ipv4.tcp_synack_retries 和 net.ipv4.tcp_syn_retries: 設(shè)置SYN-ACK和SYN請(qǐng)求的重試次數(shù)。net.ipv4.tcp_tw_recycle 和 net.ipv4.tcp_tw_reuse: 啟用TIME_WAIT套接字快速回收和重用。net.ipv4.tcp_fin_timeout: 設(shè)置TCP連接FIN(關(guān)閉連接)的超時(shí)時(shí)間。net.ipv4.tcp_keepalive_time: 設(shè)置TCP keepalive探測包發(fā)送頻率,以檢測連接狀態(tài)。net.ipv4.ip_local_port_range: 設(shè)置本地端口范圍,用于分配本地應(yīng)用程序端口。net.ipv6.conf.all.disable_ipv6 和 net.ipv6.conf.default.disable_ipv6: 禁用IPv6。net.netfilter.nf_conntrack_max 和其他 net.netfilter.nf_conntrack_*: 控制連接跟蹤和防火墻相關(guān)設(shè)置。net.nf_conntrack_max: 設(shè)置最大連接跟蹤項(xiàng)數(shù)。vm.overcommit_memory = 0: 控制內(nèi)存超額分配策略,避免OOM killer殺掉進(jìn)程。vm.swappiness = 0: 設(shè)置內(nèi)存交換行為,降低內(nèi)存交換。fs.file-max = 999999: 設(shè)置進(jìn)程可以同時(shí)打開的最大文件句柄數(shù)。net.ipv4.tcp_max_tw_buckets = 6000: 設(shè)置操作系統(tǒng)允許的TIME_WAIT套接字最大數(shù)量。net.ipv4.ip_local_port_range = 1024 65000: 設(shè)置系統(tǒng)允許的本地端口范圍。net.ipv4.tcp_tw_recycle = 1: 啟用TIME_WAIT套接字快速回收。net.ipv4.tcp_tw_reuse = 1: 允許TIME-WAIT套接字重用。net.ipv4.tcp_syncookies = 1: 啟用SYN Cookies,防止TCP SYN 攻擊。net.core.somaxconn = 40960: 設(shè)置最大監(jiān)聽隊(duì)列長度,用于控制最大并發(fā)連接數(shù)。net.core.netdev_max_backlog = 262144: 設(shè)置每個(gè)網(wǎng)絡(luò)接口接收數(shù)據(jù)包隊(duì)列的最大大小。net.ipv4.tcp_max_syn_backlog = 262144: 設(shè)置接受SYN請(qǐng)求隊(duì)列的最大長度。net.ipv4.tcp_rmem, net.ipv4.tcp_wmem: 設(shè)置TCP套接字讀取和寫入緩沖區(qū)的最小、默認(rèn)和最大大小。net.core.rmem_default, net.core.wmem_default, net.core.rmem_max, net.core.wmem_max: 設(shè)置內(nèi)核套接字接收和
發(fā)送緩沖區(qū)大小。net.ipv4.tcp_syncookies = 1: 設(shè)置啟用SYN Cookies,用于解決TCP SYN 攻擊。
7.4、jvm的優(yōu)化
JAVA_OPTS="$JAVA_OPTS -server -Xms2048m -Xmx2048m -Xmn768m -XX:ParallelGCThreads=2 -XX:PermSize=1024m -XX:MaxPermSize=1024m -Djava.awt.headless=true -XX:+DisableExplicitGC"
cygwin=false
解釋:面試會(huì)問
-Xms2048m:java初始化堆的大小,分配jvm的最小內(nèi)存,cpu的性能比較高,可以分配的高一點(diǎn)。-Xmx2048m:java堆的最大值,也就是jvm的最大內(nèi)存,取決于物理內(nèi)存的大小,官方建議設(shè)置成和xms一樣的值,設(shè)置成物理內(nèi)存的一半-Xmn768m:新生代內(nèi)存的大小,官方推薦,設(shè)置成jvm內(nèi)存最大值的3/8.java自帶垃圾回收機(jī)制,java進(jìn)行垃圾回收之后不需要重新計(jì)算堆區(qū)的大小。堆區(qū):新生代,中生代,老年代。每生成有一個(gè)新的對(duì)象,對(duì)象占用的內(nèi)存空間就是新生代空間。垃圾回收對(duì)堆區(qū)當(dāng)中的資源進(jìn)行回收之后,新生代沒有被回收,就會(huì)變成中生代,中生代的就會(huì)轉(zhuǎn)移到老年代。整個(gè)jvm堆的大小:新生代+中生代+老生代+永久代(系統(tǒng)自帶的)-XX:ParallelGCThreads=2配置并行收集器的線程數(shù),同時(shí)有多少個(gè)線程數(shù)一起進(jìn)行來及時(shí)回收,配置成cpu的一半。-XX:PermSize=1024m設(shè)置非堆內(nèi)存的初始值,持久代內(nèi)存的大小,默認(rèn)是物理內(nèi)存的1/4,建議設(shè)置成整個(gè)jvm內(nèi)存的一半,非堆內(nèi)存是不會(huì)被Java的垃圾回收機(jī)制處理的。-XX:MaxPermSize=1024m 非堆內(nèi)存的最大值,和初始值一致即可。-Djava.awt.headless=true:防止在linux訪問的情況下,web頁面的圖片不能打開。-XX:+DisableExplicitGC:老年代的收集算法,縮短垃圾回收機(jī)制的回收時(shí)間。
- PS Eden Space 堆內(nèi)存 創(chuàng)建一個(gè)新對(duì)象都在堆內(nèi)存當(dāng)中。
- PS Old Gen 堆內(nèi)存,長期存活的對(duì)象,永生代。
- PS Survivor space 堆內(nèi)存,PS Eden space和Ps Old Gen之間的存活對(duì)象,中生代。
- Code Cache 非堆內(nèi)存,存儲(chǔ)以及編譯的代碼。
- Compressed Class Space 非對(duì)內(nèi)存,存儲(chǔ)以及壓縮過的類定義。
- Metaspace 非堆內(nèi)存,存儲(chǔ)元數(shù)據(jù)的區(qū)域
- ajp-nio-8009
- ajp-nio:連接器的類型,ajp是協(xié)議,nio:異步非阻塞的通信方式。
- ajp協(xié)議:tomcat服務(wù)器和web服務(wù)器之間進(jìn)行連接的協(xié)議,可以提供負(fù)載均衡和高效轉(zhuǎn)發(fā)。nio可以提高并發(fā)的處理能力。
- 8009就是ajp的端口
8、tomcat和nginx實(shí)現(xiàn)動(dòng)靜分離:
訪問nginx就是靜態(tài)頁面,nginx代理實(shí)現(xiàn)index.jsp,可以訪問tomcat的動(dòng)態(tài)頁面。
課后實(shí)驗(yàn)
思路
nginx1:192.168.168.10純代理nginx2、3:192.168.168.20代理+靜態(tài)頁面192.168.168.30代理+靜態(tài)頁面tomcat:192.168.168.40動(dòng)態(tài)頁面192.168.168.90動(dòng)態(tài)頁面
nginx1、2、3,tomcat4、5配置:關(guān)閉防火墻,安全機(jī)制
nginx1配置
vim /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;keepalive_timeout 65;#gzip on;
upstream nginx {server 192.168.168.20 weight=2;server 192.168.168.30 weight=1;}
server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location ~ .*\.(html|jsp)$ {proxy_pass http://nginx;}
nginx2配置
vim /usr/local/nginx/html/index.html
this is test2
vim /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;keepalive_timeout 65;#gzip on;
upstream tomcat {server 192.168.168.40:8080 weight=2;server 192.168.168.90:8080 weight=1;}server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location ~ .*\.jsp$ {proxy_pass http://tomcat;proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
nginx3配置
vim /usr/local/nginx/html/index.html
this is test3
vim /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;keepalive_timeout 65;#gzip on;
upstream tomcat {server 192.168.168.40:8080 weight=2;server 192.168.168.90:8080 weight=1;}
server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location ~ .*\.jsp$ {proxy_pass http://tomcat;proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
tomcat4:
配置文件設(shè)置動(dòng)態(tài)網(wǎng)頁打開頁面位置
vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test4" path="" reloadable="true" />
動(dòng)態(tài)頁面內(nèi)容設(shè)置
mkdir -p /usr/local/tomcat/webapps/test4
vim /usr/local/tomcat/webapps/test5/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head>
<title>JSP test2 page</title>
</head><body>
<% out.println("動(dòng)態(tài)頁面 2,http://www.test2.com");%>
</body>
</html>
tomcat5:
配置文件設(shè)置動(dòng)態(tài)網(wǎng)頁打開頁面位置
vim /usr/local/tomcat/conf/server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test5" path="" reloadable="true" />
動(dòng)態(tài)頁面內(nèi)容設(shè)置
mkdir -p /usr/local/tomcat/webapps/test5
vim /usr/local/tomcat/webapps/test5/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head>
<title>JSP test2 page</title>
</head><body>
<% out.println("動(dòng)態(tài)頁面 2,http://www.test2.com");%>
</body>
</html>