當前位置:首頁 » 操作系統 » linux內存測試

linux內存測試

發布時間: 2022-11-17 03:03:44

1. linux命令行查看內存

用 'top -i' 看看有多少進程處於 Running 狀態,可能系統存在內存或 I/O 瓶頸,用 free 看看系統內存使用情況,swap 是否被佔用很多,用 iostat 看看 I/O 負載情況...

還有一種辦法是 ps -ef | sort -k7 ,將進程按運行時間排序,看哪個進程消耗的cpu時間最多。

top:
主要參數 :

free
1.作用
free命令用來顯示內存的使用情況,使用許可權是所有用戶。
**2.格式 **

**3.主要參數 **

uptime

vmstat

**1 觀察磁碟活動情況 **
磁碟活動情況主要從以下幾個指標了解:

**2 觀察cpu活動情況 **
vmstat比top更能反映出cpu的使用情況:

iostat
用於統計CPU的使用情況及tty設備、硬碟和CD-ROM的I/0量

即使爬到最高的山上,一次也只能腳踏實地地邁一步。

Linux查看CPU和內存使用情況:

在做Linux系統優化的時候,物理內存是其中最重要的一方面。自然的,Linux也提供了非常多的方法來監控寶貴的內存資源的使用情況。下面的清單詳細的列出了Linux系統下通過視圖工具或命令行來查看內存使用情況的各種方法。

1. /proc/meminfo

查看RAM使用情況最簡單的方法是通過 /proc/meminfo 。這個動態更新的虛擬文件實際上是許多其他內存相關工具(如:free / ps / top)等的組合顯示。 /proc/meminfo 列出了所有你想了解的內存的使用情況。進程的內存使用信息也可以通過/proc/<pid>/statm 和 /proc/<pid>/status 來查看。

atop命令是一個終端環境的監控命令。它顯示的是各種系統資源(CPU, memory, network, I/O, kernel)的綜合,並且在高負載的情況下進行了彩色標注。

free命令是一個快速查看內存使用情況的方法,它是對 /proc/meminfo 收集到的信息的一個概述。

GNOME System Monitor 是一個顯示最近一段時間內的CPU、內存、交換區及網路的使用情況的視圖工具。它還提供了一種查看CPU及內存使用情況的方法。

htop命令顯示了每個進程的內存實時使用率。它提供了所有進程的常駐內存大小、程序總內存大小、共享庫大小等的報告。列表可以水平及垂直滾動。

功能同 4 中介紹的GENOME版本。

memstat是一個有效識別executable(s), process(es) and shared libraries使用虛擬內存情況的命令。給定一個進程ID,memstat可以列出這個進程相關的可執行文件、數據和共享庫。

nmon是一個基於ncurses的系統基準測試工具,它可以監控CPU、內存、I/O、文件系統及網路資源等的互動模式。對於內存的使用,它可以實時的顯示 總/剩餘內存、交換空間等信息。

ps命令可以實時的顯示各個進程的內存使用情況。Reported memory usage information includes %MEM (percent of physical memory used), VSZ (total amount of virtual memory used), and RSS (total amount of physical memory used)。你可以使用 「–sort」選項對進程進行排序,例如按RSS進行排序:

smem命令允許你統計基於/proc信息的不同進程和用戶的內存使用情況。內存使用情況的分析可以導出圖表(如條形圖和餅圖)。

top命令提供了實時的運行中的程序的資源使用統計。你可以根據內存的使用和大小來進行排序。

vmstat命令顯示實時的和平均的統計,覆蓋CPU、內存、I/O等內容。例如內存情況,不僅顯示物理內存,也統計虛擬內存。

2. 在linux系統下使用內存技術,檢測堆越界錯誤

一般使用c或cpp編程時,堆棧越界訪問(read/write)往往會引起很多意想不到的錯誤,比如延後的進程崩潰等。因此,如果有一種方法,可以讓越界訪問立即觸發系統錯誤(讓進程拋出異常而終止,再生成coremp文件),就可以立即檢測出內存越界行為,並將對這種隱藏的錯誤,及時作出反應,以免在生產環境下造成更大的損失。

