这几天测试io调度器,脚本内容大概是:创建很多cgroup组,再启动一堆fio进程分别在这些cgroup之间反复随机的挪动,然后pkill -9 fio杀死所有fio进程,再重头来一遍,看是否会panic或者内存泄漏。结果发现,运行一个多小时后就会发生oom,用free命令看内存有大量的cache无法释放。

诡异,难道是我的代码有内存泄漏,退掉我的patch后再测试,还是发生oom;从2.6.32-279变成2.6.32-220,还有oom;变成2.6.32-358,还有oom。怪了,这要是这么容易内存泄漏,早就应该发现了,何至于这么简单的用例也会出错。

在我打算试试upstream的内核之前,ipcs看了一眼,看见一堆共享内存没有释放,顿时捶胸顿足——这个问题以前遇到过的呀!是fio工具本身会创建shm区域,正常退出它会去释放,一旦被kill,这个shm区域就白占内存了。以前都遇到过了,这次居然还花两天犯同样的错误,真该反省啊。