问题标签 [ulimit]

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.

0 投票
4 回答
9386 浏览

linux - RedHat Enterprise Linux 6 上的进程超出线程堆栈大小限制?

我有几个在 RHEL 6.3 上运行的进程,但由于某种原因,它们超出了线程堆栈大小。

例如,Java 进程在启动时在运行时被赋予 -Xss256k 的堆栈大小,而 C++ 进程在实际代码中使用 pthread_attr_setstacksize() 被赋予 1MB 的线程堆栈大小。

然而,出于某种原因,这些过程并没有遵守这些限制,我不确定为什么。

例如,当我运行

对于 C++ 和 Java 进程,我可以看到每个线程都有数百个“匿名”线程(我已经确认是这些进程中的每一个创建的内部工作线程),但是每个分配的值是 64MB,而不是设置的限制以上:

但是,当我使用所有 64MB 的“匿名”线程在上述进程中运行以下命令时

它显示的最大线程堆栈大小为 1MB,所以我对这里发生的事情有点困惑。此外,调用这些程序的脚本也设置了“ulimit -s 1024”。

应该注意的是,这似乎只发生在使用非常高端的机器(例如 48GB RAM,24 个 CPU 内核)时。该问题不会出现在功能较弱的机器上(例如 4GB RAM、2 个 CPU 内核)。

任何帮助理解这里发生的事情将不胜感激。

0 投票
5 回答
69443 浏览

c - 如何使用 ulimit 或 Mac OS X 上的每个进程为 C 或 Ruby 程序更改堆栈大小?

似乎为 C 程序或 Ruby 程序(使用 C 堆栈)设置堆栈大小的推荐方法是ulimit在 Bash shell 中使用。但

sudo无济于事。有没有办法将其设置为 16MB、32MB 或 64MB?我认为应该有一种方法来设置每个程序调用而不是设置系统范围的参数?

现在8192可能意味着 8MB 非常小,如果与一个进程可以使用的数量相比,有时甚至高达 2GB 的 RAM。

更新说明: ulimit -a可以显示其当前值)。

更新2:实际上似乎ulimit -s <value>是每个shell,如果你第一次设置它,它通常可以工作。问题是当你第二次设置它时,它可能会返回错误)

0 投票
1 回答
1883 浏览

linux - 如何在perl中将ulimit设置为unlimited?

我希望我的 perl 脚本的所有子进程在发生意外故障时生成核心文件。那么如何设置ulimitunlimitedperl 内部呢?

0 投票
4 回答
2286 浏览

perl - 在 Perl 中打开超过 10,000 个文件时出现问题

我需要在 Perl 脚本中打开 10,000 多个文件,因此我要求系统管理员将我的帐户限制更改为 14,000。ulimit -a现在显示这些设置:

更改后,我运行了一个测试 Perl 程序,该程序打开/创建 256 个文件并在脚本末尾关闭 256 个文件句柄。当它创建 253 个文件时,程序死了,说打开的文件太多。我不明白为什么我会收到这个错误。

我正在使用 Solaris 10 平台。这是我的代码

0 投票
1 回答
3407 浏览

python - Python - OSError 24(打开的文件太多)和共享内存

我遇到的问题是在 python 脚本中我的 mac os x 上出现异常 OSError 24(“打开的文件太多”)。

我不知道是什么导致了这个问题。lsof -p 显示大约 40-50 行,我的 ulimit 是 1200(我检查使用

),返回元组 (1200, 1200)。所以我甚至没有超过限制。

我的脚本产生了许多子进程并分配了共享内存段。分配共享内存段时发生异常。我使用sysv_ipc 模块

另外我知道我允许的共享内存段的总数足够大(128 段),并且命令

给出的数量肯定更少(不超过 40 段)。

0 投票
3 回答
53405 浏览

socketexception - 打开的文件太多(ulimit 已更改)

我正在使用 tomcat 7 和 java 1.7 的 debian 服务器。这是一个接收多个 TCP 连接的应用程序,每个 TCP 连接都是 java 进程打开的文件。

看着/proc/pid of java/fd我发现,有时打开的文件数超过 1024,当这种情况发生时,我在catalina.out日志中找到了堆栈跟踪_SocketException: Too many open files_

我发现有关此错误的所有内容,人们都指的是 ulimit,我已经更改了此内容并且错误一直在发生。这是配置:

/etc/security/limits.conf

/etc/sysctl.conf

命令ulimit -a返回:

但是,当我检查 java 进程的限制时,它只有 1024

/proc/pid of java/limits

如何增加Max open filesjava进程的数量?

0 投票
1 回答
835 浏览

ruby - sh via Ruby:在同一行中运行 ulimit 和程序

我正在尝试通过以下命令从 Ruby 运行一些计算密集型程序:

但是,我有时想限制程序的运行时间。所以我试着做

但它似乎失败了;即使我在 Ruby 外部运行的 sh shell 中尝试,“&”技巧也不起作用。

我敢肯定有更好的方法来做到这一点......

0 投票
3 回答
124835 浏览

linux - “ulimit -s 无限”有什么作用?

关于堆栈分配有很多相关的问题是可以理解的

堆栈和堆是什么以及在哪里?

为什么堆栈大小有限制?

堆栈和堆内存的大小

但是在各种 *nix 机器上,我可以发出 bash 命令

或 csh 命令

这如何改变程序的执行方式?对程序或系统性能是否有任何影响(例如,为什么这不是默认设置)?

如果有更多的系统细节是相关的,我主要关心的是在 x86_64 硬件上运行的 Linux 上使用 GCC 编译的程序。

0 投票
0 回答
1117 浏览

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 对两者都是成功的。

0 投票
5 回答
9814 浏览

puppet - 使用 Puppet 配置 ulimit

我想知道如何使用 Puppets exec 类型运行 ulimit 命令。ulimit 的问题似乎在于它不是二进制文件,因此必须在它前面使用 /bin/bash 来调用它。我正在尝试将核心文件大小更改为无限制。我有这个但不认识ulimit。

我可以在命令行中执行'ulimit -c unlimited',它会改变值没问题。问题是通过 Puppet 做到这一点。任何帮助都会很棒。