我們知道,在windows系統下面,我們可以使用VirtualAlloc系列函數,通過申請2頁內存,並設置某頁的保護參數(比如,可讀,可寫等),就可以實現類似的保護機制。這樣,當我們對新增加的類(數據結構),就可以重載operator new/delete,將類的邊界設置到一頁的邊緣,再將相鄰頁設置為不可讀不可寫。這樣就能有效監測堆越界讀寫問題。而且可以,設置某個編譯宏,比如PROTECT_CLASSX。演示代碼如下:

在linux下,則需要藉助mmap和mprotect來實現這個機制。具體步驟如下,首先用mmap使用PROT_NONE映射一個特殊文件,比如/dev/zero(或者使用MAP_ANONYMOUS),然後再用mprotect提交內存。上面的例子,可以繼續使用,但是只列出來核心的代碼,什麼重載操作符就不寫了,另外,內存映射文件j句柄最好用內存池來hold,最後在close掉。演示代碼只說明大致用法,並不能直接拿來用。

下面補充mprotect的用法:

再把mmap函數的用法示例如下:

3. 如何在linux下檢測內存泄漏

要想檢測內存泄漏,就必須對程序中的內存分配和釋放情況進行記錄,所能夠採取的辦法就是重載所有形式的operator new 和 operator delete,截獲 new operator 和 delete operator 執行過程中的內存操作信息。下面列出的就是重載形式
void* operator new( size_t nSize, char* pszFileName, int nLineNum )
void* operator new[]( size_t nSize, char* pszFileName, int nLineNum )
void operator delete( void *ptr )
void operator delete[]( void *ptr )

我們為 operator new 定義了一個新的版本,除了必須的 size_t nSize 參數外,還增加了文件名和行號,這里的文件名和行號就是這次 new operator 操作符被調用時所在的文件名和行號,這個信息將在發現內存泄漏時輸出,以幫助用戶定位泄漏具體位置。對於 operator delete,因為無法為之定義新的版本,我們直接覆蓋了全局的 operator delete 的兩個版本。
在重載的 operator new 函數版本中,我們將調用全局的 operator new 的相應的版本並將相應的 size_t 參數傳入,而後,我們將全局 operator new 返回的指針值以及該次分配所在的文件名和行號信息記錄下來,這里所採用的數據結構是一個 STL 的 map,以指針值為 key 值。當 operator delete 被調用時,如果調用方式正確的話(調用方式不正確的情況將在後面詳細描述),我們就能以傳入的指針值在 map 中找到相應的數據項並將之刪除,而後調用 free 將指針所指向的內存塊釋放。當程序退出的時候,map 中的剩餘的數據項就是我們企圖檢測的內存泄漏信息--已經在堆上分配但是尚未釋放的分配信息。
以上就是內存檢測實現的基本原理,現在還有兩個基本問題沒有解決:
1) 如何取得內存分配代碼所在的文件名和行號,並讓 new operator 將之傳遞給我們重載的 operator new。
2) 我們何時創建用於存儲內存數據的 map 數據結構,如何管理,何時列印內存泄漏信息。
先解決問題1。首先我們可以利用 C 的預編譯宏 __FILE__ 和 __LINE__,這兩個宏將在編譯時在指定位置展開為該文件的文件名和該行的行號。而後我們需要將預設的全局 new operator 替換為我們自定義的能夠傳入文件名和行號的版本,我們在子系統頭文件 MemRecord.h 中定義:
#define DEBUG_NEW new(__FILE__, __LINE__ )

而後在所有需要使用內存檢測的客戶程序的所有的 cpp 文件的開頭加入
#include "MemRecord.h"
#define new DEBUG_NEW

