1.背景最近連續(xù)有兩個項目現(xiàn)場出現(xiàn)了AGS服務(wù)蕩掉的問題,一個是通州現(xiàn)場,一個是福州現(xiàn)場。 1.1通州現(xiàn)場的問題描述和解決思路通州現(xiàn)場環(huán)境為ArcGIS9.2,使用IMS發(fā)布的地圖服務(wù),其問題表現(xiàn)為每隔兩天左右,其地形圖服務(wù)便會崩潰一次,重啟地形圖服務(wù)后地圖可以正常顯示。 因為IMS中地圖的出圖為動態(tài)出圖,所以其出圖時需要通過連接SDE,此問題的出現(xiàn)很可能是SDE中最大連接數(shù)的問題。 1.2福州現(xiàn)場的問題描述和解決思路福州現(xiàn)場環(huán)境為ArcGIS10.0,使用的ArcGIS Server發(fā)布的矢量服務(wù)(Map Server),其問題表現(xiàn)為基本每天矢量服務(wù)都會蕩掉一次,重啟后,系統(tǒng)便可以正常運行。 矢量服務(wù)蕩掉有很多種原因,猜想了如下幾種可能: (1)沒有定期清除ArcGIS Server中的緩存,導致緩存過多而蕩掉。 (2)由于Windows防火墻的原因,Context和SDE的連接限制一段時間后,會被系統(tǒng)Kill掉,然而Context并不知情,于是在空閑一段時間后的第一次訪問中,仍然使用該鏈接,連接不上SDE導致Crash。 (3)矢量查詢需要通過SDE連接數(shù)據(jù)庫,會不會SDE的最大連接數(shù)設(shè)置少了,導致服務(wù)蕩掉。 (4)因為矢量查詢時同樣需要用到數(shù)據(jù)庫中的游標,會不會數(shù)據(jù)庫的最大游標數(shù)設(shè)置少了,導致服務(wù)蕩掉。 2.解決通州現(xiàn)場問題2.1首先設(shè)置最大連接數(shù)SDE的默認連接數(shù)是48個,修改它有兩種方式,一種是通過注冊表,一種是通過數(shù)據(jù)庫。這里我將兩種修改方式都做一個介紹。 2.1.1通過注冊表修改打開SDE的安裝目錄下的(一般安裝路徑為C:\ arcgis\ArcSDE\sqlexe\etc)giomgr.defs文件進行編輯,設(shè)置CONNECTIONS參數(shù)為你的最大連接數(shù)。通過命令導入到數(shù)據(jù)庫中:sdeconfig –o import –f C:\arcgis\ArcSDE\sqlexe\etc\giomgr.defs –i esri_sde(數(shù)據(jù)庫實例名) –s (ServerName) –u sde(用戶名) –p sde(密碼) 。 設(shè)置好后需要重啟SDE服務(wù)才能生效。 2.1.2通過數(shù)據(jù)庫中的運行select * from sde.server_config;在這個表中修改CONNECTIONS的NUM_PROP_VALUE即可。
2.2 修改TCPKEEPALIVE配置能夠刪除無效連接的最大功臣就是TCPKEEPALIVE了。TCPKEEPALIVE參數(shù)可以控制數(shù)據(jù)庫是否會根據(jù)已配置好的間隔時間來定時檢查連接是否為無效連接,如果是,則自動刪除該連接。 例如,當TCPKEEPALIVE參數(shù)設(shè)置為TRUE后,數(shù)據(jù)庫會根據(jù)SDE服務(wù)所在機器的注冊表項KEEPALIVETIME所提供的響應時間,不斷偵測所有連接是否為無效連接,如果為無效連接,則自動刪除該連接。 此參數(shù)的修改跟SDE的最大連接數(shù)的修改方式一樣,有兩種方式,具體可以參考上節(jié)描述的方法。 2.3修改 KEEPALIVETIME的配置這里涉及到另外一個參數(shù):KEEPALIVETIME。 對于操作系統(tǒng)默認安裝的機器來說,KEEPALIVETIME注冊表項是沒有的,而如果沒有話,服務(wù)器不會主動發(fā)送發(fā)送KeepAlive數(shù)據(jù)包來確認空閑連接是否依然毫無變化,也就不會進行刪除操作。所以上面提到的無效連接會越來越多。我們可以在如下路徑中:Local_Machine\system\CurrentControlSet\Services\Tcpip\Parameters 添加DWORD項:KeepAliveTime。這樣系統(tǒng)的注冊表中便有了KEEPALIVETIME項。
如果系統(tǒng)中已經(jīng)有了KEEPALIVETIME項,我們不填寫它的值時,它默認的就是兩小時。根據(jù)網(wǎng)上別人的經(jīng)驗,推薦設(shè)置為5分鐘。不過具體情況根據(jù)項目來定,最后重啟SDE才能生效。 2.4 繼續(xù)修改——修改注冊表中的SharedSection我們在給通州現(xiàn)場設(shè)置了以上三個配置后,過了兩天,現(xiàn)場反映地圖服務(wù)還是蕩掉了。于是我們再次查資料,發(fā)現(xiàn)還有一個關(guān)鍵的地方需要配置——SharedSection。 Windows為每個服務(wù)分配了一個固定大小的內(nèi)存(默認512K)。每個sde進程大約需要9K內(nèi)存,因此sde默認的連接數(shù)為512/9約等于48。 如果我們不修改這個固定大小內(nèi)存的配置,即使我們已經(jīng)將SDE的最大連接數(shù)配置改成了128,一樣無法生效。 按照上面的換算方法,9*128=1152,然后我們適當?shù)膶⑵涓某?024。 最后我們在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows 項中找到SharedSection,并將原SharedSection=1024,3072,512中的第三項改為1024。改完后,到目前已經(jīng)過了兩周,現(xiàn)場反映地圖服務(wù)沒有蕩掉過。
3.解決福州現(xiàn)場問題3.1 修改定期清除緩存——無效果通過http://192.168.101.9:8399/arcgis/rest/admin這個連接進入管理頁面,然后設(shè)置每天的一個時刻定期清除緩存。給現(xiàn)場修改后,第二天現(xiàn)場工程人員回復還是蕩掉了。
3.2 關(guān)掉防火墻,并且設(shè)置服務(wù)過一段時間后再次連接數(shù)據(jù)庫時先檢查連接是否正?!獰o效果
在服務(wù)的ServiceProperties里面設(shè)置這個定期檢查連接的時間間隔。給現(xiàn)場修改的是30分鐘。第二天問現(xiàn)場,現(xiàn)場反饋服務(wù)還是蕩掉了。 3.3 修改數(shù)據(jù)庫最大游標數(shù)、以及SDE最大連接數(shù)等相關(guān)配置——成功仔細觀察錯誤日志,發(fā)現(xiàn)在眾多報錯中有如下一個錯誤。猜想數(shù)據(jù)庫游標數(shù)可能設(shè)置小了。
通過show parameter open_cursors;查看現(xiàn)場的游標數(shù)目為250。 通過select count(*) from v$open_cursor ;查看現(xiàn)場目前的游標打開的數(shù)目,發(fā)現(xiàn)在矢量服務(wù)關(guān)閉了的情況下,這個數(shù)目已經(jīng)過了200。 通過alter system set open_cursors=2000 scope=both;將游標數(shù)目變大。 為保險起見,通過上面提到過的幾個步驟,將SDE的最大連接數(shù)以及殺進程的配置等全部修改。 目前已經(jīng)過了兩周,現(xiàn)場沒再出現(xiàn)服務(wù)蕩掉的情況。 不過我總擔心游標數(shù)設(shè)置大了會影響系統(tǒng),因為,游標在shared pool占有一定的內(nèi)存,太多會帶來浪費,當然也不能太少,太少的話會給系統(tǒng)帶來一定壓力,引起系統(tǒng)內(nèi)存爭搶。 今天詢問了下公司在北京的DBA,他告訴我,游標數(shù)量根據(jù)現(xiàn)場環(huán)境不同而不同,如果會話不多,建議使用會話數(shù)*5來設(shè)置,如果多的話,比如超過200個會話,那*3也可以,并且,游標數(shù)多少對性能影響小,如果你內(nèi)存資源充足,可以多設(shè)置點。 我給現(xiàn)場設(shè)置的是2000,這樣看來是合理的。
4.總結(jié)(1)只修改SDE最大連接數(shù),而不修改注冊表中的SharedSection,是無效果的。 (2)由于矢量查詢與數(shù)據(jù)庫是有直接聯(lián)系的,每一次查詢均需要使用游標,如果數(shù)據(jù)庫中的游標設(shè)置太小,容易引起矢量查詢的崩潰。
-----------以上是我解決此問題的思路和方法,如果朋友你有更好的方法,請你留言告知,不甚感激。
分類: ArcGIS相關(guān)知識
標簽: ArcGIS相關(guān)知識 |
|
來自: 昵稱QAb6ICvc > 《gis應用》