想请问各位前辈
我在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 会是造成这个问题的原因吗??