ServerObject的池化和非池化模式
當我們訪問一個服務器對象Server Object的時候,這個對象是已經存在的呢?還是在訪問時新建的?都有可能,這取決于我們如何選擇。如果我們選擇共享池化模式,則在SOM啟動的時候,SOM就建立了幾個SO供外界訪問,一個SO被A請求訪問后,被釋放回共享池中,還可以下次被B訪問使用,因此,SO將可以被多個用戶訪問。如果是非共享池模式,當一個請求訪問時,SOM專門為它新建一個SO。
這樣,在池化模式下,訪問與SO的比例不是1:1,它支持更多的用戶;而非池化模式就是1:1的,它支持的用戶比池化模式少。
SO 放在什么地方,對,它就放在一個Server Context中,即一個進程中。一個訪問連接到SO,是一個例程,這個例程是放置在一個進程中的。而對于這個進程的特征,我們還需要進一步設置,即進程的孤立性。如果Server Context是高孤立的(high isolation),那么一個進程中只能放置一個例程,這樣保障了安全性;如果是低孤立的,四個訪問連接的例程都可以放置在一個進程中,它的特點是節約資源。至于如何設置,就有必要考慮我們的硬件設備了。
池化和非池化的設置對狀態或非狀態的應用程序也有影響,這些我們將在后面的blog中提到。
[轉自蔣波濤的博客] http://www.hmgis.cn/post/242.html
ArcGIS Server池化和非池化類型服務區別
如果是非池化的服務,服務中的數據可以是注冊了版本或者沒有注冊版本的,如果是注冊了版本的數據,所有的編輯操作是可以進行redo、undo操作,并且有沖突解決的方案。如果是沒有注冊版本的數據,就不可以進行redo、 undo的操作,但是可以對編輯內容選擇一次的保存和不保存。
????? 如果是池化的服務,那么服務中的數據就只能是非版本的。這種情況下的編輯功能是最簡單的,編輯的內容一旦完成就進行了保存,沒有辦法redo、undo。比如對一個多邊形進行了節點移動的操作,一旦操作完成就不可以進行恢復。
http://hi.baidu.com/%CB%AE%C4%BE%C8%FD%C0%C9/blog/item/0f752b441249b744500ffe65.html
池化-魚
“一個水缸里有好多魚,你想喂魚。
池化是你任意抓住一條喂,喂了就放回去。
非池化是指定一條魚讓你喂,直到你不想再喂魚,就把魚殺了。
以上是我的理解,不知對否,請高手不吝賜教 !”
這個比喻有點意思,但是非池化還不僅是指定一條魚的問題,事實是這條魚原本并不存在,要現生成。所以從非池化獲得魚的速度比池化中從已有的魚中任意抓一條要慢
http://bbs.esrichina-bj.cn/ESRI/thread-48027-1-1.html
任務管理器中arcsom.exe和arcsoc.exe的個數問題
安裝了ArcGIS Server的機器,當打開任務管理器的時候,會看到里面有arcsom.exe和arcsoc.exe進程,但它們的數量具體是如何決定的呢?以下的分析僅針對單機配置的情況(假定所有部件都安裝在一臺機器上),對于分布式的安裝,可以此類推。
??????? GISServer是由一個SOM(Server Object Manager)和若干個SOC(Server ObjectContainer)機器組成。SOM會在機器里以arcgissom賬戶啟動一個ArcSOM.exe的進程,這個進程負責管理(啟動和停止)其他SOC進程(ArcSOC.exe),SOC進程雖然是由SOM啟動,但是以arcgissoc 賬戶運行的。arcsom.exe啟動時,會自動啟動兩個 arcsoc.exe,一個用于記錄AGS的日志,一個用于清空特定的工作目錄。這兩個arcsoc.exe在任務管理器中可以根據所占用的內存數與其他arcsoc.exe區分開來,如圖,占用內存較少的兩個arcsoc.exe便是由SOM進程自動啟動的,而其他的arcsoc.exe 則是由具體service啟動的。
插入一些概念:
用戶請求一個service時,是和該service的一個instance打交道。service有pooled和 nonpooled兩種。
對于pooled service來說,一個用戶(或者應用程序)請求該服務時,會隨機獲得一個該服務已經創建的instance 的引用,由該instance對請求做出響應;請求完成后,用戶會立即釋放該instance的引用,使其返回假想的instance pool中,用戶發出另一個請求,重復上面的過程。
如果是non pooledservice,用戶第一次發出請求時,也會隨機獲得該service已經創建的一個instance引用,但請求處理完成后,該用戶繼續持有對該instance的引用,直到用戶斷開與服務器的連接(結束程序),該instance會被銷毀,然后SOM會創建一個新的instance來維持數量。
對于pooled service,又有low isolation和high isolation兩種。
highisolation是指service的每個instance都會獨占一個進程(arcsoc.exe),lowisolation則是指一個進程內可保有多個(默認是8個,最多可達256個)instance(就是所謂的多線程)。lowisolation的好處是可以啟動相對少的 arcsoc.exe來維持同樣數量的instance,節約服務器的內存資源;但如果一個 arcsoc.exe崩潰,那么里面的所有instance都會被銷毀,即使用戶正在使用它們。highisolation的優缺點則與之相反。一般來說,對于pooled service使用high isolation設置。non pooledservice的instance總是獨占一個進程(同highisolation)。另外可以指定一個服務的最小和最大instance數目,服務啟動時會自動創建最小數目的instance等待調用;當創建的instance數目達到最大數量時,所有的請求都會進入等待隊列。
??????? 至此,可以來分析一個具體的案例了。現在機器上總共有2個服務:
World:pooled,low isolation(8 instance per process),min-instance:9, max-instance:16?? ,隨機啟動
China: non pooled ,min-instance:2, max-instance:4,手動啟動。
??????? 開機,SOM啟動一個arcsom.exe,隨后啟動兩個arcsoc.exe;World服務啟動,創建9個instance,其中8個 instance公用一個arcsoc.exe,剩下一個instance啟動另外一個arcsoc.exe。此時機器中共有1個 arcsom.exe,4個arcsoc.exe。此時手動啟動China服務,創建2個instance,每個instance會啟動一個 arcsoc.exe。此時,機器中共有1個arcsom.exe,6個arcsoc.exe。
??????? 觀察統計可知,最小instance數量為1的服務啟動時間平均在17秒左右(cpu:Intel T7200)。可以看出,對于經常不用的服務,我們可以將它設置成手動啟動,一來節約內存,二來加快機器啟動速度。
http://bbs.esrichina-bj.cn/ESRI/thread-41757-1-1.html
當我們訪問一個服務器對象Server Object的時候,這個對象是已經存在的呢?還是在訪問時新建的?都有可能,這取決于我們如何選擇。如果我們選擇共享池化模式,則在SOM啟動的時候,SOM就建立了幾個SO供外界訪問,一個SO被A請求訪問后,被釋放回共享池中,還可以下次被B訪問使用,因此,SO將可以被多個用戶訪問。如果是非共享池模式,當一個請求訪問時,SOM專門為它新建一個SO。
這樣,在池化模式下,訪問與SO的比例不是1:1,它支持更多的用戶;而非池化模式就是1:1的,它支持的用戶比池化模式少。
SO 放在什么地方,對,它就放在一個Server Context中,即一個進程中。一個訪問連接到SO,是一個例程,這個例程是放置在一個進程中的。而對于這個進程的特征,我們還需要進一步設置,即進程的孤立性。如果Server Context是高孤立的(high isolation),那么一個進程中只能放置一個例程,這樣保障了安全性;如果是低孤立的,四個訪問連接的例程都可以放置在一個進程中,它的特點是節約資源。至于如何設置,就有必要考慮我們的硬件設備了。
池化和非池化的設置對狀態或非狀態的應用程序也有影響,這些我們將在后面的blog中提到。
[轉自蔣波濤的博客] http://www.hmgis.cn/post/242.html
ArcGIS Server池化和非池化類型服務區別
如果是非池化的服務,服務中的數據可以是注冊了版本或者沒有注冊版本的,如果是注冊了版本的數據,所有的編輯操作是可以進行redo、undo操作,并且有沖突解決的方案。如果是沒有注冊版本的數據,就不可以進行redo、 undo的操作,但是可以對編輯內容選擇一次的保存和不保存。
????? 如果是池化的服務,那么服務中的數據就只能是非版本的。這種情況下的編輯功能是最簡單的,編輯的內容一旦完成就進行了保存,沒有辦法redo、undo。比如對一個多邊形進行了節點移動的操作,一旦操作完成就不可以進行恢復。
http://hi.baidu.com/%CB%AE%C4%BE%C8%FD%C0%C9/blog/item/0f752b441249b744500ffe65.html
池化-魚
“一個水缸里有好多魚,你想喂魚。
池化是你任意抓住一條喂,喂了就放回去。
非池化是指定一條魚讓你喂,直到你不想再喂魚,就把魚殺了。
以上是我的理解,不知對否,請高手不吝賜教 !”
這個比喻有點意思,但是非池化還不僅是指定一條魚的問題,事實是這條魚原本并不存在,要現生成。所以從非池化獲得魚的速度比池化中從已有的魚中任意抓一條要慢
http://bbs.esrichina-bj.cn/ESRI/thread-48027-1-1.html
任務管理器中arcsom.exe和arcsoc.exe的個數問題
安裝了ArcGIS Server的機器,當打開任務管理器的時候,會看到里面有arcsom.exe和arcsoc.exe進程,但它們的數量具體是如何決定的呢?以下的分析僅針對單機配置的情況(假定所有部件都安裝在一臺機器上),對于分布式的安裝,可以此類推。
??????? GISServer是由一個SOM(Server Object Manager)和若干個SOC(Server ObjectContainer)機器組成。SOM會在機器里以arcgissom賬戶啟動一個ArcSOM.exe的進程,這個進程負責管理(啟動和停止)其他SOC進程(ArcSOC.exe),SOC進程雖然是由SOM啟動,但是以arcgissoc 賬戶運行的。arcsom.exe啟動時,會自動啟動兩個 arcsoc.exe,一個用于記錄AGS的日志,一個用于清空特定的工作目錄。這兩個arcsoc.exe在任務管理器中可以根據所占用的內存數與其他arcsoc.exe區分開來,如圖,占用內存較少的兩個arcsoc.exe便是由SOM進程自動啟動的,而其他的arcsoc.exe 則是由具體service啟動的。

