2010-04-25 71 views
21

默認情況下,WebLogic在15分鐘(600秒)後卡住卡住的線程,這由參數StuckThreadMaxTime控制。但是,我無法找到關於如何定義「卡住」的更多細節。具體來說:WebLogic卡住線程保護

  • 15分鐘倒計時開始的點數是多少?請求處理開始?最後wait() -like方法?還有別的嗎?
  • 這是否僅適用於請求處理線程或所有線程?即請求處理線程是否可以通過產生一個工作線程來「逃避」這種保護?特別是,它可以委託給沒有15分鐘倒計時的工作人員寫回應書嗎?

我的用例是通過權限系統下載大文件。由於用戶需要進行身份驗證並有權查看文件,因此我不能(至少不知道如何)將其保留在簡單的HTTP服務器上,例如, Apache的。由於文件可能很大,下載可能(至少在理論上)花費超過15分鐘。

回答

21

Weblogic確實不是StuckThreadMaxTime之後殺死卡住的線程。它不能這樣做,該消息只是一個狀態信息,以便您(即管理員)知道該線程已經跨越了10分鐘(600秒= 10分鐘,而不是15分鐘)

這是一個可配置的值。

計時器在線程開始處理服務器內的請求時啓動。該線程不會被殺死,但會實際上繼續處理,直到操作結束。所以在你的情況下,你不需要擔心線程被殺死,它只是告訴你所花的時間 - 你知道這個用例。

它適用於所有線程AFAIK - 任何衍生線程也將在相同規則下運行。

恕我直言,Weblogic(或任何應用程序服務器)不是存儲和提供大型文件的地方。這是Web服務器層的理想選擇 - 我們使用可以運行文件下載servlet的SunOne。在你的情況下,你需要Tomcat和你的Apache來優化它。

+0

好的,但據我所知,如果線程太多,它可以重新部署整個應用程序,不是嗎?我可能會因爲會話超時而混淆了事情 - 過去我們遇到了一些問題。關於文件 - 應用程序非常龐大而且很麻煩,沒有時間花在優化上,因爲總會有更多緊迫的問題。 – doublep 2010-04-26 17:17:58

+6

如果線程過多,服務器將停止響應新請求 - 但在您的情況下,它們並非真正「卡住」,而是正在處理長請求。一個更好的方法是給FileDownloadServlet它自己的執行線程池 - 在WL10上這將是一個專用的WorkManager。這可以確保任何線程在下載過程中卡住/受到影響都不會影響處理普通請求的服務器的其餘部分。請參閱此處瞭解更多信息 - http://download.oracle.com/docs/cd/E11035_01/wls100/config_wls/self_tuned.html#wp1059038。您可以爲該servlet定義一個調度策略。 – JoseK 2010-04-27 05:13:35

+0

謝謝你的回答和澄清。 – doublep 2010-04-27 18:16:51

7

WLS10 WorkManager文檔可能會導致一些真正的頭疼。請參閱http://blogs.oracle.com/jamesbayer/2010/01/work_manager_leash_for_slow_js.html以獲取如何在weblogic.xml中爲webapp定義WorkManager並分配特定的Servlet以使用它的分步示例。

添加到這個例子,你可以添加<ignore-stuck-threads>true</ignore-stuck-threads><work-manager>定義,應該防止該WorkManager的工作線程被計入發生故障的服務器狀態。

+1

正是我在尋找的,謝謝! – 2011-04-30 05:02:29