简单的 threadtest 就会引起严重的内存泄漏问题
maokelong opened this issue · comments
猫科龙 commented
问题在执行 cpptest1 测试用例时出现。
该测试用例申请 4(nthreads)个线程,每个线程迭代申请大小为 8B(size)的小块内存,返回地址记录在本地内存池中,迭代100000(nobjects)/ 4 次后一次性释放所有内存。申请 / 释放过程也会迭代 10000 (niterations)次。
运行后 RSS 快速增加,很快就增长到 1GB 以上。
经测试,发现引导程序(main前)会申请部分内存,线程创建程序也会申请部分内存,但二者所申请的内存很少,总量低于 1MB。
现初步怀疑是内存释放的问题 ,具体原因有待进一步分析。
猫科龙 commented
系历史遗留问题所致。
在最初编码的时候,由于我对二维动态数组的理解不够到位,导致「reusable_sbs」的初始化及使用其实都是错误的,但不知为何这份代码能够在ubuntu下顺利运行,而在centos下会崩溃。在进行修正的时候曾经调换过二维数组各维的含义,即从[core id][size class]切换到[size class][core id],但是在调整的时候遗漏了一处。
在testcase3的帮助下我定位到了这个问题,并将
reusable_list = &GLOBAL_POOL.meta_pool.reusable_sbs[get_core_id()][sc];
修正为
reusable_list = &GLOBAL_POOL.meta_pool.reusable_sbs[sc][get_core_id()];