就可以將客戶源文件中的對於全局預設的 new operator 的調用替換為 new (__FILE__,__LINE__) 調用,而該形式的new operator將調用我們的operator new (size_t nSize, char* pszFileName, int nLineNum),其中 nSize 是由 new operator 計算並傳入的,而 new 調用點的文件名和行號是由我們自定義版本的 new operator 傳入的。我們建議在所有用戶自己的源代碼文件中都加入上述宏,如果有的文件中使用內存檢測子系統而有的沒有,則子系統將可能因無法監控整個系統而輸出一些泄漏警告。
再說第二個問題。我們用於管理客戶信息的這個 map 必須在客戶程序第一次調用 new operator 或者 delete operator 之前被創建,而且在最後一個 new operator 和 delete operator 調用之後進行泄漏信息的列印,也就是說它需要先於客戶程序而出生,而在客戶程序退出之後進行分析。能夠包容客戶程序生命周期的確有一人--全局對象(appMemory)。我們可以設計一個類來封裝這個 map 以及這對它的插入刪除操作,然後構造這個類的一個全局對象(appMemory),在全局對象(appMemory)的構造函數中創建並初始化這個數據結構,而在其析構函數中對數據結構中剩餘數據進行分析和輸出。Operator new 中將調用這個全局對象(appMemory)的 insert 介面將指針、文件名、行號、內存塊大小等信息以指針值為 key 記錄到 map 中,在 operator delete 中調用 erase 介面將對應指針值的 map 中的數據項刪除,注意不要忘了對 map 的訪問需要進行互斥同步,因為同一時間可能會有多個線程進行堆上的內存操作。
好啦,內存檢測的基本功能已經具備了。但是不要忘了,我們為了檢測內存泄漏,在全局的 operator new 增加了一層間接性,同時為了保證對數據結構的安全訪問增加了互斥,這些都會降低程序運行的效率。因此我們需要讓用戶能夠方便的 enable 和 disable 這個內存檢測功能,畢竟內存泄漏的檢測應該在程序的調試和測試階段完成。我們可以使用條件編譯的特性,在用戶被檢測文件中使用如下宏定義:
#include "MemRecord.h"
#if defined( MEM_DEBUG )
#define new DEBUG_NEW
#endif

當用戶需要使用內存檢測時,可以使用如下命令對被檢測文件進行編譯
g++ -c -DMEM_DEBUG xxxxxx.cpp

就可以 enable 內存檢測功能,而用戶程序正式發布時,可以去掉 -DMEM_DEBUG 編譯開關來 disable 內存檢測功能,消除內存檢測帶來的效率影響。

4. 如何檢查linux伺服器cpu,內存性能

