gpt4 book ai didi

c++ - 获取 std::bad_alloc 错误;如何交叉验证操作系统是否真的内存不足

转载 作者:可可西里 更新时间:2023-11-01 17:58:50 25 4
gpt4 key购买 nike

我有一个 C++ 程序/Linux,它在运行后 2-3 秒内开始在 32GB RAM 上出现错误 std::bad alloc(并由包装器调用者重新启动)。我真正关心的是解决这个问题,但我想一步一步地去建立我对这个问题的理解的信心。

看起来系统无法为 new 请求分配内存(当操作系统内存不足时会发生这种情况)。当程序运行时,我在另一个终端上以尽可能小的间隔(1 秒)运行 sar 命令,但我看到 kbcached 是 ~24GB 内存。为什么操作系统无法释放缓存并使该内存可用于 new 请求?要么 1 秒时间太多(与程序运行的速度相比),要么我在这里做错了什么。

基本上我想交叉验证并确定操作系统确实内存不足,因此无法分配内存,然后从这一点开始。怎么做?

理想情况下,我希望在内存分配失败时获得系统统计信息,例如缓存量、总内存用量等。

最佳答案

如果您真的想查看您的进程的内存是如何分配的,您可以使用 gdb 为抛出异常时设置一个断点。如果是,请使用 pmap 等工具检查流程,它可以向您显示有关进程如何使用内存的其他信息。

如果这太原始了(而且很快就会这样,pmap 非常原始),valgrind包括 Massif 和许多其他用于诊断内存使用情况、CPU 利用率和其他运行时问题的实用程序。

关于c++ - 获取 std::bad_alloc 错误;如何交叉验证操作系统是否真的内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com