我最近遇到了一个非常奇怪的问题,可能是由于内核内存分配器造成的。起初,我怀疑我的C++代码中存在某种类型的内存错误,但我看到的确切行为让我相信,这可能不是由于代码中的错误。这很奇怪,但这是我对这个问题的最好描述。
这些指针都是在程序开始时创建的。
当我运行代码时,我注意到以下几点。第一次内存使用量跃升至系统总使用量的4.3% (从上往下看)。这就发生在我启动可执行文件的时候。在这种情况下,CPU使用率下降到5-15%,这是程序通常运行的范围(由于向其传递数据的速率)。
在我的程序启动时,幕后发生了一些与内存有关的事情,但我不能理解它是什么,感觉在现代x86_64服务器上分配5%的系统内存(1.2 to )不应该花2-3分钟的时间。请注意,在这种奇怪的启动之后,程序通常会正常运行。
然而,今天我不得不增加程序在/dev/shm中写入的文件数量,并相应地增加指针的数量。为了提供更多细节,我将文件数量从1345增加到1350。事实上,只要超过1346就足以解决这个100%的cpu问题。
我真的对我在这里处理的事情感到困惑。我怀疑SLAB/SLUB分配器可能有什么问题(我的系统是带有2.6.35内核的Centos 5.8 )。任何关于如何解决这个问题的想法或提示都将不胜感激。
发布于 2012-04-30 10:21:46
我认为这不太可能是SLUB的问题。/dev/shm是通过tmpfs (在现代系统上)实现的,它使用页面缓存,而不是SLUB。
你需要弄清楚你的程序在消耗CPU的时候在做什么。从那时起,你应该学会使用perf。
https://stackoverflow.com/questions/10339643
复制相似问题