我有一个C ++程序/ Linux,它在运行的2-3秒内开始在32GB RAM上吐出错误std::bad alloc
(并由包装调用者重新启动)。我真正关心的是解决这个问题,但我想一步一步地建立我对这个问题的理解的信心。
看起来系统无法为new
请求分配内存(这会在操作系统内存不足时发生)。当程序运行时,在另一个终端上我以尽可能小的间隔(1秒)运行sar
命令,但我看到kbcached
是~24GB内存。为什么操作系统无法释放缓存并使new
请求可以使用该内存? 1秒是太多时间(与程序运行的速度相比)或者我在这里做错了。
基本上我想交叉验证并确定操作系统确实耗尽内存,因此无法分配内存,然后从这一点开始。怎么做?
理想情况下,我希望在内存分配失败的时候获得系统统计信息,例如缓存,总耗尽内存等。