1.查看系統負載
(1)uptime
這個命令可以快速查看機器的負載情況。
在Linux系統中,這些數據表示等待CPU資源的進程和阻塞在不可中斷IO進程(進程狀態為D)的數量。
命令的輸出,load average表示1分鍾、5分鍾、15分鍾的平均負載情況。
通過這三個數據,可以了解伺服器負載是在趨於緊張還是趨於緩解。
如果1分鍾平均負載很高,而15分鍾平均負載很低,說明伺服器正在命令高負載情況,需要進一步排查CPU資源都消耗在了哪裡。
反之,如果15分鍾平均負載很高,1分鍾平均負載較低,則有可能是CPU資源緊張時刻已經過去。
(2)W
Show who is logged on and what they are doing.
可查詢登錄當前系統的用戶信息,以及這些用戶目前正在做什麼操作
其中的load average後面的三個數字則顯示了系統最近1分鍾、5分鍾、15分鍾的系統平均負載情況
注意:
load average這個輸出值,這三個值的大小一般不能大於系統邏輯CPU的個數。
如果輸出中系統有4個邏輯CPU,如果load average的三個值長期大於4時,說明CPU很繁忙,負載很高,可能會影響系統性能,
但是偶爾大於4時,倒不用擔心,一般不會影響系統性能。相反,如果load average的輸出值小於CPU的個數,則表示CPU還有空閑
2.dmesg | tail
該命令會輸出系統日誌的最後10行。
這些日誌可以幫助排查性能問題.
3.vmstat
vmstat Virtual Meomory Statistics(虛擬內存統計),用來獲得有關進程、虛存、頁面交換空間及 CPU活動的信息。這些信息反映了系統的負載情況。
後面跟的參數1,表示每秒輸出一次統計信息,表頭提示了每一列的含義
(1)監控進程procs:
r:等待在CPU資源的進程數。
這個數據比平均負載更加能夠體現CPU負載情況,數據中不包含等待IO的進程。如果這個數值大於機器CPU核數,那麼機器的CPU資源已經飽和(出現了CPU瓶頸)。
b:在等待io的進程數 。
(2)監控內存memoy:
swpd:現時可用的交換內存(單位KB)
free:系統可用內存數(以千位元組為單位)
buff: 緩沖去中的內存數(單位:KB)。
cache:被用來做為高速緩存的內存數(單位:KB)。
(3)監控swap交換頁面
si: 從磁碟交換到內存的交換頁數量,單位:KB/秒。
so: 從內存交換到磁碟的交換頁數量,單位:KB/秒。
如果這個數據不為0,說明系統已經在使用交換區(swap),機器物理內存已經不足。
(4)監控 io塊設備
bi: 發送到塊設備的塊數,單位:塊/秒。
bo: 從塊設備接收到的塊數,單位:塊/秒。
(5)監控system系統
in: 每秒的中斷數,包括時鍾中斷。
cs: 每秒的環境(上下文)轉換次數。
(6)監控cpu中央處理器:
us:用戶進程使用的時間 。以百分比表示。
sy:系統進程使用的時間。 以百分比表示。
id:中央處理器的空閑時間 。以百分比表示。
us, sy, id, wa, st:這些都代表了CPU時間的消耗,它們分別表示用戶時間(user)、系統(內核)時間(sys)、空閑時間(idle)、IO等待時間(wait)和被偷走的時間(stolen,一般被其他虛擬機消耗)。
這些CPU時間,可以讓我們很快了解CPU是否出於繁忙狀態。
註:
如果IO等待時間很長,那麼系統的瓶頸可能在磁碟IO。
如果用戶時間和系統時間相加非常大,CPU出於忙於執行指令。
如果有大量CPU時間消耗在用戶態,也就是用戶應用程序消耗了CPU時間。這不一定是性能問題,需要結合r隊列,一起分析。
4.mpstat -P ALL 1
該命令可以顯示每個CPU的佔用情況,如果有一個CPU佔用率特別高,那麼有可能是一個單線程應用程序引起的。
MultiProcessor Statistics的縮寫,是實時系統監控工具
其報告與CPU的一些統計信息,這些信息存放在/proc/stat文件中。在多CPUs系統里,其不但能查看所有CPU的平均狀況信息,而且能夠查看特定CPU的信息。
格式:mpstat [-P {|ALL}] [internal [count]]
-P {|ALL} 表示監控哪個CPU, cpu在[0,cpu個數-1]中取值
internal 相鄰的兩次采樣的間隔時間
count 采樣的次數,count只能和delay一起使用
all : 指所有CPU
%usr : 顯示在用戶級別(例如應用程序)執行時CPU利用率的百分比
%nice :顯示在擁有nice優先順序的用戶級別執行時CPU利用率的百分比
%sys : 現實在系統級別(例如內核)執行時CPU利用率的百分比
%iowait : 顯示在系統有未完成的磁碟I/O請求期間CPU空閑時間的百分比
%irq : 顯示CPU服務硬體中斷所花費時間的百分比
%soft : 顯示CPU服務軟體中斷所花費時間的百分比
%steal : 顯示虛擬機管理器在服務另一個虛擬處理器時虛擬CPU處在非自願等待下花費時間的百分比
%guest : 顯示運行虛擬處理器時CPU花費時間的百分比
%idle : 顯示CPU空閑和系統沒有未完成的磁碟I/O請求情況下的時間百分比
系統有兩個CPU。如果使用參數 -P 然後緊跟CPU編號得到指定CPU的利用率。
( Ubuntu安裝: apt-get install sysstat)
5.pidstat 1
pidstat命令輸出進程的CPU佔用率,該命令會持續輸出,並且不會覆蓋之前的數據,可以方便觀察系統動態
6.iostat -xz 1
iostat命令主要用於查看機器磁碟IO情況
r/s, w/s, rkB/s, wkB/s:分別表示每秒讀寫次數和每秒讀寫數據量(千位元組)。讀寫量過大,可能會引起性能問題。
await:IO操作的平均等待時間,單位是毫秒。這是應用程序在和磁碟交互時,需要消耗的時間,包括IO等待和實際操作的耗時。如果這個數值過大,可能是硬體設備遇到了瓶頸或者出現故障。
avgqu-sz:向設備發出的請求平均數量。如果這個數值大於1,可能是硬體設備已經飽和(部分前端硬體設備支持並行寫入)。
%util:設備利用率。這個數值表示設備的繁忙程度,經驗值是如果超過60,可能會影響IO性能(可以參照IO操作平均等待時間)。如果到達100%,說明硬體設備已經飽和。
註:如果顯示的是邏輯設備的數據,那麼設備利用率不代表後端實際的硬體設備已經飽和。值得注意的是,即使IO性能不理想,也不一定意味這應用程序性能會不好,可以利用諸如預讀取、寫緩存等策略提升應用性能
7.free -m
free命令可以查看系統內存的使用情況,-m參數表示按照兆位元組展示。
最後兩列分別表示用於IO緩存的內存數,和用於文件系統頁緩存的內存數。
註:
第二行-/+ buffers/cache,看上去緩存佔用了大量內存空間。這是Linux系統的內存使用策略,盡可能的利用內存,如果應用程序需要內存,這部分內存會立即被回收並分配給應用程序。
如果可用內存非常少,系統可能會動用交換區(如果配置了的話),這樣會增加IO開銷(可以在iostat命令中提現),降低系統性能。
8.sar -n DEV 1
sar命令在這里可以查看網路設備的吞吐率。
在排查性能問題時,可以通過網路設備的吞吐量,判斷網路設備是否已經飽和。
9.sar -n TCP,ETCP 1
sar命令在這里用於查看TCP連接狀態,其中包括:
active/s:每秒本地發起的TCP連接數,既通過connect調用創建的TCP連接;
passive/s:每秒遠程發起的TCP連接數,即通過accept調用創建的TCP連接;
retrans/s:每秒TCP重傳數量;
TCP連接數可以用來判斷性能問題是否由於建立了過多的連接,進一步可以判斷是主動發起的連接,還是被動接受的連接。TCP重傳可能是因為網路環境惡劣,或者伺服器壓力過大導致丟包。
10.top
top命令包含了前面好幾個命令的檢查的內容。比如系統負載情況(uptime)、系統內存使用情況(free)、系統CPU使用情況(vmstat)等。
因此通過這個命令,可以相對全面的查看系統負載的來源。同時,top命令支持排序,可以按照不同的列排序,方便查找出諸如內存佔用最多的進程、CPU佔用率最高的進程等。
但是,top命令相對於前面一些命令,輸出是一個瞬間值,如果不持續盯著,可能會錯過一些線索。這時可能需要暫停top命令刷新,來記錄和比對數據。

