问题标签 [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.

0 投票
0 回答
533 浏览

c++11 - setrlimit RLIMIT_CPU 引发的 SIGXCPU 比虚拟机中的预期晚

[编辑:在文本中添加了 MCVE,澄清]

我有以下程序使用并捕获信号设置RLIMIT_CPU为 2 秒。限制 CPU 时间。«当进程达到软限制时,会发送一个信号。此信号的默认操作是终止进程。但是,可以捕获信号,并且处理程序可以将控制权返回给主程序。» (setrlimit()RLIMIT_CPUSIGXCPU

下面的程序设置RLIMIT_CPU和一个信号处理程序SIGXCPU,然后它生成随机数直到SIGXCPU被提升,信号处理程序简单地退出程序。

test_signal.cpp

我编译如下:

在我的笔记本电脑上,它会SIGXCPU在 2 秒后正确显示,请参阅输出:

如果我在虚拟机(VirtualBox,运行 Ubuntu)中编译和运行,我会得到:

即使运行在我的笔记本电脑上编译的二进制文件,该进程也会在大约 3 秒的用户时间后被终止。

知道是什么原因造成的吗?有关更广泛的上下文,请参阅此线程:https ://github.com/cms-dev/cms/issues/851

0 投票
1 回答
846 浏览

c - 为什么 setrlimit(RLIMIT_NPROC) 在以 root 身份运行时不起作用,但在以普通用户身份运行时却可以正常工作?

我编写了以下 C 程序来限制该程序可以创建的最大进程(在 Linux 中)。本程序使用setrlimit(),预计本程序最多可创建 4 个进程。

当我以普通用户身份编译并运行该程序时,它会给出以下输出:

-1表示fork()失败并且 rlimit 正常工作以限制程序可以创建的最大进程。但是当我以 root 身份运行这个程序时,它会给出以下输出:

我们可以看到所有的fork()成功并且 rlimit 不能正常工作。问题出在哪里?

0 投票
1 回答
656 浏览

php - 如何查看 PHP 中的最大打开文件数?

failed to open stream: Too many open files通过 wp-cli 和 fpm-php,我遇到了 PHP 错误。

我已经适应了 fpmrlimitulimit命令行之类的东西。现在,如果我能看到脚本可以在不运行(慢)代码的情况下打开的最大文件数,那就太好了。

如何从 PHP 本身查看可以打开的文件数?

我知道我可以查看配置文件,但我想查看当前脚本可用的实际数量,以便我可以调整配置文件并查看哪些更改真正有意义。

不幸phpinfo()的是没有显示这个数字。

如果有一个 shell 命令显示这个数字,这当然就足够了,因为我可以做到这exec一点。

0 投票
0 回答
101 浏览

java - 在 main() 中设置系统资源限制时,Java JNA 应用程序崩溃

我有一个 JNA 应用程序需要计算大型一维数组 (~1G) 中的元素总和。使用 JNA Resource.Rlimit 类,我可以增加资源限制,如以下代码段所示:

但是,这只适用于在分配大数组的方法中设置堆栈大小的情况。因此,当我运行以下代码时,没有内存不足异常。

但是,当在 main() 中设置资源限制并调用方法 Test1() 时,程序会崩溃。

为什么我不能在调用 Test1() 之前增加 main() 中的堆栈大小。该项目是在具有 8GB RAM 的 Ubuntu 16.04 amdx86-64 上使用 IntelliJ Idea(社区版本 2019.3)编写的。

0 投票
1 回答
532 浏览

go - 从 Go 为 Kubernetes 容器将 POSIX 消息队列 RLIMIT_MSGQUEUE 设置为无限制

我们有一个库,它使用 POSIX 消息队列在进程之间传递数据,并且需要将 msgqueue 内核参数设置为无限制,否则进程将返回错误too many open files。通常我们使用ulimit -qand来查看/设置它ulimit -q unlimited,但是对于一些 Kubernetes 容器,我们希望能够通过 go 代码直接设置它。

我们已经确认 pod 规范允许更改 mqueue 设置(通过 Kubernetes 1.14+ 的 securityContext)并且特定容器可以调整资源设置:

如果没有这些设置,甚至ulimit -q unlimited会出现错误:

bash:ulimit:POSIX消息队列:无法修改限制:不允许操作

但是我们如何使用syscall.Setrlimit从我们的代码中调整限制值呢?

0 投票
0 回答
42 浏览

linux - 可以使用 setrlimit 来强制 mmap 返回 64GB 范围内的 VA 吗?

我正在使用 ARM64 服务器并尝试使旧程序正常工作。我不需要源代码,只需一个二进制文件。

该二进制文件使用不支持 48 位虚拟地址 (VA) 的 LuaJit。但是,我的内核使用 48 位 VA。

LuaJit 使用 mmap 分配内存。

我想让 mmap 总是返回 47 位或更低的 VA。我注意到 setrlimit 可以限制进程的虚拟地址范围。它只是关于配额还是强制执行 VA 空间限制?

如果它限制了 VA 范围,我想我可以预加载一个动态库并调用 setrlimit 来调用 mmap。

0 投票
0 回答
6 浏览

linux - `getrlimit(RLIMIT_NICE, &rlim)` 返回 `0` 的 `rlim.rlim_cur` 超出定义范围?

getrlimit(RLIMIT_NICE, &rlim)成功返回rlim.rlim_cur(and )的手册页rlim.rlim_cur将包含1to40RLIM_INFINITY( 我认为是(unsigned long)-1) 范围内的值,但它总是包含0我。这里是什么0意思?

我尝试使用更改限制,ulimit -Se10但这只是给了我ulimit: scheduling priority: cannot modify limit: Invalid argument正值和ulimit: -1: invalid number负值。(我想它也想要1to40范围而不是-20to+19范围?)只是ulimit -Se0可以,但没用。(这是针对用户和根用户的。)

我真正想做的事情:找出我是否可以setpriority()达到某个值,但实际上不要将其设置为该值。它将在 a 之后设置为该值fork()(好吧,在我想让父级保持当前优先级的两个分叉之后)。但我想尽早报告可能的错误。