2012-09-18 75 views
2

我得到間歇性超時處理某些AJAX POST請求。 設置:Apache 2.2.17 - > mod_jk 1.2.26 - > JBoss 4.3 CP01(帶Tomcat 6.0)。應用程序使用JSF 1.2_11,Seam 2.1,RichFaces 3.3.1構建。對於某些AJAX POST請求,tomcat 2分鐘超時

它通常發生在IE瀏覽器(7,8,9)。瀏覽器發送一個ajax請求(RichFaces爲此生成JavaScript代碼)。這個HTTP POST請求被mod_jk轉換成AJP Header和Body數據包併發送給Tomcat。頭文件包說內容長度是1760,但主體數據包在長度字段中沒有內容並且沒有內容。數據包是使用tcpdump捕獲的。每個有問題的請求都不會發生0 ajp主體數據包。所有ajax請求/響應都很小,高達30K,沒有文件上傳,也沒有冗長的數據庫查詢。

在此階段,mod_jk日誌顯示請求在2分鐘內處理完畢。在我們的測試環境中,我們也獲得2,3,4和6分鐘。包裝請求的應用程序過濾器也顯示2分鐘時間;過濾器很簡單 - 在請求之前和之後獲取時間戳並記錄差異。

應用程序的JSF階段監聽器被調用,每個階段(請求,視圖恢復,驗證,調用,渲染)的時間爲100ms - 通常爲應用程序。因此,超時必須發生在請求開始(過濾器之後和第一個JSF階段之前)之間或結束(在呈現JSF階段之後和過濾器結束之前)之間。

有時,mod_jk表示客戶端讀取超時;誰是客戶端 - 瀏覽器,apache?在DEBUG級別,沒有例外記錄在JBoss中。

有人碰到類似的東西嗎? mod_jk reply_timeout設置不能解決問題。直接連接到JBoss會給我們大約30秒的超時時間,這是我們以前從未見過的,我們不知道它是否與2分鐘超時有關。

回答

0

我們在IE中遇到這個問題: http://support.microsoft.com/kb/821814。我們的KeepAliveTimeout被設置爲3秒,並且來自服務器的響應有時出現在該邊界上,導致Apache在響應頭已經發送之後丟棄連接。

我們的解決方案是雙基礎架構:外部客戶端不會獲得KeepAlive,因爲他們不需要SSO登錄。 Intranet客戶端現在轉到不同的Apache服務器(因爲KeepAlive是服務器範圍的,而不是特定於虛擬主機的)。

0

我們有過相同/相似的問題。我們已經注意到它完全是5分鐘。我們使用的是Tomcat 6/Apache AJP/Richfaces 3.3.3 Final。

我能夠修改Apache的httpd.conf以獲得一些滿意。

超時時間從5分鐘改爲4分鐘,這導致「超時」轉移到4分鐘超時而不是5.所以我懷疑我是在正確的軌道上。

接下來,我將httpd.conf MaxKeepAliveRequests從默認值100修改爲200,並大大減少了「4分鐘暫停」事件的數量。

編輯:

的KeepAliveTimeout是10秒 MaxKeepAliveRequests設置爲0(無限制)

這似乎已經消除了我們的問題提高到40秒。很明顯,這些設置需要根據您的服務器的流量類型/數量來設置,但這對我們很有用。