5. Linux系統中怎麼使用valgrind檢查內存

valgrind主要用於檢測程序內存使用異常,例如使用未初始化內存,重復釋放內存,堆棧非法訪問,申請空間未釋放等。
使用示例(檢測內存泄露): valgrind --leak-check=full --show-reachable=yes --show-leak-kinds=all 程序名
更多使用方法可以參見help信息

6. Linux內存管理內存檢測技術(slub_debug/kmemleak/kasan) [超詳細]

F:在free的時候會執行檢查。

Z:表示Red Zone的意思。

P:是Poison的意思。

U:會記錄slab的使用者信息,如果打開,會會顯示分配釋放對象的棧回溯。

Redzone overwritten

Object padding overwritten

Object already free

Poison overwritten

slab-out-of-bounds

user-after-free

測試結果如下:

stack-out-of-bounds


global-out-of-bounds

測試結果如下:

7. linux memtest86+怎麼用

接觸到memtest86+是因為Linux,但是這個內存測試工具並不是依附於Linux;

memtest86+ 是一款內存測試工具,但是這款軟體不能夠在windows或Linux開啟時運行,即在打開windows時,不能直接雙擊後運行測試,而一定要:

(1)ISO刻盤;

(2)安裝在U盤;


本文為了方便,選擇第二種方法;


