想請問各位前輩
我在Linux(2.6.36) 上寫了一個"收UART資料 存到SD"的程式
在測試的時候發現擺了約1天後 就發生out of memory 死機
(確認沒有我的程式 不會out of mmemory死機)
使用過 mtrace 來抓程式碼memory leak
但結果並無 memory leak
只有一個link list 沒有free 是我來存設定檔的
我在 開機後一分鐘 和 擺了半天後 各抓了一份 /proc/slabinfo
發現有兩個值相差過大 而且都持續增加不會減少
開機
inode_cache 552 658 272 14 1 : tunables 54 27 0 : slabdata 47 47 0
size-32 7200 7260 128 30 1 : tunables 120 60 0 : slabdata 242 242 0
半天
inode_cache 36246 36246 272 14 1 : tunables 54 27 0 : slabdata 2589 2589 0
size-32 41010 41010 128 30 1 : tunables 120 60 0 : slabdata 1367 1367 0
這兩個項目代表 inode_cache(filesystem) size-32(malloc 使用這個)
網路上查了一下 可下 sync;echo 3 > /proc/sys/vm/drop_caches
手動清除 pagecache、dentry、inode
但用過之後情況並沒有改善
我也有檢查過我的程式 所以malloc 都有 free
想請問
1.inode_cache 除了 用 /proc/sys/vm/drop_caches 手動清除
還有甚麼方法可以清除?
5B
2.size-32 我已確定我的程式有malloc 的地方都有做free
有fopen 的地方 都有fclose
為甚麼 size-32 的 使用數 還是一直往上加??
3.使用thread 會是造成這個問題的原因嗎??