Solaris Resource Manager 1.3 系統管理指南

第 8章 使用資源運算常駐程式的實體記憶體管理


註解 -

只有在您將 Solaris Resource Manager 1.3 與 Solaris 8 SPARC 平台版配合使用時才可使用此功能。


資源運算是放置到資源用量上的上限,例如實體記憶體或 CPU 時間,其限制透過收集處理執行。

在 Solaris Resource Manager 1.3中,資源運算的執行可以讓您透過收集附加到 lnode 或專案中的處理,來控制實體記憶體的資源用量。如需關於專案的資訊,請參閱 專案(4)。

限制實體記憶體用量的屬性

您可以透過將屬性新增到 lnode 或專案,定義 lnode 或專案(根據使用中的模式而定)的實體記憶體資源運算。

用來指定常駐設定大小 (RSS) 運算的 lnode 屬性是:

rss.limit

rss.limit 可定義具備特定單位的實體記憶體運算,應用到連接至 lnode 的處理程序集合。運算必須是正數。

rss.limit 透過 limadm(1MSRM) 設置。例如,若要為 lnode oracle 設定 10-GB的 RSS 運算:


# /usr/srm/sbin/limadm set rss.limit=10G oracle

用來建立 RSS 運算的專案屬性是:

rcap.max-rss

rcap.max-rss 屬性可定義實體記憶體的總數,供附加到專案的處理使用。運算必須是正數。

rcap.max-rss 在 專案(4) 資料庫中設置。例如,專案資料庫中下列的行,可以為名為 oracle的專案設置 RSS 運算。


oracle:100::oracle,root::rcap.max-rss=10737418240

技術性說明

資源運算執行常駐程式 rcapd(1MSRM) 及其相關公用程式,可提供資源運算與管理的機制。只有 rcapd 的一個實例可在任何指定時間執行。常駐程式會定期取樣具備實體記憶體的處理集合之資源利用。如果處理用量超過運算數量並符合其他條件,常駐程式將會採取行動將處理的合計資源用量減少成低於運算數量的水平。

虛擬記憶體系統將實體記憶體劃分成不同區段,稱為「頁」。為了將檔案中的資料讀取至記憶體,虛擬記憶體會一次讀取一頁,或檔案的進入頁。常駐程式可以將不常使用的頁出頁或重新部署到實體記憶體以外的區域,以減少資源的用量。

您可以使用rcapadm(1MSRM) 來設置資源運算常駐程式。rcapadm亦可用來管理全域層級的資源運算。您可以透過將設置變更傳送到 SIGHUP(請參閱 kill(1)),或透過設置間隔(請參閱 rcapadm(1MSRM))隨時將它合併到常駐程式上的 rcapd 中。您必須具備超級使用者權限才能設置常駐程式。如果是在沒有引數的情況下使用,rcapadm 將會顯示資源運算常駐程式的目前狀態(如果它已經設置的話)。

rcapstat(1SRM) 可以用來報告每個已定義運算的資源運算執行常駐程式統計資料。

使用資源運算常駐程式

使用 rcapadm(1MSRM) 設置常駐程式。

選取操作模式。

支援的操作模式共有兩種:lnode專案

若要強制為 lnodes 定義運算,而忽略專案的運算定義,請鍵入:


# rcapadm -m lnode

若要強制為專案定義運算,而忽略 lnodes 的運算定義,請鍵入:


# rcapadm -m project

調整操作間隔

您可以調整由 rcapd 執行之定期作業的間隔。若要重新設定間隔,請使用-i 選項。


# rcapadm -i interval=value,...,interval=value 

所有的間隔均以秒指定。下表為您描述間隔及其預設值。

間隔 

以秒指定的預設值 

說明 

掃描

15 

新的處理之 rcapd 掃描速率。最小值為 1秒。

樣本

處理常駐設定大小取樣的速率。最小值為 1秒。 

報告

5  

rcapdrcapstat升級之記憶體分頁統計資料的速率。如果設定為 0,統計資料將不會更新。

設置

60 

重新設置的速率。在重新設置速率中,rcapd 會檢查其設置檔案以進行更新,並為新的 lnode或專案,或者新的集合掃描 lnode (限制)資料庫或專案資料庫。

如果將間隔指定為比指定到 rcapd(使用 rcapadm(1MSRM))短的 rcapstat,某些間隔的輸出可能會是零。這是因為 rcapd 不會比指定 rcapadm 的間隔更常更新統計資料,而此間隔是獨立的,並且具備較低的精確度,其取樣間隔由 rcapstat使用。

