问题标签 [setrlimit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - setrlimit 不可靠?
我试图用来setrlimit()
限制一个过程所花费的时间。但是,当我执行某些操作(例如printf()
.
这是一个说明问题的测试程序:
但是,如果我用一个不同的例程替换 for 循环,比如天真的斐波那契:
它完美地工作。这里发生了什么?setrlimit()
简直不靠谱?
c - 在 C (OSX) 中更改文件描述符限制
我想增加在 OSX 10.7 上运行的 C 程序可用的文件描述符的最大数量。我已将以下代码添加到我的项目中,但它失败了!
它打印这个日志:
最高限额似乎有点太高了。这是怎么回事?
gcc - 在具有拆分堆栈的多线程应用程序上使用 setrlimit() 增加堆栈空间
我正在考虑开发自己的工作窃取调度程序,需要解决的问题之一是堆栈溢出的可能性。这些仅发生在少数情况下,即一名工人不断从其他工人那里窃取任务,例如:
可以使用多种技术来避免这种模式,但是简单地增加堆栈空间可能是最好的选择,因为它允许进行其他优化。在单线程应用程序上,这可以通过调用来完成,setrlimit()
但对于多个线程,它没有效果(除非从主线程调用)。
此行为可能与跨多个线程具有固定大小的堆栈有关。但是,对于拆分堆栈(在 GCC 4.6.0+ 上实现),此限制不再适用。
我的问题是调用是否仅适用于拆分堆栈,或者setrlimit()
在否定情况下是否可以调用底层brk()
//并手动执行。mmap()
sbrk()
macos - 限制 OSX /Darwin 中单个进程的内存使用
我正在尝试修改一些 JNI 代码以限制进程可以消耗的内存量。这是我用来在 linux 和 osx 上测试 setRlimit 的代码。在 linux 中,它按预期工作,并且 buf 为空。
此代码将限制设置为 32 MB,然后尝试分配 64 MB 缓冲区,如果缓冲区为空,则 setrlimit 有效。
在 linux 机器上这是我的结果
在 osx 10.8 上
我的问题是,如果这在 osx 上不起作用,是否有办法在 darwin 内核中完成这项任务。手册页似乎都说它会起作用,但似乎没有这样做。我已经看到 launchctl 对限制内存有一些支持,但我的目标是在代码中添加这种能力。我也尝试使用 ulimit ,但这也不起作用,我很确定 ulimit 使用 setrlimit 来设置限制。当超过 setrlimit soft 或 hardlimit 时,我还能捕捉到信号吗?我一直找不到。
如果它也可以在 Windows 中完成,则可以加分。
感谢您的任何建议
更新
正如指出的那样,RLIMIT_AS 在手册页中明确定义,但被定义为 RLIMIT_RSS,因此如果参考文档,RLIMIT_RSS 和 RLIMIT_AS 在 OSX 上是可互换的。
osx 10.8 上的 /usr/include/sys/resource.h
测试了特洛伊木马对使用此处描述的 RLIMIT_DATA 的极好建议
linux 和 osx 的结果是一样的,那就是 malloc 对两者都是成功的。
unix - 关闭子进程中打开的文件描述符
有没有办法遍历已经打开的文件描述符(由父进程打开)并在子进程中一个一个地关闭它们?
操作系统:Unix。
关闭原因: setrlimit() 的 RLIMIT_NOFILE 限制限制了一个进程可以分配的文件描述符的数量。如果我们想通过设置这个限制来限制我们的子进程,它取决于已经分配的文件描述符。
尝试在子进程中设置此限制会受到限制,因为父进程有一些打开的文件描述符,因此我们不能将此限制设置为小于该数字。
示例:如果父进程分配了 10 个文件描述符,并且我们希望将子进程的文件描述符数限制为小于 10(例如 3),我们需要关闭子进程内的 7 个文件描述符。
对此的解决方案可以使所有希望限制其子进程创建新文件或打开新网络连接的人受益。
python - MacOS 上的 Python 完全忽略了 rlimit
我在 MacOS 上的 Python 进程完全忽略了我设置的 rlimits。(我通过打印确认它们已设置)
物理内存使用率超过 2.4Gb,此时 CPU 使用率下降 << 5% 并挂起。(潜在的罪魁祸首似乎是 numpy 数组分配,但我不能强制OutOfMemory
异常来查明在哪里,所以我被卡住了)。这是怎么回事?我认为硬 rlimits 不能被忽略?
编辑:在我看来,有问题的分配不是在本机 Python 中完成的,而是在 numpy 或scikit-learn中完成的。链接到cpython 的源代码:Modules/resource.c如果是这样,那将是一个明确的 docbug。
版本:MacOS 10.8.2 上的 python2.7.3(macports,64b),py27-numpy。
机器具有 4Gb 物理 RAM。
c - 期望在 Linux 中 fd < 打开文件描述符的最大数量是否合理?
我正在编写一个需要处理许多打开的套接字的服务器,所以我setrlimit()
用来设置打开文件描述符的最大数量(作为 root,在删除权限之前),如下所示:
现在,我意识到可能不会有任何保证,而且我受制于 Linux 内核用来实现文件描述符表的任何方法。但在实践中,假设该程序从 Linux 内核接收的任何 fd 的值都小于我上面设置的 MAX_FD_C 是否合理?
我想保持每个套接字数据尽可能紧凑,这可能意味着简单地使用类似数组static struct client clients[MAX_FD_C] = {{0}};
并使用 fd 作为客户端结构的索引(这基本上是我自己的 FDT 版本)。
linux - 将进程打开文件的最大值设置为最大值(在 linux 中)
无论如何将(硬限制)open-file-max(setrlimit,RLIMIT_NOFILE)设置为最大值?
假设进程的 pid 为零(root)。我只是想将RLIMIT_NOFILE增加到最大值,但我不知道最大值是多少。
(RLIM_INFINITY 无论如何都不起作用)。
linux - 在 Linux 中限制程序的内存使用
我是 Linux 和终端(或它使用的任何类型的命令提示符)的新手,我想控制一个进程可以使用的 RAM 量。我已经找了几个小时来找到一个易于使用的指南。我有一些限制它的要求:
- 该程序的多个实例将运行,但我只想限制一些实例。
- 一旦超过限制,我不希望进程崩溃。我希望它使用硬盘页面交换。
- 该程序将在 WINE 下运行,并且是一个 .exe。
那么有人可以帮助使用命令来限制Linux中进程的RAM使用吗?