現場出現了一個問題,oracle運行一段時間之后,process個數會溢出,然后新的連接會失敗。通過分析,發現Arcgis Server 的ArcSOC進程在不段增長。ArcSOC是arcgis server 的一個容器進程,該容器中裝載arcgis object。
計划嘗試用兩個方法來解決/緩解這一問題。
方法一
調整每個服務的配置信息,具體如下:
-
將空間實例可持續運行的最長時間由1800s降低到600s

-
將實例的隔離級別設置為"低隔離性",如下圖:

建議:先使用第一種方法修改服務配置(除system與utility目錄之外),然后試運行一段時間看效果。如果效果不明顯,再嘗試第二種方法。
方法二
將多個地圖合並成一個地圖,然后發布成一個服務。擬通過該方法減少服務的個數。
接下來按計划行事。使用第一種方法修改配置,然后重新啟動地圖服務,此時報錯:"the base table definition string is invalid",查看數據庫注冊信息,然后使用該連接串嘗試手動登陸,竟然提示登陸失敗。再查看該賬戶的狀態,顯示為"EXPIRED"。
賬戶竟然過期了,這是不是arcsoc不斷增長的原因呢?極有可能,當連接請求失敗后,可能會不斷地嘗試重復請求連接,而每一次連接請求,arcgis server都會為其分配一個ArcSOC進程。如果是這樣,解鎖賬戶並重新賦密碼應該就可以解決問題。執行如下SQL:
Alter user xx identified by xx account unlock;
Alter profile default limit password_life_time unlimited;
再次重啟該地圖服務,OK,啟動成功。
持續觀察操作系統的進程情況,發現ArcSOC進程個數長期保持較穩定的水平,且oracle processes沒有再溢出。
至此,問題根因浮出水面,原來不是服務請求過多導致的,而是無效的登陸占用了process但卻沒有釋放。
