關於ArcGIS Server池化與非池化的理解

2021-08-27 11:00:54 字數 2354 閱讀 8258

用arcserver肯定會遇到池化與非池的問題,而且比較難以理解,我總結了幾種理解方式,可供參考。

一、首先看看catolog上的說明:

池化:被許多使用者重複使用;

非池化:被單一使用者使用,使用完後被釋放掉。

二、乙個形象的比喻

乙個水缸裡有好多魚,你想餵魚。

池化是你任意抓住一條喂,喂了就放回去。

非池化是指定一條魚讓你喂,直到你不想再餵魚,就把魚殺了。

此比喻來自esri中國社群的一位網友,原帖

下樓有網友補充:

這個比喻有點意思,但是非池化還不僅是指定一條魚的問題,事實是這條魚原本並不存在,要現生成。所以從非池化獲得魚的速度比池化中從已有的魚中任意抓一條要慢

三、詳細解釋

(來自esri中國社群)

安裝了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(非池化)兩種。對於pooledservice(池化服務)來說,乙個使用者(或者應用程式)請求該服務時,會隨機獲得乙個該服務已經建立的instance的引用,由該instance對請求做出響應;請求完成後,使用者會立即釋放該instance的引用,使其返回假想的instancepool中,使用者發出另乙個請求,重複上面的過程。如果是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)。可以看出,對於經常不用的服務,我們可以將它設定成手動啟動,一來節約記憶體,二來加快機器啟動速度。

四、個人理解

關於常量池

這裡暫且把integer作為包裝類的代表來說明.我們知道每次new都是建立乙個新的物件,由於 比較的是記憶體位址,所以下面的 不會為true string s1 new string 1 string s2 new string 1 system.out.println s1 s2 false但是下...

ArcGIS Server效能調整

arcgis server效能調整 arcgis server產品的強大功能往往給了有些使用者帶來一定的認識誤區。有些使用者會認為可以把c s程式的使用模式和資料照搬到arcgis server的應用系統中.arcgis server的應用是b s的應用,軟體角度來講涉及到資料庫,web serve...

arcgisserver資料遷移

參考位址 將備份檔案夾中的至少如下三個資料夾 config store services directories arcgissystem arcgisinput directories arcgisoutput 拷貝到新的站點,覆蓋新站點對應的資料夾 存放位址 usr local docker d...