jetty性能優化思路整理

原博客地址:http://www.sxrczx.com/pages/gordon-tech.lofter.com/post/481906_24eb191.html

轉載過來只是爲了收藏,望原博主見諒

一、一般調優的基本過程

1.明瞭需要調優的系統架構

2.設定性能調優的目標

3.明瞭目標當前的性能情況

4.找出目前的性能瓶頸的所在

5.解決引起性能瓶頸的根本問題

6.重複以上過程直到達到設定目標性能爲止


二、性能指標:

崩潰點:同時多少併發的時候,服務器Down掉?

吞吐量:多少人一起來,都沒問題?

併發數:每秒能處理多少人?

響應時間:每人需要等待的時間多長?


三、調優點:

1.硬件配置優化:

虛擬機

物理機

CPU 內存 


2、系統優化(Linux)

已經根據門戶的方式去優化。


3.JVM參數優化:

-Xms:設置jvm內存的初始大小

-Xmx:設置jvm內存的最大值

-Xmn:設置新域的大小(這個似乎只對 jdk1.4來說是有效的,後來就廢棄了)

-Xss:設置每個線程的堆棧大小(也就是說,在相同物理內存下,減小這個值能生成更多的線程)

-XX:NewRatio :設置新域與舊域之比,如-XX:NewRatio = 4就表示新域與舊域之比爲1:4

-XX:NewSize:設置新域的初始值

-XX:MaxNewSize :設置新域的最大值

-XX:PermSize:設置永久域的初始值

-XX:MaxPermSize:設置永久域的最大值

-XX:SurvivorRatio=n:設置新域中Eden區與兩個Survivor區的比值。(Eden區主要是用來存放新生的對象,而兩個 Survivor區則用來存放每次垃圾回收後存活下來的對象)

監控內存 CPU

常見的錯誤 :

java.lang.OutOfMemoryError相信很多開發人員都用到過,這個主要就是JVM參數沒有配好引起的,但是這種錯誤又分兩種:java.lang.OutOfMemoryError: Java heap space和

java.lang.OutOfMemoryError: PermGen space,其中前者是有關堆內存的內存溢出,可以同過配置-Xms和-Xmx參數來設置,而後者是有關永久域的內存溢出,可以通過配置-XX:MaxPermSize來設置。


4.容器優化:

a.線程池

<jetty>

線程池線程資源大小確定了服務器的服務能力

默認大小不一定能滿足生產環境

線程分配方式決定了服務器的資源利用效率

固定線程數處理多任務,代表:JDK的ThreadPoolExecutor

以最大線程數爲限處理多任務,代表:Jetty自帶QueuedThreadPool

Work-stealing 分配,Jetty目前沒有這個實現 Jetty中配置實例:


<tomcat>

maxThreads:表示最多同時處理的連接數。應該將線程數(最大線程數)設置比最大預期負載(同時併發的點擊)多25%(經驗規則)(低配置用戶可通過降低maxThreads並同時增大

acceptCount值來保證系統的穩定)。

acceptCount:當同時連接的人數達到maxThreads時,還可以接收排隊的連接。

minSpareThread:指“啓動以後,總是保持該數量的線程空閒等待”;設置比預期負載多25%。

maxSpareThread:指“如果超過了minSpareThread,然後總是保持該數量的線程空閒等待”;設置比預期負載多25%。

其中主要修改兩個參數maxThreads和acceptCount值。增加maxThreads,減少acceptCount值有利縮短系統的響應時間。但是maxThreads和acceptCount的總和最高值不能超過6000,而且

maxThreads過大會增加CPU和內存消耗,故低配置用戶可通過降低maxThreads並同時增大acceptCount值來保證系統的穩定。

connectionTimeout:連接超時,最大超時時間,當響應速度慢的時候,通過調整該參數,來平衡正確率和服務器資源的回收。


b.Connectors

選擇Connector時,需要考慮應用自身的特點,例如股票、聊天室.

TCP 連接數 Keep-Alive Java BIO Connectors SocketConnector (HTTP) 

Ajp13SocketConnector (AJP) SslSocketConnector(SSL)

Java NIO Connectors electChannelConnector(HTTP) SslSelectChannelConnector(SSL)


Acceptors 表示同時在監聽read事件的線程數

默認值是 1 典型值範圍 1~(處理器內核數+1) 

對於NIO 來說,設置爲(處理器內核數+1)比較合適

maxIdleTime 表示連接最大空閒時間 默認值是 200000,一般這個值都太大了

典型值 3000 左右足夠 

對AJP來說一般設置爲-1,表示連接需要一直保持


LowResourcesMaxIdleTime 表示線程資源稀少時的maxIdleTime 默認值是 -1,表示沒有設置 

一般設置值應該<=maxIdleTime

lowResourcesConnections 只有NIO纔有這個設置,表示連接空閒時的連接數,大於這個數將被shutdown 

