Google | Yahoo! | FaceBook |
  • 首頁 > 知識庫 > Windows Server IIS 忙碌錯誤
  • Windows Server IIS 忙碌錯誤

    一、【症狀】

    XEON處理器,4G內存,WINDOWS 2003 最新企業版,IIS 6,ASP環境。
    應用程序池達到6個,其中有一個程序池配置了20個進程。其餘5個單獨運行其它應用~
    其中一個應用的ASP程序不間斷報錯:500.13--服務器太忙
    在【應用程序日誌】中大量報錯:The run-time environment has detected an inconsistency in its internal state.This indicates a potential instability in the process that could be caused by the custom components running in the COM+ application, the components they make use of, or other factors. Error in d:\nt\com\complus\src\comsvc??s\threads\stathread.cpp(285), hr = 8007000e: CSTAThread: CoGetApartmentID failed
    中文版本錯誤:運行時環境檢測到其內部狀態存在不一致。這說明進程中存在潛在的不穩定性,可能是??由於COM+ 應用程序中運行自定義組件、COM+ 應用程序使用的組件或其他因素引起的。 d:\nt\com\complus\src\comsvc??s\threads\stathread.cpp(285)中的錯誤,hr = 80070008: CSTAThread: CoGetApartmentID failed
    查看W3C版本的IIS日誌,報錯ASP_0148|Server_Too_Busy。
    日誌查看器中的EVENT為4689
    使用性能查看器,查看Active Server Page-> Request Queued 隊列,大於系統的Max Requsest Queued隊列值。

    二、【原因】

    具體原因可參考【參考鏈接4】,MSDN微軟官方團隊的說法,針對桌面程序堆(HEAP)錯誤。簡單的解釋就是應用程序池太多,導致DLLHOST.EXE達到最大的HEAP限制,不是WINDOWS底層的程序員,所以只明白這個錯誤大概的原理,具體原因還得參考【鏈接4】

    三、【解決方案】

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows --> SharedSection = 1024,3072,512

    打開註冊表編輯器,將512的部分稍稍調大一些,比如1024,就可以避免堆錯誤。可以反複試驗,也可以用鏈接4中的堆觀察器(需要擁有最高權限才可安裝的小工具,底層驅動),觀察每個進程的堆情況,進而根據IIS中應用程序池的設置,推算出最合適的大小??。



    四、【參考鏈接】

    1
    2
    3
    4
    鏈接1為英文的問題,鏈接2為解決方法但作者理解不對,鏈接3解決方法正確,且概念正確。鏈接4為官方解決方案,最權威。
IP:13.59.79.237