這個軟體用於將memtest刻錄到U盤上,安裝時需要選擇U盤,如下圖所示:


其實這款內存測試工具在Linux中非常廣泛,比如Ubuntu的grub中就能夠利用memtest86+進行內存測試:

8. Linux系統基本的內存管理知識講解

Linux系統基本的內存管理知識講解

內存是Linux內核所管理的最重要的資源之一。內存管理系統是操作系統中最為重要的部分,因為系統的物理內存總是少於系統所需要的內存數量。虛擬內存就是為了克服這個矛盾而採用的策略。系統的虛擬內存通過在各個進程之間共享內存而使系統看起來有多於實際內存的內存容量。Linux支持虛擬內存, 就是使用磁碟作為RAM的擴展,使可用內存相應地有效擴大。核心把當前不用的內存塊存到硬碟,騰出內存給其他目的。當原來的內容又要使用時,再讀回內存。

一、內存使用情況監測

(1)實時監控內存使用情況

在命令行使用「Free」命令可以監控內存使用情況

代碼如下:

#free

total used free shared buffers cached

Mem: 256024 192284 63740 0 10676 101004

-/+ buffers/cache: 80604 175420

Swap: 522072 0 522072

上面給出了一個256兆的RAM和512兆交換空間的'系統情況。第三行輸出(Mem:)顯示物理內存。total列不顯示核心使用的物理內存(通常大約1MB)。used列顯示被使用的內存總額(第二行不計緩沖)。 free列顯示全部沒使用的內存。Shared列顯示多個進程共享的內存總額。Buffers列顯示磁碟緩存的當前大小。第五行(Swap:)對對換空間,顯示的信息類似上面。如果這行為全0,那麼沒使用對換空間。在預設的狀態下,free命令以千位元組(也就是1024位元組為單位)來顯示內存使用情況。可以使用—h參數以位元組為單位顯示內存使用情況,或者可以使用—m參數以兆位元組為單位顯示內存使用情況。還可以通過—s參數使用命令來不間斷地監視內存使用情況:

#free –b –s2

這個命令將會在終端窗口中連續不斷地報告內存的使用情況,每2秒鍾更新一次。

(2)組合watch與 free命令用來實時監控內存使用情況:

代碼如下:

#watch -n 2 -d free

Every 2.0s: free Fri Jul 6 06:06:12 2007

total used free shared buffers cached

Mem: 233356 218616 14740 0 5560 64784

-/+ buffers/cache: 148272 85084

Swap: 622584 6656 615928

watch命令會每兩秒執行 free一次,執行前會清除屏幕,在同樣位置顯示數據。因為 watch命令不會卷動屏幕,所以適合出長時間的監測內存使用率。可以使用 -n選項,控制執行的頻率;也可以利用 -d選項,讓命令將每次不同的地方顯示出來。Watch命令會一直執行,直到您按下 [Ctrl]-[C] 為止。

二、虛擬內存的概念

(1)Linux虛擬內存實現機制

Linux虛擬內存的實現需要六種機制的支持:地址映射機制、內存分配回收機制、緩存和刷新機制、請求頁機制、交換機制、內存共享機制。