默認值是 0,表示該設置沒有生效 每個acceptor的連接數=(lowResourcesConnections+acceptors-1)/acceptors


AcceptQueueSize 連接被 accept 前允許等待的連接數即Socket的Backlog ,默認 50

SoLingerTime 具有指定逗留時間(以毫秒爲單位) 即socket的setSoLinger,默認關閉

ResolveNames 是否反查 getRemoteHost() 默認false


c.JVM

Jetty性能調優點-JVM

JVM參數調整主要涉及兩個方面 

堆/棧內存大小調整 

Xmx/xms 最大/最小堆大小 

xmn 新生代大小 

-XX:MaxPermSize 持久代堆大小 

垃圾分配回收算法考慮暫停時間、吞吐量選擇不同算法 

串行/並行/併發收集


d.Content Cache

動態內容不會被cache 靜態內容纔會被cache

maxCacheSize 256,000,000

maxCachedFileSize 200,000,000

maxCachedFiles ?2,048

useFileMappedBuffer ?true

可以通過etc/webdefault.xml配置


e.冗餘組件去除

去除多餘的Connector 去除不需要的構建Handler 例如SessionHandler,ServletHandler

關閉不必要的服務 例如 jmx-console。(JBoss)


5.代碼優化:

在高峯期,減去日誌記錄的操作,或者把日誌暫時先緩存起來,使用異步處理的方式。

減少一些數據庫操作。

減少NC 身份證等匹配方式。


6.數據庫優化:

索引

視圖


7.其他:

壓縮css,js,圖片

使用瀏覽器緩存

CDN加速

分佈式緩存服務器

集羣、負載均衡


三.調優策略:

a.關鍵點,找到瓶頸,給瓶頸分配更多的資源,或者減輕其工作量。


四、調優原則

a.每臺服務器,所能承載的參數,都會有差異,尤其是內存 CPU的配置不一致。

b.每種服務所需的計算資源各不相同,要根據服務的偏向不同,而去把最好的資源,分配到最需要的地方

c.性能優化,是永恆的話題,沒有永久最優解,只能查出目前最優解,是一個不斷優化的過程。


五、調優技巧

1.粗狂的掃點與詳細的指標相結合,儘量讓驗證調優的過程更敏捷,讓主要的指標穩定下來,在確定指標前,再使用詳細的方式去測出各種指標。

2.分輪測試,在測試結果中,找出各個參數的規律。爲調優提供指導數據。

3.在程序增加計數器,驗證LR的請求次數。

4.在程序每個步驟,增加多一些時間,檢查下,到底是卡在哪個步驟,尤其是操作數據庫前後。


六、測試的協作經驗

1.產品人員,對調優的各個參數,不是很懂,只有在不斷的嘗試中,去理解和學習各個參數的含義,這樣就會產生比較多測試任務。

2.產品人員,沒有安排詳細的測試計劃,使得測試人員,有些迷茫,甚至兩邊的人員的思路,不是很統一。

3.產品人員,有時比較忙,沒顧得及響應,測試人員的問題,溝通也不到位。

2.不是理解這種測試思路?測試的過程中,只是別人說測就測,產品人員給其講調優思路,調優參數,測試人員,聽不懂或者不想去懂,所以就感覺很多個環境,在進行,做了很多次重複工作

3.在產品和測試中,配合中,缺少一種,共同把事情幹好的思想,缺少主動去探討一些問題,缺少主動建議一些問題,更多的是爭論一些問題,是對還是錯的,當然裏面涉及到一些面子因素和一些主動做事的心態。

4.測試的過程不夠敏捷,跑一次測試,需要的時間太長,開發人員需要不斷得去嘗試去理解,對各種參數的理解。開發人員,在調整參數的時候,不需要很清晰得知道,在這種情況下的各種指標是如何,各重要的是,去理解這個參數帶來的影響如何。

5.使用正式環境做壓力測試,嚴重影響項目的其他進度的正常使用。是否考慮使用備用機器,做性能測試。(城建)


七、參考資料:

網站性能優化思路

http://blog.sina.com.cn/s/blog_6cbe69e30101e54o.html

Jboss部署及性能調優 

http://blog.sina.com.cn/s/blog_7c1092a90101iwhs.html

Jetty和Tomcat的使用及性能測試

http://www.verydemo.com/demo_c199_i12761.html

jetty服務器性能調整過程分析

http://download.csdn.net/detail/wujuan321/4458261

jetty7.5 調 優 文 檔(非常好的實例)

http://wenku.baidu.com/link?url=ljZS54Yf4fPE3jbcwr8csKqiBhJJ_YmRlGf8jlCOVWRYNPjFksLRrEQ7e_zD3qjbKAUm4mfAc6iI5VuvqE2PrJvKfaBcCA6s1Ywcn807aCC

Jetty服務器架構及調優(講得有點多)

http://www.cnblogs.com/zhizhesky/articles/2225460.html



發佈了55 篇原創文章 · 獲贊 5 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章