內存泄漏是指程序中已動態分配的堆內存因爲某種緣由程序未釋放或沒法釋放,形成系統內存的浪費,致使程序運行速度減慢甚至系統崩潰。node
SylixOS提供了內存檢測方法,能夠檢測和跟蹤內存泄漏,其原理以下:shell
l 當開啓內存泄漏檢測功能時,建立一個鏈表;app
l 當執行申請內存操做時,將信息記錄至鏈表中的一個節點;spa
l 當執行釋放內存操做時,將對應的鏈表節點信息刪除;調試
l 當執行打印內存泄漏跟蹤消息時,打印鏈表中全部的節點數據。進程
SylixOS經過在系統中輸入shell命令進行內存泄漏檢測,其命令以下:內存
l leakchkstart [max save node number] [pid](啓動堆泄漏檢查)io
leakchkstart命令須要提供兩個參數:原理
最大跟蹤節點數(若是泄漏超過這個數就不記錄)內存泄漏
PID信息(當PID大於0時,檢測指定進程PID;PID等於0時,檢測內核進程;當PID小於0時,檢測全部進程)
l leakchkstop(中止堆泄漏檢查並打印泄漏消息)
l leakchk(打印內存泄漏跟蹤消息)
啓動內存泄漏檢查,如程序清單3.1所示。
程序清單3.1 啓動內存泄漏檢測
[root@sylixos:/apps/app_demo]# leakchkstart 1024 -1 leakcheck start checking...
打印當前內存泄漏信息,如程序清單3.2所示。
程序清單3.2 打印內存泄漏信息
[root@sylixos:/apps/app_demo] leakchk HEAP THREAD TIME ADDR SIZE PURPOSE ------- --------- -------- -------- ------- ----------------------
模擬內存泄漏,如程序清單3.3所示。
程序清單3.3 模擬內存泄漏
#include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { int *p; p = (int*)malloc(sizeof(int) * 128); return (0); }
再次打印當前內存泄漏信息,如程序清單3.4所示。
程序清單3.4 再次打印泄漏信息
[root@sylixos:/apps/app_demo]# leakchk HEAP THREAD TIME ADDR SIZE PURPOSE ------- --------- -------- -------- ------- ---------------------- 1 app_demo Sat Jan 01 09:47:56 2017 c2055008 116 mem alloc
中止內存泄漏檢查並打印泄漏信息,如程序清單3.5所示。
程序清單3.5 中止內存泄漏檢測
[root@sylixos:/apps/app_demo]# leakchkstop HEAP THREAD TIME ADDR SIZE PURPOSE ------- --------- -------- -------- ------- ---------------------- 1 app_demo Sat Jan 01 09:47:56 2017 c2055008 116 mem alloc total unfree segment: 1 size: 116