我有一个C++程序/Linux,它在运行后的2-3秒内开始在32GBRAM上产生错误std::bad alloc (并由包装器调用者重新启动)。我真正关心的是解决这个问题,但我想一步一步地去建立我对这个问题的理解的信心。
系统似乎无法为new请求分配内存(这将在操作系统内存不足时发生)。当程序运行时,我在另一个终端上以尽可能小的时间间隔(1秒)运行sar命令,但是我看到kbcached有大约24 on的内存。为什么操作系统不能释放缓存并使该内存可用于new请求?要么是1秒的时间太长(与程序运行的速度相比),要么是我在这里做错了什么。
基本上,我想交叉验证并指出操作系统确实正在耗尽内存,因此无法分配内存,然后从这一点开始。该怎么做呢?
理想情况下,我希望在内存分配失败时有正确的系统统计数据,比如有多少缓存,总内存使用量等。
发布于 2012-06-18 15:21:35
如果您实际上想要查看进程的内存是如何分配的,那么可以使用gdb为抛出异常的时间设置一个断点。完成后,使用pmap之类的工具检查进程,该工具可以显示有关进程如何使用内存的附加信息。
如果这太原始了(很快就会如此,pmap非常原始),valgrind包含Massif和许多其他实用程序,用于诊断内存使用、CPU利用率和其他运行时问题。
https://stackoverflow.com/questions/11078216
复制相似问题