Java EE應用中的性能問題解決方案 — 第二部分 Java EE線程池調整優化(A)

聲明:本文禁止未經本人同意的任何形式轉載!如有轉載需求,可與本人通過個人資料中的電子郵箱聯繫。對於未經同意的轉載,本人將保留進一步行動的權利

線程池
當Web應用服務器接收到一個請求後,它將請求放置到請求隊列,讓執行線程來處理,這就是Web應用服務器的主要入口途徑。在對內存進行調優後,對應用影響較大的調優選項就是對執行線程池的尺寸配置。線程池的大小控制着併發處理請求的能力。如果線程池太小,請求將在隊列中等待較長時間;如果池的尺寸太大,CPU就會在不同線程的上下文切換上花費過多的時間。
 
每個服務器都有監聽的socket。接收到請求後,請求被放置到執行隊列中,然後請求被一個執行線程從執行隊列中移出並執行。下圖顯示了服務器中組成請求處理架構的組件。
 
 
 
線程池過小
當用戶數上升應用性能降低或吞吐量下降時,首先檢查線程池。應該明確查看以下信息:
  • 線程池利用率
  • 請求等待數量(隊列深度)
 
如果線程池的利用率達到100%,並且有請求處於等待狀態,這時的響應時間就會明顯降低。此時,CPU的利用率可能也不高,因爲應用服務器沒有足夠多的工作讓CPU持續繁忙。此時應該逐步擴大線程池,監控應用的吞吐量直至響應時間降低。在整個過程中需要保持持續的負荷以確保對性能評估的準確性。當觀察到吞吐量非常平穩後,就可逐步降低線程池的大小,直至應用剛好能夠輸出最大吞吐量的尺寸。
 
下圖顯示了線程池太小的情況。
 
未完待續……
聲明:本文禁止未經本人同意的任何形式轉載!如有轉載需求,可與本人通過個人資料中的電子郵箱聯繫。對於未經同意的轉載,本人將保留進一步行動的權利!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章