插入一些概念:
用戶請求一個service時,是和該service的一個instance打交道。service有pooled和 nonpooled兩種。
對于pooled service來說,一個用戶(或者應用程序)請求該服務時,會隨機獲得一個該服務已經創建的instance 的引用,由該instance對請求做出響應;請求完成后,用戶會立即釋放該instance的引用,使其返回假想的instance pool中,用戶發出另一個請求,重復上面的過程。
如果是non pooledservice,用戶第一次發出請求時,也會隨機獲得該service已經創建的一個instance引用,但請求處理完成后,該用戶繼續持有對該instance的引用,直到用戶斷開與服務器的連接(結束程序),該instance會被銷毀,然后SOM會創建一個新的instance來維持數量。
對于pooled service,又有low isolation和high isolation兩種。
highisolation是指service的每個instance都會獨占一個進程(arcsoc.exe),lowisolation則是指一個進程內可保有多個(默認是8個,最多可達256個)instance(就是所謂的多線程)。lowisolation的好處是可以啟動相對少的 arcsoc.exe來維持同樣數量的instance,節約服務器的內存資源;但如果一個 arcsoc.exe崩潰,那么里面的所有instance都會被銷毀,即使用戶正在使用它們。highisolation的優缺點則與之相反。一般來說,對于pooled service使用high isolation設置。non pooledservice的instance總是獨占一個進程(同highisolation)。另外可以指定一個服務的最小和最大instance數目,服務啟動時會自動創建最小數目的instance等待調用;當創建的instance數目達到最大數量時,所有的請求都會進入等待隊列。
??????? 至此,可以來分析一個具體的案例了。現在機器上總共有2個服務:
World:pooled,low isolation(8 instance per process),min-instance:9, max-instance:16?? ,隨機啟動
China: non pooled ,min-instance:2, max-instance:4,手動啟動。
??????? 開機,SOM啟動一個arcsom.exe,隨后啟動兩個arcsoc.exe;World服務啟動,創建9個instance,其中8個 instance公用一個arcsoc.exe,剩下一個instance啟動另外一個arcsoc.exe。此時機器中共有1個 arcsom.exe,4個arcsoc.exe。此時手動啟動China服務,創建2個instance,每個instance會啟動一個 arcsoc.exe。此時,機器中共有1個arcsom.exe,6個arcsoc.exe。
??????? 觀察統計可知,最小instance數量為1的服務啟動時間平均在17秒左右(cpu:Intel T7200)。可以看出,對于經常不用的服務,我們可以將它設置成手動啟動,一來節約內存,二來加快機器啟動速度。
http://bbs.esrichina-bj.cn/ESRI/thread-41757-1-1.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