首先內存管理程序通過映射機制把用戶程序的邏輯地址映射到物理地址,在用戶程序運行時如果發現程序中要用的虛地址沒有對應的物理內存時,就發出了請求頁要求;如果有空閑的內存可供分配,就請求分配內存(於是用到了內存的分配和回收),並把正在使用的物理頁記錄在緩存中(使用了緩存機制)。 如果沒有足夠的內存可供分配,那麼就調用交換機制,騰出一部分內存。另外在地址映射中要通過TLB(翻譯後援存儲器)來尋找物理頁;交換機制中也要用到交換緩存,並且把物理頁內容交換到交換文件中後也要修改頁表來映射文件地址。

(2)虛擬內存容量設定

也許有人告訴你,應該分配2倍於物理內存的虛擬內存,但這是個不固定的規律。如果你的物理保存比較小,可以這樣設定。如果你有1G物理內存或更多的話,可以縮小一下虛擬內存。Linux會把大量的內存用做Cache的,但在資源緊張時回收回.。你只要看到swap為0或者很小就可以放心了,因為內存放著不用才是最大的浪費。

三、使甩vmstat命令監視虛擬內存使用情況

vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。通常使用vmstat 5 5(表示在5秒時間內進行5次采樣)命令測試。將得到一個數據匯總它可以反映真正的系統情況。

代碼如下:

#vmstat 5 5

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----

r b swpd free buff cache si so bi bo in cs us sy id wa

1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2

0 0 62792 3400 9124 88092 0 0 0 14 884 434 4 14 81 0

0 0 62792 3400 9132 88092 0 0 0 14 877 424 4 15 81 0

1 0 62792 3400 9140 88092 0 0 0 14 868 418 6 20 74 0

1 0 62792 3400 9148 88092 0 0 0 15 847 400 9 25 67 0

vmstat命令輸出分成六個部分:

9. 如何在linux下檢測內存泄漏

內存泄漏指由於疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。內存泄漏並非指內存在物理上的消失,而是應用程序分配某段內存後,由於設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。
可以使用相應的軟體測試工具對軟體進行檢測。
1. ccmalloc-Linux和Solaris下對C和C++程序的簡單的使用內存泄漏和malloc調試庫。

2. Dmalloc-Debug Malloc Library.

3. Electric
Fence-Linux分發版中由Bruce Perens編寫的malloc()調試庫。

4. Leaky-Linux下檢測內存泄漏的程序。

5. LeakTracer-Linux、Solaris和HP-UX下跟蹤和分析C++程序中的內存泄漏。

6. MEMWATCH-由Johan
Lindh編寫,是一個開放源代碼C語言內存錯誤檢測工具,主要是通過gcc的precessor來進行。

7. Valgrind-Debugging and profiling Linux programs, aiming at
programs written in C and C++.

8. KCachegrind-A visualization tool for the profiling data
generated by Cachegrind and Calltree.

9. Leak
Monitor-一個Firefox擴展,能找出跟Firefox相關的泄漏類型。

10. IE Leak Detector
(Drip/IE Sieve)-Drip和IE Sieve leak
detectors幫助網頁開發員提升動態網頁性能通過報告可避免的因為IE局限的內存泄漏。

11. Windows Leaks
Detector-探測任何Win32應用程序中的任何資源泄漏(內存,句柄等),基於Win API調用鉤子。

12. SAP Memory
Analyzer-是一款開源的JAVA內存分析軟體,可用於輔助查找JAVA程序的內存泄漏,能容易找到大塊內存並驗證誰在一直佔用它,它是基於Eclipse
RCP(Rich Client Platform),可以下載RCP的獨立版本或者Eclipse的插件。

13. DTrace-即動態跟蹤Dynamic
Tracing,是一款開源軟體,能在Unix類似平台運行,用戶能夠動態檢測操作系統內核和用戶進程,以更精確地掌握系統的資源使用狀況,提高系統性能,減少支持成本,並進行有效的調節。