設定記憶體運算執行值

您可以對運算進行設置,使它只有在可用於處理的記憶體不足時才執行。最小(以及預設)值為 0,表示記憶體運算將永遠執行。若要設定記憶體運算執行的不同最低實體記憶體用量,請鍵入:


# rcapadm -c percent

percent 值應該介於 0 至 100 之間。目前的全域實體記憶體用量及其運算可以透過將 -g 選項用到 rcapstat 指令上取得。請參閱 報告全域記憶體運算

啟動資源運算

若要啟動資源運算,以便使它立即啟動以及在每次系統開機時啟動,請鍵入:


# rcapadm -E

若要在開機時啟動資源運算而不影響其目前執行狀態,請亦指定-n 選項:


# rcapadm -n -E

關閉資源運算

若要關閉資源運算,以便使它立即停止以及不要在每次系統開機時啟動,請鍵入:


# rcapadm -D

若要關閉資源運算而不影響其目前執行狀態,請亦指定-n 選項:


# rcapadm -n -D

註解 -

如果已消除,rcapd 會將處理保持為停止的狀態。請參閱 kill(1)。使用 rcapadm -DSIGTERM 使 rcapd 正確終止。


監視資源運算常駐程式

rcapstat 指令可用來發出由 rcapd 運算之 lnodes 或專案的報告。您可以經常設定取樣間隔以及指定報告。

間隔

以秒指定取樣間隔。預設間隔為 5秒。

計數

指定統計資料重複的次數。在預設情況下,rcapstat 會報告統計資料直到收到終止訊號,或者直到 rcapd 處理結束為止。

rcapstat 發出之第一份報告中的記憶體分頁統計資料,顯示自從啟動常駐程式後的活動。接續的報告將反映自發送上一個報告後的活動。

下列清單定義 rcapstat 報告中的欄位標題。

id

處理集合的 lnode ID 或附加到專案之處理的專案 ID。

lnode/專案

集合 ID 類型,它們是 專案lnode

nproc

集合中的處理數量。

vm

處理集合的總虛擬記憶體大小,包括所有的映射檔案與裝置,以千位元組 (K)、百萬位元組 (M),或十億位元組 (G)計算。

rss

處理集合的總常駐設定大小 (RSS),以千位元組 (K)、百萬位元組 (M),或十億位元組 (G)計算,不包括共享的物件。

cap

為專案或 lnode 定義的 RSS 運算。如需關於如何指定記憶體運算的資訊,請參閱 rcapd(1MSRM)。

at

自上次取樣 rcapstat 後,rcapd 嘗試出頁的記憶體總計。

avgat

自上次取樣 rcapstat 後,發生每個取樣週期過程中,rcapd 嘗試出頁的記憶體平均數量。rcapd 取樣集合 RSS 的速率,可以使用 rcapadm(1MSRM) 設定 。

pg

自上次取樣 rcapstat 後,rcapd 成功出頁的記憶體總計。rcapd 會將最少用的記憶體頁進行出頁。

avgpg

自上次取樣 rcapstat 後,發生每個取樣週期過程中,rcapd 成功出頁的估計記憶體平均數量。rcapd 取樣處理 RSS 大小的速率,可以使用 rcapadm 設定 。

使用 rcapstat 製作報告

本章節的範例為您顯示如何使用 rcapstat ,監視具備已定義實體記憶體運算之處理集合的資源用量。

使用 rcapstat 報告 Cap 及 Lnode 資訊。

Caps(運算)為與兩位使用者相關的兩個 lnodes 定義。user1 具有 50 百萬位元組的運算,而 user2 具有 10 百萬位元組的運算。

下列指令以5 秒的取樣間隔製作報告。報告會發送五次,每一次取樣後一次。


usermachine% rcapstat 5 5
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M   50M    0K 3312K    0K
 78194 user2       1 2368K 1856K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M    0K    0K    0K    0K
 78194 user2       1 2368K 1856K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M    0K    0K    0K    0K
 78194 user2       1 2368K 1928K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M    0K    0K    0K    0K
 78194 user2       1 2368K 1928K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   50M    0K    0K    0K    0K
 78194 user2       1 2368K 1928K   10M    0K    0K    0K    0K

輸出的首三行組成第一個報告,其中包含兩個 lnode 的運算與 lnode 資訊,以及自從啟動 rcapd 後的記憶體分頁統計資料。atpg 欄位是用於 user1 之大於零的數字,以及用於 user2 的零數值,它們標示在常駐程式的歷程記錄中,有某一個時段 user1 超過其運算,而 user2 則沒有。

