我正在共享远程计算机上运行一些代码。当并行运行多个实例时,它们相对较快地死亡std::bad_alloc
,而单个实例运行时间要长得多(在任何情况下,每个实例 1 个线程)。这让我想知道作为用户我是否只能使用固定数量的内存。当然,这是有道理的。有什么方法可以查明是否是这种情况(除了询问管理员)?
编辑: 的输出ulimit -a
是
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 2063129
-n: file descriptors 1024
-l: locked-in-memory size (kbytes) 66029704
-v: address space (kbytes) unlimited
-x: file locks unlimited
-i: pending signals 2063129
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0
-N 15: unlimited
答案1
我已经看到软件保留(但从未实际使用)大量内存。
我找到了两个解决方案:
- 过度使用内存。您可以要求 Linux 内核说“肯定有更多内存”,即使实际上没有。 (/proc/sys/vm/overcommit_memory = 1)
- 添加交换。过度使用内存已经让我困扰了好几次,调试起来非常困难,所以今天我更喜欢简单地添加更多交换。如果系统陷入混乱并变得像狗一样缓慢,我至少知道原因。