14. IBM Rational PurifyPlus-幫助開發人員查明C/C++、託管.NET、Java和VB6代碼中的性能和可靠性錯誤。PurifyPlus
將內存錯誤和泄漏檢測、應用程序性能描述、代碼覆蓋分析等功能組合在一個單一、完整的工具包中。

15. Parasoft Insure++-針對C/C++應用的運行時錯誤自動檢測工具,它能夠自動監測C/C++程序,發現其中存在著的內存破壞、內存泄漏、指針錯誤和I/O等錯誤。並通過使用一系列獨特的技術(SCI技術和變異測試等),徹底的檢查和測試我們的代碼,精確定位錯誤的准確位置並給出詳細的診斷信息。能作為Microsoft
Visual C++的一個插件運行。

16. Compuware DevPartner for Visual C++ BoundsChecker
Suite-為C++開發者設計的運行錯誤檢測和調試工具軟體。作為Microsoft Visual Studio和C++ 6.0的一個插件運行。

17. Electric Software GlowCode-包括內存泄漏檢查,code
profiler,函數調用跟蹤等功能。給C++和.Net開發者提供完整的錯誤診斷,和運行時性能分析工具包。

18. Compuware DevPartner Java
Edition-包含Java內存檢測,代碼覆蓋率測試,代碼性能測試,線程死鎖,分布式應用等幾大功能模塊。

19. Quest JProbe-分析Java的內存泄漏。

20. ej-technologies JProfiler-一個全功能的Java剖析工具,專用於分析J2SE和J2EE應用程序。它把CPU、執行緒和內存的剖析組合在一個強大的應用中。JProfiler可提供許多IDE整合和應用伺服器整合用途。JProfiler直覺式的GUI讓你可以找到效能瓶頸、抓出內存泄漏、並解決執行緒的問題。4.3.2注冊碼:A-G666#76114F-1olm9mv1i5uuly#0126

21. BEA JRockit-用來診斷Java內存泄漏並指出根本原因,專門針對Intel平台並得到優化,能在Intel硬體上獲得最高的性能。

22. SciTech Software AB .NET Memory
Profiler-找到內存泄漏並優化內存使用針對C#,VB.Net,或其它.Net程序。

23. YourKit .NET & Java Profiler-業界領先的Java和.NET程序性能分析工具。

24. AutomatedQA AQTime-AutomatedQA的獲獎產品performance profiling和memory
debugging工具集的下一代替換產品,支持Microsoft, Borland, Intel, Compaq 和
GNU編譯器。可以為.NET和Windows程序生成全面細致的報告,從而幫助您輕松隔離並排除代碼中含有的性能問題和內存/資源泄露問題。支持.Net
1.0,1.1,2.0,3.0和Windows 32/64位應用程序。

25. JavaScript Memory Leak Detector-微軟全球產品開發歐洲團隊(Global Proct
Development- Europe team, GPDE)
發布的一款調試工具,用來探測JavaScript代碼中的內存泄漏,運行為IE系列的一個插件。

10. 如何在linux下檢測內存泄漏

是不是說沒有一種內存檢查工具能夠在linux使用呢,也不是,像valgrind工具還是相當不錯的。他的下載地址是 下載一個valgrind 3.2.3 (tar.bz2) 工具,按照裡面的README提示,安裝後就可以使用這個工具來檢測內存泄露和內存越界等。這是一個沒有界面的內存檢測工具,安裝後,輸入valgrind ls -l 驗證一下該工具是否工作正常(這是README裡面的方法,實際上是驗證一下對ls -l命令的內存檢測),如果你看到一堆的信息說明你的工具可以使用了。 在編譯你的程序時,請設置-g參數,編譯出後使用如下的命令來判斷你的程序存在內存泄露: valgrind --tools=memcheck --leak-check=full yourProg在輸出信息中就會看到你的內存問題了。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:335
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:740
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:371