我的应用程序创建每个连接线程。应用程序在非零用户 ID 下被破坏,有时线程数超过默认值 1024。我想编辑这个号码,所以我的选择很少
以root身份运行[非常糟糕的主意,还必须与安全性妥协,所以放弃它]
在特权不足的用户下运行,使用setcap并赋予能力CAP_SYS_RESOURCE。然后我可以在我的程序中添加代码
struct rlimit rlp; /* will initilize this later with values of nprocs(maximum number of desired threads)*/
setrlimit(RLIMIT_NPROC, &rlp);
/*RLIMIT_NPROC
*The maximum number of processes (or, more precisely on Linux, threads) that can
* created for the real user ID of the
*calling process. Upon encountering this limit, fork(2) fails with the error
*EAGAIN. */
另一件事是编辑/etc/securitylimits.conf ,我可以简单地为开发用户输入并可以输入行,例如
@devuser hard nproc 20000
@devuser soft nproc 10000
哪里 10k 就足够了。所以我应该继续最后一个选项,所以不愿意更改源代码。而且我更想知道什么是更强大和更标准的方法。
征求你的意见,提前谢谢你:)
PS:如果单个进程的线程数超过 1k,会发生什么情况。我也有 32GB 的 Ram