Tomcat效能問題調查

2021-05-25 04:51:53 字數 1888 閱讀 2207

一、程式現狀

程式為基於tomcat的web應用,在併發請求很少的情況下,程式執行正常,而當併發請求較多(70~300/30秒)時,web應用的頁面幾乎無法訪問,通常需要重新整理多次才可能成功訪問一次。

通過tomcat的status頁面,可以發現tomcat 當前執行緒數已達配置檔案中設定的最大值(800個https,200個http),並且當前所有執行緒均處於忙碌狀態,大部分執行緒的生存期比較長,最長的可達20分鐘。

觀察資料庫連線池,資料庫連線數量已達配置檔案設定最大值,但繁忙的資料庫連線並不多,大部分處於空閒狀態。

二、除錯與跟蹤面臨的問題

多執行緒程式相對於單執行緒程式在跟蹤和除錯方面要麻煩許多,特別是在當眾多執行緒啟動時才會發生的bug,期望通過ide進行除錯是不可能完成的任務。此時,記錄log是最容易想到的跟蹤方式。

但是在多執行緒中記錄log面臨的問題是由於執行緒眾多,記錄的log是也是由執行緒混雜生成的,因而很難從中抽取出乙個執行緒的執行log進行分析。但是,要有效地分析執行緒運**況,必須從繁雜的執行緒中抽取出乙個執行緒的執行log。

顯然,如果每一條log能夠有當前執行緒(更確切地說,是針對當前請求的響應)的惟一標識,那麼抽取乙個執行緒就成為可能。

三、日誌記錄解決方案

要在log中標識惟一執行緒,很容易想到的方式是在記錄log時同時記錄執行緒id,但是對於tomcat及類似的web的應用,使用執行緒id存在以下兩個問題:

tomcat等伺服器會維護乙個執行緒池,執行緒池中的執行緒會被反覆使用,以便高效地響應請求,在這些種情況下,會有多個請求的log使用同一標識,依然無法抽取針對一次請求響應的log。

jdk1.4及之前並不支援執行緒id,而當前面臨的應用正好使用的是jdk1.4.2。

利用執行緒類thread提供的以下方法,可以實現對對每一請求進行惟一標識:

public static thread currentthread()   // 取得當前執行緒物件

public final void setname(string name) // 為執行緒設定乙個名稱

public final string getname()         // 取得執行緒的名稱

具體實現過程如下:

在請求的入口處通過currentthread方法取得執行緒物件,然後呼叫其setname方法為執行緒設定乙個惟一標識,惟一標識根據不同的應用可以設計不同的標識,只要其符合惟一性的標準即可。

在需要新增log的地方通過通過currentthread方法取得執行緒物件,然後呼叫getname方法取得當前執行緒的名稱,並將其記入當前log。

由於懷疑是某些操作耗時過長,所以在需要記錄log的方法中,入口處與出口處均需新增log。

更新程式後,取得log檔案即可抽取乙個請求的執行流程進行分析。

四、日誌結果分析

synchronizedpublic  static  ***  getinstance()

return m_instance; }

public  static  ***  getinstance()

} }

return m_instance; }

五、總結

多執行緒應用,取得能夠惟一標識乙個執行緒的log是迅速查詢問題的關鍵,單純依據現象及經驗進行分析,可能會耗費大量的時間。前期在分析問題可能產生原因的同時,能取得有效log是一項優先度極高的工作。

單實列類的使用要慎重,其對空間佔用率的影響可能遠不如因同步而帶來的負面影響。通常,應當只將具有狀態的類設計成單例項類。

tomcat效能優化

tomcat8效能優化 tomcat提供了三種模式 bio nio apr bio tomcat8以下預設的i o模式,效能低下 nio tomcat8預設的非阻塞i o,效能相較bio更好 apr 效能有大幅的提公升,但安裝困難。tomcat8 也可以採用nio2 模式 推薦使用 優化1 禁用aj...

Tomcat效能優化

tomcat效能調優分三大部分,記憶體調優,執行緒調優和配置調優。今天講一下配置調優 該引數預設為true,tomcat會在執行過程中週期性檢查是由有新的應用部署,生產環境下開啟會降低tomcat效能。該值在tomcat8.5已經設定為false,不要開啟,影響效能。在生產環境會進行dns查詢,dn...

Tomcat效能調整優化

一 引言 效能測試與分析是軟體開發過程中介於架構和調整的乙個廣泛並比較不容易理解的領域,更是一項較為複雜的活動。就像下棋遊戲一樣,有效的效能測試和分析只能在乙個良好的計畫策略和具備了對不可預料事件的處理能力的條件下順利地完成。乙個下棋高手贏得比賽靠的不僅僅是對遊戲規則的認識,更是靠他的自己的能力和不...