Posted on 2012-03-02 15:26
Prayer 閱讀(982)
評論(0) 編輯 收藏 引用 所屬分類:
LINUX/UNIX/AIX
----越來越多的用戶選擇了IBM的RS/6000服務器作為應用程序的運行平臺,并且伴隨應用程序復雜度的增加,給系統以及應用程序的性能提出了進一步的要求。在這里講解是如何在AIX環境中調試系統性能,找出具體的問題和產生的原因,找到解決的辦法,使得應用程序的反應速度加快,以滿足用戶的需求。
----從性能角度來看,總體上分為:系統整體性能和應用程序個體的性能。從性能調試的方法來講大體上是一致的,只是著重點和調試目標的不同。在系統性能方面,是為了達到最大的系統吞吐量并減小反應時間;在應用程序方面,是為了減小反應時間。
----性能調試就是使得應用程序和系統的資源分配能夠最佳地符合當前特定環境。
----性能調試的流程如下:
首先判斷CPU是否是瓶頸,如果CPU是瓶頸則調試系統或應用程序的參數,增強CPU;
第二判斷內存是否是瓶頸,調節系統和應用程序關于內存的參數,使內存的使用達到最佳;
第三判斷磁盤的輸入/輸出是否是瓶頸,調節磁盤的使用狀態及參數,減少輸入/輸出時間;
第四判斷網絡是否是瓶頸,調節網絡環境或應用程序訪問方式,增加網絡吞吐量或減小網絡壓力;
第五附加的測試跟蹤,使用附加工具生成分析報表。
----這里開始對每一個步驟進一步的闡述。
----對于每一個進程來講,它們都有進程優先級,計算公式為:PRI=NICE+40+CPU_ PENALTY,從公式中可以看到基本上用戶進程的優先級是大于40的。可以使用“ps -l”和“ps -emo THREAD”命令分別查尋進程和線程的CPU使用狀態。使用“nice -n proname”和“renice +n proid”來修改進程的優先級。
----對CPU的整體調試過程可以總結如下:
首先使用“iostat”、“vmstat”和“sar”命令查看是否CPU有瓶頸,以及使用狀態;
使用“ps”命令查看哪條進程占用大量CPU時間;
使用“prof”、“gprof”和“tprof”命令查看特定的應用程序中哪些或哪一條語句占用CPU過長;
----改應用程序代碼,優化程序,對于十分消耗CPU資源的數學算法調用要使用AIX系統提供的函數庫BLAS/ESSL中的數學算法,這些算法函數要比程序員自己開發的函數節省系統資源。
----此外,在編譯可執行文件時,使用優化參數對程序進行進一步優化。
----對于CPU的消耗在很多情況下是由應用程序引起的,在應用程序優化完成以后,如果CPU依然沒有很大的改善,這就需要對CPU直接進行升級了,要么就增加CPU的個數。這里還有兩個命令在應用程序調試時十分有用:“time”和“timex”。這兩個命令可以檢測出某個應用程序從開始到結束總共花費的時間,“time”返回分鐘數和秒數,“timex”返回總共的秒數。
----在判斷和調試系統內存之前,首先要了解內存訪問的概念。內存在大多數情況下指虛擬內存,其中包括實內存(Real Memory)和磁盤上的虛擬空間(Paging Space)。值得注意的是在AIX系統中,實內存的輸入/輸出不僅在磁盤虛擬空間之間產生,而且包括另外兩種形式:固定數據文件(Persistent Segment)和遠程數據文件(Client Segment)。為了減少磁盤的尋址時間,磁盤虛擬空間往往采用連續的存儲空間。
----檢測系統內存的使用情況主要使用命令“vmstat”,此命令可以查看到活動的虛擬空間和剩余的實內存、內存頁的輸入/輸出狀態和CPU是否有輸入/輸出空閑。在分析統計調試結果時,一定要注意上面提到的實內存輸入/輸出的三種途徑。
----使用“ps au”命令可以查看每條進程的內存占有情況,數據是以百分比的方式顯示。
----還有一個命令十分有用,“svmon”,這個命令幫助調試者進一步取得有關進程使用內存的信息,它可以生成當前使用內存最多的進程狀態報表。SVMON命令和VMSTAT命令可以配合使用,它們的返回結果有一部分是相互重疊的,由此也可以驗證進程使用內存狀態的真實性。另外,SVMON命令還可以分析出來指定進程在使用內存方面的細節,究竟是哪些程序片占用了哪些內存,參數是“-P”。
----命令“vmtune”用來修改操作系統與內存使用相關的系統參數。通過修改內存系統參數可以改變系統對內存使用的方式以及分配原則,從而調節內存的輸入/輸出。
----在內存的使用中有一個現象稱為“Thrashing”,即內存使用產生抖動現象,為了滿足某些進程的執行,不斷地對內存進行輸入/輸出,當系統發現將要產生這種現象時,就會暫停某些進程使內存抖動現象不再發生。抖動現象會影響某些進程的反應速度,要盡量避免內存抖動的產生。內存抖動是由磁盤虛擬空間分配沖突造成的,磁盤虛擬空間對應用程序進程來講不夠大。
----在磁盤的讀寫方面是與AIX操作系統的磁盤管理相關的。AIX操作系統的磁盤管理分為四個層次:
----文件/目錄、文件系統、邏輯卷和物理卷。訪問磁盤的適配器目前基本上有四類:SCSI-1、SCSI-2、SSA和HIPPI。它們的訪問吞吐量是從低到高。數據存放在磁盤分區的不同也會影響訪問速度,總的來說,存放在磁盤中心最快,從中心向兩側訪問速度逐漸降低(尋址時間會加長)。這里有五個系統參數在定義邏輯卷的時候可供選擇:“Inner Edge”、“Inner Middle”、“Center”、“Outer Middle”和“Outer Edge”。使用“iostat”命令可以查看每一塊磁盤使用情況,如果是多塊磁盤,可以檢測到磁盤資源是否平均利用,磁盤輸入/輸出等待的百分比和整個磁盤的吞吐量等。還有一條命令“filemon”,這條命令可以收集到各個層面的訪問信息,包括文件系統、虛擬內存和物理磁盤。
----此命令將收集到的信息輸出到一個文件中,在信息文件中可以查詢到邏輯卷的輸入/輸出量,訪問的文件名,讀/寫的塊數、其中順序讀/寫的塊數分別是多少,磁盤尋址所占整個時間的百分比。使用命令“lslv ”和“lslv -l ”可以查到指定的邏輯卷所存放的物理磁盤位置,以及實際的命中率。當發現磁盤讀寫量較大,CPU的輸入/輸出等待較多,但磁盤的使用比較均衡,這時就需要提高適配器的性能,增加適配器的吞吐量,可以增加磁盤適配器個數或者高一級的適配器。
----可以使用“vmtune”命令調高與邏輯卷相關的參數“hd_pbuf_cnt”,當使用命令“filemon”命令發現磁盤輸入/輸出大部分是順序讀寫的時候,調高參數“hd_pbuf_cnt”值會改善系統性能。
----上面講到的調試方法大都直接與物理設備有關,下面來介紹以下如何調節文件系統的性能。文件系統的訪問包括邏輯文件系統、虛擬磁盤空間管理、裸設備讀寫和邏輯卷管理,并且系統對于單個文件的訪問也根據文件的大小分為三種訪問機制:小于32K的文件直接訪問、大于32K且小于4M的文件通過一層索引塊尋址、大于4M的文件通過兩層索引塊尋址。另外,在性能調試時應該考慮文件存放的物理位置是否是連續的(有幾個斷點)和該文件空間與文件存放所占用的連續物理空間的比例,這兩個因素都會影響文件訪問時的尋址時間。可以使用“fileplace”命令統計出指定文件的這兩個數值。第一個參考值為“seqentiality”,其計算方式為(文件總的塊數-中斷次數)/文件總的塊數;第二個參考值為“space efficiency”,其計算方式為(文件總的塊數/文件存放占用區域的連續塊數)。兩個值都是越大越好。在AIX系統中存在一個文件系統日志,名為“JFS Log”;這個文件日志同樣會搶占磁盤的輸入/輸出,這個文件日志應該與使用的文件系統處于不同的物理磁盤上。
----對于有的應用程序可以利用AIX操作系統提供的裸設備(Row Device)存儲方式,例如UDB關系型數據庫系統可以將自身的表空間(Tablespace)和數據庫日志存放在裸設備上,這樣就提高了數據存取的速度。
----當發現文件系統中文件出現過多的斷點時,可以對文件系統進行重整。此項工作可以通過系統提供的“smit”工具完成,也可以調用命令“defragfs”。但為了安全起見,在進行這項工作之前要確保已經對當前的文件系統做了備份,最好有兩份。這里還要提到兩個參數:“numfsbufs”和“lvm_bufcnt”,如果應用程序有大量向高速輸入/輸出端口的寫操作,調高這兩個參數會提高應用程序的訪問速度。參數“lvm_bufcnt”只對向裸設備的輸入/輸出操作起作用。
----網絡性能和網絡構架有直接關系,主要取決與網絡每秒的傳輸速率。有兩個命令可以查看網絡當前使用的狀態,它們是:“netstat”和“netpmon”。這兩個命令分別可以看到不同的網絡使用信息,其中“netpmon”可以查看到非常細致的網絡上的傳輸使用狀態。對網絡的調試命令有下列三種:“no”、“chdev”和“ifconfig”,通過這三個調試命令調試網絡相關參數,提高網絡傳輸性能。
----在某些應用程序中會對遠程數據文件直接訪問,這就用到了NFS服務。查看NFS的使用狀態可以使用命令:“nfsstat”。有幾個參數會直接影響NFS的訪問速度,“nfsd daemons”的個數、虛擬磁盤空間為文件分派的大小、傳輸和接受隊列的大小、參數“nfs_socketsize”和“sb_max”以及是否使用“Access Control Lists”。雖然網絡在特定的環境下,同樣是可以將性能調高的,但這里還是建議使用者將經常訪問的數據文件從遠程復制到本地進行讀寫。
----在AIX操作系統中,系統提供了幾個性能跟蹤的程序:“trace”、“trcrpt”和一系列圖形工具。圖形工具包括:“PDT”、“perfpmr”、“PTX/6000”和“BEST/1”。通過使用這些附加的工具,可以進一步對系統和應用程序的使用狀態跟蹤調試。
----最后,讀者也許還記得在文章的開始,提到對應用程序的調試,這里強調的是,調試應用程序是提高性能的最佳手段,對應用程序的改善在某些情況下,會給性能帶來成倍的提高。而對系統參數的調節不會達到這種地步。系統性能的不足最終是通過增加系統硬件設備來解決的。此文只是提供讀者一個調試性能的清晰條理,真正的性能調試還要在具體項目中得以驗證。讀者要記住何謂“性能調試”:在性能調試的過程中沒有一定之規,就象做菜沒有菜譜一樣,這是一個仁者見仁、智者見智的事情。