接續的報告包含自優先間隔後的記憶體分頁統計資料,但不會顯示重要的活動。

降低 Lnode 的運算

limadm(1MSRM) 指令可以用來降低 lnode 的記憶體運算,使運算更具備限制作用。rcapd 會在下一個設置間隔後強制執行新的運算(請參閱 rcapadm(1MSRM))。也可以傳送訊號,這將使 rcapd 立即強制執行新的運算。


admin# limadm set rss.limit=30M user1
admin# pkill -HUP rcapd

下列指令以5 秒的取樣間隔製作報告。報告會發送五次,每一次取樣後一次。


admin# rcapstat 5 5
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   35M   30M   50M    0K 3312K    0K
 78194 user2       1 2368K 1856K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   36M   30M   52M   52M  632K  632K
 78194 user2       1 2368K 2096K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   33M   30M   57M   52M  816K  632K
 78194 user2       1 2368K 1968K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   27M   30M 4792K 4792K   40K   40K
 78194 user2       1 2368K 1144K   10M    0K    0K    0K    0K
    id lnode   nproc    vm   rss   cap    at avgat    pg avgpg
112270 user1      24  123M   27M   30M    0K    0K    0K    0K
 78194 user2       1 2368K 1144K   10M    0K    0K    0K    0K

當運算從 50 百萬位元組降到 30 百萬位元組時,rcapd 會透過嘗試將運算值以上的 6 百萬位元組出頁來做出反應。目標將會達到;因為超出的只是個小數目。

使用 rcapstat 監視專案的 RSS

下列指令以5 秒的取樣間隔製作報告。報告會發送五次,每一次取樣後一次。


user1machine% rcapstat 5 5

id     project   nproc    vm   rss   cap    at avgat    pg avgpg
376565 user1        57  209M   46M   10M  440M  220M 5528K 2764K
376565 user1        57  209M   44M   10M  394M  131M 4912K 1637K
376565 user1        56  207M   43M   10M  440M  147M 6048K 2016K
376565 user1        56  207M   42M   10M  522M  174M 4368K 1456K
376565 user1        56  207M   44M   10M  482M  161M 3376K 1125K

在此範例中,專案 user1 具有超出其實體記憶體運算的 RSS。pg 欄位中的非零數值,標示 rcapd 透過降低專案之處理的實體記憶體用量以嘗試符合運算時,一貫地將記憶體出頁。然而,從變動的 rss 值未顯示相應的降低,標示 rcapd 並未成功。這意味著應用程式的常駐記憶體正被活躍地使用,促使 rcapd 影響工作設定。在此情況下,系統將繼續遇到高記憶體分頁錯誤率以及相關的 I/O,直到工作設定大小減少後,運算才會提高,或者應用程式變更其記憶體存取樣式。

決定專案的工作設定大小

下例是前例的繼續,且它使用相同的專案。


example% rcapstat 5 5
    id project    nproc    vm   rss   cap    at avgat    pg avgpg
376565 user1         56  207M   44M   10M  381M  191M   15M 7924K
376565 user1         56  207M   46M   10M  479M  160M 2696K  898K
376565 user1         56  207M   46M   10M  424M  141M 7280K 2426K
376565 user1         56  207M   43M   10M  401M  201M 4808K 2404K
376565 user1         56  207M   43M   10M  456M  152M 4800K 1600K
376565 user1         56  207M   44M   10M  486M  162M 4064K 1354K
376565 user1         56  207M   52M  100M  191M   95M 1944K  972K
376565 user1         56  207M   55M  100M    0K    0K    0K    0K
376565 user1         56  207M   56M  100M    0K    0K    0K    0K
376565 user1         56  207M   56M  100M    0K    0K    0K    0K
376565 user1         56  207M   56M  100M    0K    0K    0K    0K
376565 user1         56  207M   56M  100M    0K    0K    0K    0K

透過提高專案的運算或透過變更最小運算記憶體強制值(請參閱 rcapadm(1MSRM)),來約束運算的執行,從而使常駐設定可以成為工作設定。 rss 欄位可能會穩定下來以顯示專案工作設定大小,如此例所示。這是一個最小運算值,它可以允許專案中的處理不會在不斷受到記憶體分頁錯誤的情況下執行操作。

報告全域記憶體運算

您可以使用 rcapstat 的-g 選項報告下列資訊:

參考

如需其他資訊,請參閱 rcapadm(1MSRM)rcapd(1MSRM)rcapstat(1SRM)limadm(1MSRM),以及 project(4)。