C++ 内存过度提交 Linux

3

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

然而,我对Linux编程并不太熟悉,在今天的一些测试中遇到了一些奇怪的崩溃。事实证明,这些与过度提交的内存有关。

我编写的代码相当健壮,并且可以处理内存不足的情况(至少在Windows系统上),通过在遇到bad_alloc异常时拆分和排队其工作量。重构所有代码以应对由于超额提交的内存可能导致的错误将是一场彻头彻尾的噩梦。

所以,我想知道是否可以关闭进程和子线程的超额提交。我已经在这里Link(在stackoverflow上)找到了一个旧问题的答案,回答为否,但是意识到这是一个十年前的答案,我想知道是否已经改变了?

如果仍然无法在应用程序层面关闭它,是否至少有一种方法可以在我的应用程序中检测当前的设置呢?

预先感谢您!


那个问题并没有说不能在一个进程中完成,它是说不能在系统的所有进程中全局完成。事实上,从你所描述的情况来看,解决方案似乎正是你需要的。 - fredrik
禁用整个系统的过度提交(over-commit)的一种方法是(作为 root 用户)执行 echo 2 > /proc/sys/vm/overcommit_memory 命令。 - Peter
1个回答

1
我在想是否可以关闭我的进程和子线程的过度承诺。我已经在StackOverflow上找到了一个旧问题的链接,回答是不行。但是,这个回答已经有10年了,我想知道这是否已经改变了?
不,您仍然无法更改每个进程的过度承诺设置。它是一个系统范围的设置。只有超级用户权限才能更改它。
至少有一种检测当前设置的方法吗?
您可以从/proc伪文件系统中读取它。特别是文件/proc/sys/vm/overcommit_memory。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接