管理員可以利用 Solaris Resource Manager 來控制﹕
使用者或一個應用程式所佔用的虛擬記憶體數量(所有處理的虛擬記憶體在 lnode 層級的使用量)。
一組使用者或一個應用程式所佔用的虛擬記憶體數量(所有處理的虛擬記憶體的群組 header lnode 層級使用量,所有處理在此層級附加至群組 header 及/或其子)。
個別處理所佔用的虛擬記憶體數量。
一位使用者/一個 lnode 目前可以執行的處理數。
有數種系統屬性可用來記錄虛擬記憶體使用量,並且指派其限制。
用來管理記憶體使用量的系統屬性為﹕
一個 lnode 的 memory.myusage 屬性等於目前附加至 lnode 的所有處理虛擬記憶體使用量總數。
一個 lnode 的 memory.usage 屬性等於其 memory.myusage 屬性及其子 lnode 的 memory.usage 屬性總數。
memory.limit 屬性被應用於 memory.usage 屬性。它會限制附加至 lnode 的所有處理以及所有成員 lnode 的總記憶體使用量。
下列的系統屬性可用來記錄處理使用量並指派其限制。
一個 lnode 的memory.plimit 屬性是一種每個-處理限制,分別應用於附加至其上及其任何成員的每個處理的記憶體使用量。
每當一個處理嘗試增加其記憶體大小時,就會受到其所附加的 lnode 記憶體限制(總計及每個-處理)。處理共有五種增加其記憶體大小的方法﹕
呼叫一個配置常式,如 malloc(3C),可以產生 sbrk(2) 系統呼叫的引動。如果超出一個記憶體限制,呼叫會回傳一個錯誤,其中 errno 設定為 ENOMEM。
擴展堆疊以造成一個堆疊錯誤,通常可以讓處理獲得額外的一個記憶體頁面。如果超出一個記憶體限制,處理會收到一個 SIGSEGV 信號。
mmap(2) 的使用。
使用 fork(2)。子位址空間在仍由雙親處理擁有時被複製。在複製的過程中,新的位址空間不會超出 memory.plimit,因為雙親必須已經在此限制之內;然而配置必須受到 memory.limit 的限制。
使用 exec(2)。在一個 exec 期間,會因為放棄舊的位址空間而使一開始的記憶體使用量減少。然而如果新程式的位址空間比較大,因而導致超出限制,那麼 exec 可能會失敗。
Enterprise 10000 系統所含的動態再設置 (DR) 功能對於 lnode 的虛擬記憶體限制影響有限。明確地說,DR 可以在系統啟動與執行期間,從系統中新增或移除實體記憶體。(系統的虛擬記憶體庫包括所有的實體記憶體,加上設置入系統的交換空間。)此外,swap(1M) 指令可以用在任何 Solaris 系統上以從系統中新增 (-a) 或刪除 (-d) 交換空間。因此虛擬記憶體總數量會在操作間增加或減少。
這會間接影響 Solaris Resource Manager 對虛擬記憶體採行的限制。因為虛擬記憶體是以絕對單位(而非配分)來管理,當系統的資源在操作中變更時,有效限制並不變更。(請注意這個行為與處理機的動態再設置不同,如"動態再配置"中所述。)
用來管理處理使用量(處理的數目)的系統屬性為﹕
一個 lnode 的process.myusage 屬性等於附加至 lnode 之上的處理數。
一個 lnode 的 process.usage 屬性等於其 process.myusage 屬性及其子 lnode 的 process.usage 屬性總數。
process.limit 屬性是一種應用至 lnode 的 process.usage 屬性之上的限制,它可以限制同時附加至 lnode 及所有成員 lnode 的處理計數。
fork(2)、fork1(2) 以及 vfork(2) 系統呼叫可用來建立新的處理。如果導致處理限制超出的話,系統呼叫會失敗,然後回傳一個 EAGAIN 錯誤。大多數的程式會將 EAGAIN 解譯為一個系統資源的暫時性內存,並且在短暫的睡眠之後再試著 fork (派生)一次。如果是因為一個 Solaris Resource Manager 的限制而導致 fork 失敗,可能會造成無限時間的迴圈;因為直到受影響的 lnode 設定限制之前,每次重試都會一直回傳一個 EAGAIN。