【问题标题】:C++ memory overcommit LinuxC++ 内存过量使用 Linux
【发布时间】:2021-05-04 11:24:23
【问题描述】:

我目前正在编写一个基本上为客户端处理工作负载的服务器应用程序。根据实际工作量,服务器可能会使用大量内存。目标平台是Windows和Linux,代码是用c++编写的。

但是,我对 linux 编程不是很熟悉,在今天的一些测试中,我遇到了一些奇怪的崩溃。事实证明,这些与过度使用的内存有关。

我编写的代码相当健壮,可以通过在遇到 bad_alloc 异常时拆分和排队其工作负载来处理内存不足的情况(至少在 Windows 系统上)。 重构所有代码以应对由于过度使用的内存而可能发生的错误将是一场彻头彻尾的噩梦。

所以,我想知道是否可以关闭我的进程和子线程的过度使用。我已经在这里找到了一个老问题Link(在 stackoverflow 上),它的答案是“否”,但意识到这是一个 10 年前的答案,我想知道这是否可能已经改变了?

如果仍然无法明智地调整应用程序,是否至少有一种方法可以在我的应用程序中检测它的当前设置?

提前致谢!

【问题讨论】:

  • 其他问题并没有说它不能为一个进程它说它不能在全局范围内为系统上的所有进程完成。事实上,根据您的描述,解决方案状态似乎是您所需要的。
  • 禁用整个系统的过度提交的一种方法是(以 root 身份)执行echo 2 > /proc/sys/vm/overcommit_memory

标签: c++ linux memory memory-overcommitment


【解决方案1】:

所以,我想知道是否可以为我的进程和子线程关闭过度使用。我已经在 Link(在 stackoverflow 上)找到了一个老问题,答案为否,但意识到这是一个 10 年前的答案,我想知道这是否会改变?

不,您仍然无法更改每个进程的过度使用设置。这是一个系统范围的设置。只有超级用户权限才能更改。

是否有至少一种检测当前设置的方法

您可以从 /proc 伪文件系统中读取它。特别是文件/proc/sys/vm/overcommit_memory

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 2012-01-25
    • 2010-12-13
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多