问题标签 [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++11 - setrlimit RLIMIT_CPU 引发的 SIGXCPU 比虚拟机中的预期晚
[编辑:在文本中添加了 MCVE,澄清]
我有以下程序使用并捕获信号设置RLIMIT_CPU
为 2 秒。限制 CPU 时间。«当进程达到软限制时,会发送一个信号。此信号的默认操作是终止进程。但是,可以捕获信号,并且处理程序可以将控制权返回给主程序。» (男)setrlimit()
RLIMIT_CPU
SIGXCPU
下面的程序设置RLIMIT_CPU
和一个信号处理程序SIGXCPU
,然后它生成随机数直到SIGXCPU
被提升,信号处理程序简单地退出程序。
test_signal.cpp
我编译如下:
在我的笔记本电脑上,它会SIGXCPU
在 2 秒后正确显示,请参阅输出:
如果我在虚拟机(VirtualBox,运行 Ubuntu)中编译和运行,我会得到:
即使运行在我的笔记本电脑上编译的二进制文件,该进程也会在大约 3 秒的用户时间后被终止。
知道是什么原因造成的吗?有关更广泛的上下文,请参阅此线程:https ://github.com/cms-dev/cms/issues/851
c - 为什么 setrlimit(RLIMIT_NPROC) 在以 root 身份运行时不起作用,但在以普通用户身份运行时却可以正常工作?
我编写了以下 C 程序来限制该程序可以创建的最大进程(在 Linux 中)。本程序使用setrlimit()
,预计本程序最多可创建 4 个进程。
当我以普通用户身份编译并运行该程序时,它会给出以下输出:
-1
表示fork()
失败并且 rlimit 正常工作以限制程序可以创建的最大进程。但是当我以 root 身份运行这个程序时,它会给出以下输出:
我们可以看到所有的fork()
成功并且 rlimit 不能正常工作。问题出在哪里?
php - 如何查看 PHP 中的最大打开文件数?
failed to open stream: Too many open files
通过 wp-cli 和 fpm-php,我遇到了 PHP 错误。
我已经适应了 fpmrlimit
和ulimit
命令行之类的东西。现在,如果我能看到脚本可以在不运行(慢)代码的情况下打开的最大文件数,那就太好了。
如何从 PHP 本身查看可以打开的文件数?
我知道我可以查看配置文件,但我想查看当前脚本可用的实际数量,以便我可以调整配置文件并查看哪些更改真正有意义。
不幸phpinfo()
的是没有显示这个数字。
如果有一个 shell 命令显示这个数字,这当然就足够了,因为我可以做到这exec
一点。
java - 在 main() 中设置系统资源限制时,Java JNA 应用程序崩溃
我有一个 JNA 应用程序需要计算大型一维数组 (~1G) 中的元素总和。使用 JNA Resource.Rlimit 类,我可以增加资源限制,如以下代码段所示:
但是,这只适用于在分配大数组的方法中设置堆栈大小的情况。因此,当我运行以下代码时,没有内存不足异常。
但是,当在 main() 中设置资源限制并调用方法 Test1() 时,程序会崩溃。
为什么我不能在调用 Test1() 之前增加 main() 中的堆栈大小。该项目是在具有 8GB RAM 的 Ubuntu 16.04 amdx86-64 上使用 IntelliJ Idea(社区版本 2019.3)编写的。
go - 从 Go 为 Kubernetes 容器将 POSIX 消息队列 RLIMIT_MSGQUEUE 设置为无限制
我们有一个库,它使用 POSIX 消息队列在进程之间传递数据,并且需要将 msgqueue 内核参数设置为无限制,否则进程将返回错误too many open files
。通常我们使用ulimit -q
and来查看/设置它ulimit -q unlimited
,但是对于一些 Kubernetes 容器,我们希望能够通过 go 代码直接设置它。
我们已经确认 pod 规范允许更改 mqueue 设置(通过 Kubernetes 1.14+ 的 securityContext)并且特定容器可以调整资源设置:
如果没有这些设置,甚至ulimit -q unlimited
会出现错误:
bash:ulimit:POSIX消息队列:无法修改限制:不允许操作
但是我们如何使用syscall.Setrlimit从我们的代码中调整限制值呢?
linux - 可以使用 setrlimit 来强制 mmap 返回 64GB 范围内的 VA 吗?
我正在使用 ARM64 服务器并尝试使旧程序正常工作。我不需要源代码,只需一个二进制文件。
该二进制文件使用不支持 48 位虚拟地址 (VA) 的 LuaJit。但是,我的内核使用 48 位 VA。
LuaJit 使用 mmap 分配内存。
我想让 mmap 总是返回 47 位或更低的 VA。我注意到 setrlimit 可以限制进程的虚拟地址范围。它只是关于配额还是强制执行 VA 空间限制?
如果它限制了 VA 范围,我想我可以预加载一个动态库并调用 setrlimit 来调用 mmap。
linux - `getrlimit(RLIMIT_NICE, &rlim)` 返回 `0` 的 `rlim.rlim_cur` 超出定义范围?
getrlimit(RLIMIT_NICE, &rlim)
成功返回rlim.rlim_cur
(and )的手册页rlim.rlim_cur
将包含1
to40
或RLIM_INFINITY
( 我认为是(unsigned long)-1
) 范围内的值,但它总是包含0
我。这里是什么0
意思?
我尝试使用更改限制,ulimit -Se10
但这只是给了我ulimit: scheduling priority: cannot modify limit: Invalid argument
正值和ulimit: -1: invalid number
负值。(我想它也想要1
to40
范围而不是-20
to+19
范围?)只是ulimit -Se0
可以,但没用。(这是针对用户和根用户的。)
我真正想做的事情:找出我是否可以setpriority()
达到某个值,但实际上不要将其设置为该值。它将在 a 之后设置为该值fork()
(好吧,在我想让父级保持当前优先级的两个分叉之后)。但我想尽早报告可能的错误。