AIX 5L 記憶體效能優化,第 1 部分: AIX Version 5.3 中記憶體的概述以及記憶體引數的優化
本系列的三篇文章深入研究記憶體優化中的引數優化,重點關注於記憶體效能優化方面的各種挑戰和各種最佳實踐,並且還介紹了 AIX® Version 5.3 中的一些改進。儘管與中央處理單元 (CPU) 優化相比,實現記憶體優化可能更加困難,但它同樣是非常重要的。在 AIX 伺服器中,與任何其他子系統相比,您可以對記憶體進行更多的優化工作。更改系統中的某些記憶體引數,可以極大地提高效能,特別是在尚未對這些引數進行優化的執行環境中。本系列文章的第 1 部分提供了 AIX 中記憶體的概述,包括對虛擬記憶體和虛擬記憶體管理器 (VMM) 的介紹。 作為一名系統管理員,您應該已經對有關記憶體的基本知識非常熟悉,如物理和虛擬記憶體之間的區別。您可能還不是很清楚 AIX® 中的虛擬記憶體管理器 (VMM) 是如何工作的、以及它與效能優化之間的關係如何。而且,在最近幾年中,有一些優化命令和引數發生了變化,如果您較長時間沒有使用 AIX 了,那麼您可能會發現,您從前所熟悉的一些命令,現在甚至根本無法繼續使用了。本文詳細地介紹了 AIX VMM,以及優化 VMM 所需使用的各種優化命令。我將介紹一些監視工具,您可以使用這些工具來優化您的系統,本文還對一些比較重要的 AIX Version 5.3 記憶體管理增強功能進行概述。實現這些增強功能,即將其應用到您的系統環境,可以在您的系統中優化記憶體效能。 儘管您可能會發現,與其他的子系統相比,記憶體的優化更為困難一些,但是收到的效果往往更加顯著。可能還有一些應該在您的系統中進行設定的特定的優化建議,這取決於您所執行的系統的型別。為了幫助證實這些內容,我使用了一個特定的示例,並介紹了進行這些引數設定的一些最佳實踐。在某些情況下,動態地優化一個或兩個引數,可能會使得您的系統的整體效能完全不同。 無論您需要對哪個子系統進行優化,有一個方面是相同的,即優化系統—您始終應該將其看作一個正在進行的程式。開始對系統進行監視的最佳時間是當您首次將系統應用到產品環境中並且正常執行時,而不是等到使用者抱怨系統的效能非常糟糕的時候。如果您不瞭解系統正常執行時的情況,並以此作為基準,那麼您可能永遠也無法真正地確定是否出現了問題。而且,一次只應該進行一項更改,並且在進行了更改之後,應該儘快地捕獲相關的資料並對其進行分析,以確定這項更改究竟帶來了什麼不同(如果存在的話)。 這部分內容提供了與 AIX 有關的記憶體方面的概述。我將介紹 AIX 如何使用虛擬記憶體來定址比系統中實體記憶體更大的記憶體。我還將說明 VMM 的工作方式以及它如何處理各種請求。 任何有關記憶體和 AIX 的介紹都必須以對 VMM 的描述作為開始。有時候,令 AIX 新手感到困惑的是,VMM 服務如何處理系統中所有的記憶體請求,而不僅僅是虛擬記憶體本身。在訪問 RAM 時,VMM 需要分配空間,即使是在系統中有足夠的實體記憶體的情況下。它實現了分頁空間的預分配過程。使用這種方法,VMM 在幫助管理實際記憶體方面扮演了重要的角色,而不僅是在虛擬記憶體方面。下面來說明它的工作原理。在 AIX 中,將所有的虛擬記憶體段劃分為若干個頁面。在 AIX 中,每個頁面的預設大小為 4KB。所分配的頁面可以位於 RAM 或者分頁空間(虛擬記憶體儲存於磁碟上)。VMM 還維護一個稱為空閒列表 的物件,該物件定義為未分配的頁幀。它們用於處理缺頁的情況。通常存在少量未分配頁面(您可以自行配置),VMM 可以使用這些頁面來騰出空間併為其重新分配頁幀。可以使用 VMM 的頁面置換演算法來選擇要重新分配頁幀的虛擬記憶體頁面。這種分頁演算法可以確定對當前位於 RAM 中的哪些虛擬記憶體頁面的頁幀進行回收,並放回到空閒列表中。AIX 可以使用所有可用的記憶體,除了那些配置為未分配並用做空閒列表的記憶體之外。 需要重申的是,VMM 的目的是管理 RAM 和虛擬頁面的分配。由此可以看出,它的目標是幫助最大限度地縮短缺頁響應時間,並在可能的情況下減少虛擬記憶體的使用。很顯然,假設要在 RAM 和分頁空間之間進行選擇,在 RAM 可用的情況下,大多數人都更希望使用實體記憶體。另外,VMM 還將虛擬記憶體段劃分為兩種不同的類別。它們分別是,使用計算記憶體的工作段和使用檔案記憶體的持久段。瞭解這兩種類別之間的區別是非常重要的,因為這將幫助您實現系統的最優化。 當您的程式對計算資訊進行處理時,將使用到計算記憶體。這些工作段是臨時的(暫時的),並且當程式終止或者頁面被替換時,這些工作段將不復存在。它們沒有對應的持久磁碟儲存位置。在許多情況下,當一個程式終止時,將釋放其物理和分頁空間。當可用頁面出現較大的峰值時,您可以在監視系統的過程中發現這種情況。在 VMM 中,當空閒實體記憶體較少時,可以將最近沒有使用的程式從 RAM 移出到分頁空間,以幫助釋放實體記憶體,從而完成更多的實際工作。 與計算記憶體不同,檔案記憶體使用了持久段,並在磁碟上具有持久儲存位置。資料檔案或者可執行程式通常都對映為持久段,而不是工作段。資料檔案可能與檔案系統相關,如 JFS、JFS2 或 NFS。它們一直都位於記憶體中,直到檔案被解除安裝、頁面被替換、或者取消了到檔案的連結。在將資料檔案複製到 RAM 中之後,VMM 控制何時對這些頁面進行覆蓋或者將其用於儲存其他資料。在可以選擇的情況下,大多數人更希望將檔案記憶體調出到磁碟,而不是計算記憶體。 當程式引用磁碟上的某個頁面時,必須將其調入,而這可能會導致再次將其他的頁面調出。VMM 常駐記憶體並在後臺執行,嘗試替換最近沒有使用的頁幀,其中使用到前面介紹的頁面置換演算法。它還可以幫助檢測系統顛簸,當可用記憶體量很低並且不斷地調入和調出頁面以支援任務的處理時,可能會出現系統顛簸。實際上,VMM 中提供了一種記憶體負載控制演算法,它可以檢測系統是否出現顛簸,並嘗試去解決這種情況。如果不加以處理,系統顛簸可能會導致系統停滯,因為核心此刻過分地關注於為頁面騰出空間,而不是完成任何有實際意義的工作。 讓我們研究一些相關的工具,它們允許您對 VMM 進行優化,從而實現系統效能的優化。我提供了一個環境示例,其中使用了某種方法對相關的引數進行優化。我還介紹了一些需要注意的關鍵引數。 在 AIX 5L™ 之前,您可能曾經使用過 vmtune 命令對您的 VMM 系統進行優化。儘管在 AIX Version 5.2 中提供了 vmo 命令,但 vmtune 命令也可以使用,直到 AIX Version 5.3。在 AIX Version 5.3 中,您不能夠再使用 vmtune 這一命令了。儘管有一些根本的變化您需要了解,但是大多數實際引數都是相同的。 讓我們來介紹一下 AIX 5L 中頁幀方面一項重要的變化。從 POWER4 處理器開始,AIX 可以支援最大 16MB 的頁面大小。實際上,POWER5 晶片支援四種虛擬記憶體頁面的大小:4KB、64KB、16MB 和 16GB。通過下面一項簡單的 vmo 更改,您就可以對系統進行優化以提供大型的頁面,從而對於消耗大量記憶體的應用程式極大地提高系統效能。效能之所以得到了改進,是因為提高了 Translation Lookaside Buffer (TLB) 的命中率,這是因為 TLB 可以對映到更大的虛擬記憶體範圍。例如 Oracle 資料庫,無論是聯機事務處理 (OLTP) 或者資料倉儲應用程式,都可以從大型頁面的使用中獲益。這是因為 Oracle 使用了大量的虛擬記憶體,特別是對於其系統全域性區 (SGA)。這裡使用的示例是一個執行 AIX Version 5.3 的 p550 LPAR 上的 Oracle 資料庫伺服器。該系統可用於 OLTP 和資料倉儲。 清單 1 中的命令分配了 16777216 位元組以提供 128 個大型頁面。 清單 1. 分配位元組
最重要的 vmo 設定是 minperm 和 maxperm。將這些引數設定為適合您的系統的值,以確保對計算記憶體或者檔案記憶體進行優化。在大多數情況下,您並不希望調出工作段,因為這樣做會導致系統進行沒有必要的頁面調出,並且會降低效能。以前,它的工作方式非常簡單:如果您的檔案頁面 (numperm%) 大於 maxperm%,那麼頁面置換演算法將僅替換檔案頁面。當它小於 minperm 時,可以替換檔案頁面和計算頁面。如果它的值位於兩者之間,那麼將僅替換檔案頁面,除非重分頁的檔案頁面的數目大於計算頁面。還有另一種方法,如果您的 numperm 大於 maxperm,您可以開始替換持久的儲存。基於這種方法學,早期的方法是調整您的 minperm 和 maxperm 引數,將 maxperm 設定得比較低(例如,<20),而將 minperm 設定為 <=10。您可以使用這種方法來優化您的資料庫伺服器。 所有的這些方法都發生了變化。新的方法將 maxperm 設定為一個比較高的值(例如,>80),並且確保將 lru_file_repage 引數設定為 0。lru_file_repage 是在帶 ML4 的 AIX Version 5.2 和 AIX Version 5.3 的 ML1 中首次引入的。這個引數說明了是否應該考慮 VMM 重分頁計數,以及它應該替換何種型別的記憶體。其預設設定為 1,所以您需要對它進行更改。當您將這個引數設定為 0 時,它將告訴 VMM,您希望它僅替換檔案頁面,而不是計算頁面。如果您的 numperm 小於 minperm 或者大於 maxperm,這種情況會發生變化,這正是您希望將 maxperm 設定得較高而將 minperm 設定得較低的原因。我們不應該忘記一個事實,對這個值進行優化的主要原因是因為您希望保護計算記憶體。回到前面的示例,Oracle 使用它自己的快取,同時使用 AIX 檔案快取,但是卻產生了混淆,所以您希望停止它。在這個場景中,如果您打算降低 maxperm,那麼您將會停止正在執行的應用程式快取程式。 清單 2 設定了這些關鍵的優化引數。 清單 2. 設定優化引數
儘管您已經習慣於對這些引數進行更改,但是現在,您只需保持 strict_maxperm 和 strict_maxclient 的預設數值即可。如果將 strict_maxperm 更改為 1,那麼它將會對可用於持久檔案快取的記憶體量設定一個硬限制。通過將 maxperm 值作為快取的上限,可以實現這一點。現在,沒有必要這樣做,因為更改 lru_file_repage 引數是一種更加有效的優化方法,而您並不希望使用 AIX 檔案快取。 還有兩個其他的重要引數需要說明,它們是 minfree 和 maxfree。如果空閒列表中的頁面數降低到低於 minfree 引數,那麼 VMM 開始替換頁面(只需新增到空閒列表),這樣做並不是很合適。它將繼續進行這項操作,直到空閒列表至少包含 maxfree 引數中指定的頁面數。 在較早版本的 AIX 中,當預設 minfree 設定為 120 時,通常您將會看到空閒列表為 120 或者更低,而這將導致進行沒有必要的分頁,更糟糕的是,會阻塞那些需要空閒幀的執行緒,因為這個值設定得過低。要解決這個問題,在 AIX Version 5.3 中,將 minfree 和 maxfree 的預設值分別提高到 960 和 1088。如果您正在執行 AIX Version 5.2 或者更早的版本,我建議進行下面的設定,您可以使用清單 3 中的命令,手動地進行更改。 清單 3. 手動地設定 minfree 和 maxfree 引數
讓我們先研究一下 AIX Version 5.3 中與記憶體有關的一些最新的變化。適當地使用 AIX Version 5.3 中的記憶體管理增強功能,可以幫助您高效地對系統進行優化。有關其他的方面,讓我們介紹一下頁面空間清理、動態的 xmalloc、記憶體關聯和 Watson malloc。
您還應該注意,不再需要在 rc.tune 中儲存任何可調整的設定。現在,新的方法使用 /etc/tunables,這無疑是一項改進。儘管這個特性是在 AIX Version 5.2 而不是 Version 5.3 中引入的,但是仍然值得在這裡進行說明。 如前所述,在您對 AIX 進行優化或監視之前,您必須設定一個基準。在進行優化之後,您必須捕獲資料並分析更改所帶來的結果。如果沒有這類資訊,您將無法瞭解優化工作的實際效果。在本系列文章的第 1 部分中,您瞭解了所有關於 AIX 的 VMM 的內容及其工作方式。您還對一個 Oracle 系統進行了調整,以優化記憶體子系統的使用。您研究了一些重要的核心引數、它們的用途以及如何對它們進行優化。在學習的過程中,您研究了近年來 AIX Version 5.3 中與記憶體有關的一些根本變化,包括某些引數和改進。 第 2 部分重點關注於系統監視的細節,以確定記憶體瓶頸,分析趨勢和結果。第 3 部分重點關注於交換空間和對 VMM 進行優化以實現效能最大化的其他方法。 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9390331/viewspace-703193/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- AIX 5L 記憶體效能優化,第 3 部分AI記憶體優化
- AIX 5L 記憶體效能優化,第 2 部分:AI記憶體優化
- Android 效能優化之記憶體洩漏檢測以及記憶體優化(中)Android優化記憶體
- Android 效能優化之記憶體洩漏檢測以及記憶體優化(上)Android優化記憶體
- Android 效能優化之記憶體洩漏檢測以及記憶體優化(下)Android優化記憶體
- AIX 下oracle 資料庫記憶體優化AIOracle資料庫記憶體優化
- AIX記憶體效能調優(svmon sar vmo)AI記憶體
- Android效能優化篇之記憶體優化--記憶體洩漏Android優化記憶體
- 【AIX】記憶體AI記憶體
- 1.記憶體優化(一)記憶體洩漏記憶體優化
- 從記憶體洩露、記憶體溢位和堆外記憶體,JVM優化引數配置引數記憶體洩露記憶體溢位JVM優化
- Android效能優化 - 記憶體優化Android優化記憶體
- aix記憶體最佳化(轉)AI記憶體
- aix的記憶體使用AI記憶體
- app 的記憶體優化APP記憶體優化
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- 記憶體優化策略記憶體優化
- UIImage 記憶體優化UI記憶體優化
- PHP記憶體優化PHP記憶體優化
- 記憶體優化技巧記憶體優化
- Android 效能優化之記憶體優化Android優化記憶體
- 【AIX】AIX記憶體機制AI記憶體
- Android記憶體優化之記憶體快取Android記憶體優化快取
- AIX 記憶體監控AI記憶體
- Android記憶體優化(一):Java記憶體區域Android記憶體優化Java
- 記憶體優化相關記憶體優化
- Android記憶體優化Android記憶體優化
- Python 記憶體優化Python記憶體優化
- Android 記憶體優化Android記憶體優化
- Oracle記憶體引數調優Oracle記憶體
- Android記憶體優化(三)避免可控的記憶體洩漏Android記憶體優化
- Spark效能優化:診斷記憶體的消耗Spark優化記憶體
- 實踐App記憶體優化:如何有序地做記憶體分析與優化APP記憶體優化
- 效能優化——記憶體洩漏(1)入門篇優化記憶體
- 效能優化技巧知識梳理(2) 記憶體優化優化記憶體
- Linux 效能優化之 記憶體 篇Linux優化記憶體
- iOS 使用Instruments優化記憶體效能iOS優化記憶體
- Android效能優化之記憶體篇Android優化記憶體