兩台WEB伺服器,作業系統為Windows2003,IIS 6.0,安裝了.NET 2.0,啟動並執行程式相同,相互為負載平衡。
其中一台在進入某個系統功能頁面是否會提示錯誤,提示:
[HttpException : 無法向工作階段狀態伺服器發出工作階段狀態請求。請確保已啟動 ASP.NET State service,並且用戶端和伺服器連接埠是相同的。如果伺服器位於遠端電腦上,請檢查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection 的值,確保伺服器接受遠程請求。]
此應用程式是使用了ASPState服務作為會話管理的,在web.config中配置
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
cookieless="false"
timeout="3600"
/>
常規都會認為是ASPState服務沒開,但是其他頁面都工作正常,檢查服務也是啟動了的,重啟IIS、ASPState、伺服器均無法解決。檢查系統日誌由如下出錯資訊:
事件類型: 錯誤
事件來源: ASP.NET 2.0.50727.0
事件種類: 無
事件 ID: 1074
日期: 2008-2-27
事件: 18:36:41
使用者: N/A
電腦: XXXX
描述:
An error occurred in while processing a request in state server. Major callstack: ProcessCompletion-->ProcessReading-->Tracker::Read. Error code: 0x80072747
看起來是串連成功了ASPState服務的,但是服務出錯,搜尋錯誤碼0x80072747,提示:
WSAENOBUFS (0x80072747)
No buffer space available.
An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
貌似記憶體管理的問題,Google出來的資訊非常有限,有4-5個有相同問題,但是均沒有答案。完全沒有頭緒了。想了很久,折騰了很久,突然想到boot.ini中開啟了/3GB開關:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /3GB
將/3GB開關去掉,重啟,恢複~~!懷疑是ASPState在大記憶體管理下有BUG造成。