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