1. 程式人生 > >Linux性能優化 第五章 性能工具:特定進程內存

Linux性能優化 第五章 性能工具:特定進程內存

alt 命中 image 技術分享 顯示 ado padding 利用 val

5.1 Linux內存子系統

在診斷內存性能問題的時候,也許有必要觀察應用程序在內存子系統的不同層次上是怎樣執行的。在頂層,操作系統決定如何利用交換內存和物理內存。它決定應用程序的哪一塊地址空間將被放到物理內存中,即所謂的駐留集。不屬於駐留集卻又被應用程序使用的其他內存將被交換到磁盤。由應用程序決定向操作系統請求多少內存,即所謂的虛擬集。

當應用程序使用物理內存時,它首先與CPU的高速緩存子系統交換。現代CPU有多級高速緩存。最快的高速緩存離CPU最近(L1),其容量也是最小的。舉個例子,假設CPU只有兩級高速緩存:L1L2.CPU請求一塊內存時,處理器會檢查看該內存是否已經存在於

L1高速緩存中。如果處於,CPU就可以直接使用。如果不在L1高速緩存中,處理器產生一個L1高速緩存不命中。然後它會檢查L2高級緩存,如果數據在L2緩存中,那麽它可以直接使用;否則處理同上,然後去物理內存中取回信息。明智使用高速緩存,減少高速緩存不命中的次數,可以提高性能。

5.2 內存性能工具

5.2.1 ps

ps內存參數說明

vsz

虛擬集大小是指應用程序使用的虛擬內存的容量。由於Linux只在應用程序試圖使用物理內存時才分配它,因此,該項數值可能會比應用程序使用的物理內存量大很多。

rss

駐留集大小是指應用程序當前使用的物理內存量

tsiz

文本大小是指程序代碼的虛擬大小

dsiz

數據大小是指程序使用率的虛擬大小

majflt

主故障是指使得Linux代表進程從磁盤讀取頁面的缺頁故障的數量。

技術分享圖片

5.2.2 /proc/<PID>

Linux內核提供一個虛擬文件系統,使你能提取在系統上運行的進程信息。/proc的接口非常簡單,裏面的虛擬文件可以用cat來讀取。系統上的每個PID/proc目錄下都有一個文件夾,包含一系列的文件。其中status是進程的PID的進程信息,其檢索命令為:cat /proc/<PID> status

status文件顯示的內存統計信息部分解析如下

VmSize

僅存的虛擬集大小,是應用程序使用的虛擬內存量,同psvsz

VmLck

被進程鎖定的內存量,被鎖定的內存不能交換到磁盤

VmRSS

駐留集大小或者應用程序當前使用的物理內存量。

VmData

數據大小或程序使用數據量的虛擬大小,不包含堆棧信息

VmStk

進程的堆棧大小

VmExe

程序的可執行內存的虛擬大小。它不包含進程使用的庫

VmLib

進程使用的庫的大小

例子:查看weblogic進程的情況

技術分享圖片

可以看出這個java進程的程序代碼只有36K,堆棧96K,數據很大(2712776K),庫不大不小(92608)。說明進程沒有多少的可執行代碼,使用了90M的庫來支持其執行,小的堆棧意味著該進程沒有調用深度嵌套的函數,或者沒有調用使用了大型或多個臨時變量的函數。VmLck說明沒有內存被鎖定,使得沒法交換內存。VmRSS大小為1.1G意味著當前進程使用了1.1G的物理內存,不過它分配或映射的大小為2.8G。如果應用程序開始使用之前已分配但並非正在使用的內存,那麽VmRSS會增加,而VmSize會保持不變。

如上所述,應用程序的Vmlib的大小不為零,因此使用了庫,可以查看maps文件來了解它使用了哪些庫。

技術分享圖片

Linux性能優化 第五章 性能工具:特定進程內存