1)
作用:Jetty
特性:易用性,可擴(kuò)展性,易嵌入性
2)
|
|
|
3)
etc:該路徑用于存放Jetty的配置文件
examples:該路徑用于存放Jetty的示例。
legal:該路徑用于存放該項目的Lisence信息。
lib:該路徑用于存放運(yùn)行Jetty必需的J缸文件。
modules:該路徑用于存放Jetty的模塊,包括API文檔。
patches:包含一些補(bǔ)丁說明。
pom.xm1:是Jetty的build文件,該文件不是Ant的build文件,而是mavaen2的build文件。
project-site:包含Jetty的網(wǎng)站的必需的樣式文件。
readme.txt:包含最基本的使用信息。
start.jar:啟動Jetty的啟動文件。
version.txt:Jetty版本更新日志的簡單版本。
webapps:
webapps-plus:
4)
Tomcat和Jetty都是一種Servlet引擎,他們都支持標(biāo)準(zhǔn)的servlet規(guī)范和JavaEE的規(guī)范。
1.架構(gòu)比較
Jetty的架構(gòu)比Tomcat的更為簡單
Jetty的架構(gòu)是基于Handler來實現(xiàn)的,主要的擴(kuò)展功能都可以用Handler來實現(xiàn),擴(kuò)展簡單。
Tomcat的架構(gòu)是基于容器設(shè)計的,進(jìn)行擴(kuò)展是需要了解Tomcat的整體設(shè)計結(jié)構(gòu),不易擴(kuò)展。
2.
Jetty和Tomcat性能方面差異不大
Jetty可以同時處理大量連接而且可以長時間保持連接,適合于web聊天應(yīng)用等等。
Jetty的架構(gòu)簡單,因此作為服務(wù)器,Jetty可以按需加載組件,減少不需要的組件,減少了服務(wù)器內(nèi)存開銷,從而提高服務(wù)器性能。
Jetty默認(rèn)采用NIO結(jié)束在處理I/O請求上更占優(yōu)勢,在處理靜態(tài)資源時,性能較高
Tomcat適合處理少數(shù)非常繁忙的鏈接,也就是說鏈接生命周期短的話,Tomcat的總體性能更高。
Tomcat默認(rèn)采用BIO處理I/O請求,在處理靜態(tài)資源時,性能較差。
3.其它比較
Jetty的應(yīng)用更加快速,修改簡單,對新的Servlet規(guī)范的支持較好。
Tomcat目前應(yīng)用比較廣泛,對JavaEE和Servlet的支持更加全面,很多特性會直接集成進(jìn)來。
5)
一、一般調(diào)優(yōu)的基本過程
1.明了需要調(diào)優(yōu)的系統(tǒng)架構(gòu)
2.設(shè)定性能調(diào)優(yōu)的目標(biāo)
3.明了目標(biāo)當(dāng)前的性能情況
4.找出目前的性能瓶頸的所在
5.解決引起性能瓶頸的根本問題
6.重復(fù)以上過程直到達(dá)到設(shè)定目標(biāo)性能為止
二、性能指標(biāo):
崩潰點(diǎn):同時多少并發(fā)的時候,服務(wù)器Down掉?
吞吐量:多少人一起來,都沒問題?
并發(fā)數(shù):每秒能處理多少人?
響應(yīng)時間:每人需要等待的時間多長?
三、調(diào)優(yōu)點(diǎn):
1.硬件配置優(yōu)化:
虛擬機(jī)
物理機(jī)
CPU
2、系統(tǒng)優(yōu)化(Linux)
已經(jīng)根據(jù)門戶的方式去優(yōu)化。
3.JVM參數(shù)優(yōu)化:
-Xms:設(shè)置jvm內(nèi)存的初始大小
-Xmx:設(shè)置jvm內(nèi)存的最大值
-Xmn:設(shè)置新域的大?。ㄟ@個似乎只對
-Xss:設(shè)置每個線程的堆棧大小(也就是說,在相同物理內(nèi)存下,減小這個值能生成更多的線程)
-XX:NewRatio
-XX:NewSize:設(shè)置新域的初始值
-XX:MaxNewSize
-XX:PermSize:設(shè)置永久域的初始值
-XX:MaxPermSize:設(shè)置永久域的最大值
-XX:SurvivorRatio=n:設(shè)置新域中Eden區(qū)與兩個Survivor區(qū)的比值。(Eden區(qū)主要是用來存放新生的對象,而兩個
監(jiān)控內(nèi)存
常見的錯誤
java.lang.OutOfMemoryError相信很多開發(fā)人員都用到過,這個主要就是JVM參數(shù)沒有配好引起的,但是這種錯誤又分兩種:java.lang.OutOfMemoryError:
java.lang.OutOfMemoryError:
4.容器優(yōu)化:
a.線程池
線程池線程資源大小確定了服務(wù)器的服務(wù)能力
默認(rèn)大小不一定能滿足生產(chǎn)環(huán)境
線程分配方式?jīng)Q定了服務(wù)器的資源利用效率
固定線程數(shù)處理多任務(wù),代表:JDK的ThreadPoolExecutor
以最大線程數(shù)為限處理多任務(wù),代表:Jetty自帶QueuedThreadPool
Work-stealing
maxThreads:表示最多同時處理的連接數(shù)。應(yīng)該將線程數(shù)(最大線程數(shù))設(shè)置比最大預(yù)期負(fù)載(同時并發(fā)的點(diǎn)擊)多25%(經(jīng)驗規(guī)則)(低配置用戶可通過降低maxThreads并同時增大
acceptCount值來保證系統(tǒng)的穩(wěn)定)。
acceptCount:當(dāng)同時連接的人數(shù)達(dá)到maxThreads時,還可以接收排隊的連接。
minSpareThread:指“啟動以后,總是保持該數(shù)量的線程空閑等待”;設(shè)置比預(yù)期負(fù)載多25%。
maxSpareThread:指“如果超過了minSpareThread,然后總是保持該數(shù)量的線程空閑等待”;設(shè)置比預(yù)期負(fù)載多25%。
其中主要修改兩個參數(shù)maxThreads和acceptCount值。增加maxThreads,減少acceptCount值有利縮短系統(tǒng)的響應(yīng)時間。但是maxThreads和acceptCount的總和最高值不能超過6000,而且
maxThreads過大會增加CPU和內(nèi)存消耗,故低配置用戶可通過降低maxThreads并同時增大acceptCount值來保證系統(tǒng)的穩(wěn)定。
connectionTimeout:連接超時,最大超時時間,當(dāng)響應(yīng)速度慢的時候,通過調(diào)整該參數(shù),來平衡正確率和服務(wù)器資源的回收。
b.Connectors
選擇Connector時,需要考慮應(yīng)用自身的特點(diǎn),例如股票、聊天室.
TCP
Ajp13SocketConnector
Java
Acceptors
默認(rèn)值是
對于NIO
maxIdleTime
典型值
對AJP來說一般設(shè)置為-1,表示連接需要一直保持
LowResourcesMaxIdleTime
一般設(shè)置值應(yīng)該<=maxIdleTime
lowResourcesConnections
默認(rèn)值是
AcceptQueueSize
SoLingerTime
ResolveNames
c.JVM
Jetty性能調(diào)優(yōu)點(diǎn)-JVM
JVM參數(shù)調(diào)整主要涉及兩個方面
堆/棧內(nèi)存大小調(diào)整
Xmx/xms
xmn
-XX:MaxPermSize
垃圾分配回收算法考慮暫停時間、吞吐量選擇不同算法
串行/并行/并發(fā)收集
d.Content
動態(tài)內(nèi)容不會被cache
maxCacheSize
maxCachedFileSize
maxCachedFiles
useFileMappedBuffer
可以通過etc/webdefault.xml配置
e.冗余組件去除
去除多余的Connector
關(guān)閉不必要的服務(wù)
5.代碼優(yōu)化:
在高峰期,減去日志記錄的操作,或者把日志暫時先緩存起來,使用異步處理的方式。
減少一些數(shù)據(jù)庫操作。
減少NC
6.數(shù)據(jù)庫優(yōu)化:
索引
視圖
7.其他:
壓縮css,js,圖片
使用瀏覽器緩存
CDN加速
分布式緩存服務(wù)器
集群、負(fù)載均衡
三.調(diào)優(yōu)策略:
a.關(guān)鍵點(diǎn),找到瓶頸,給瓶頸分配更多的資源,或者減輕其工作量。
四、調(diào)優(yōu)原則
a.每臺服務(wù)器,所能承載的參數(shù),都會有差異,尤其是內(nèi)存
b.每種服務(wù)所需的計算資源各不相同,要根據(jù)服務(wù)的偏向不同,而去把最好的資源,分配到最需要的地方
c.性能優(yōu)化,是永恒的話題,沒有永久最優(yōu)解,只能查出目前最優(yōu)解,是一個不斷優(yōu)化的過程。
五、調(diào)優(yōu)技巧
1.粗狂的掃點(diǎn)與詳細(xì)的指標(biāo)相結(jié)合,盡量讓驗證調(diào)優(yōu)的過程更敏捷,讓主要的指標(biāo)穩(wěn)定下來,在確定指標(biāo)前,再使用詳細(xì)的方式去測出各種指標(biāo)。
2.分輪測試,在測試結(jié)果中,找出各個參數(shù)的規(guī)律。為調(diào)優(yōu)提供指導(dǎo)數(shù)據(jù)。
3.在程序增加計數(shù)器,驗證LR的請求次數(shù)。
4.在程序每個步驟,增加多一些時間,檢查下,到底是卡在哪個步驟,尤其是操作數(shù)據(jù)庫前后。