gpt4 book ai didi

linux - Apache 2.4 命中 rlimit_nproc : hidden processes?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:41 25 4
gpt4 key购买 nike

我的网络应用程序允许用户在沙箱中执行一些任意代码。为了防止 fork 炸弹,应用程序调用 setrlimit 并将 RLIMIT_NPROC 限制为 50,然后再执行用户代码。这在 Ubuntu 12.04 到 Ubuntu 13.04 之前都很好用。然而,在升级到 Ubuntu 13.10(随 Apache 2.4 和 Linux 3.11 一起提供)之后,我们达到了 50 个 www-data 进程的限制,即使 Apache2 处于空闲状态也是如此!

通过使用 ulimit 作为用户 www-data 运行 bash 最容易重现该问题。首先切换到用户 www-data 并启动 bash:

jeroen@Ubuntu:/$ sudo su www-data
$ bash
www-data@Ubuntu:/$

现在逐渐降低 RLIMIT_NPROC 直到遇到问题:

#RLIMIT_NPROC=100: works fine   
www-data@Ubuntu:/$ ulimit -u 100
www-data@Ubuntu:/$ ls
bin dev initrd.img lib64 mnt root srv usr vmlinuz.old
boot etc initrd.img.old lost+found opt run sys var
cdrom home lib media proc sbin tmp vmlinuz

#RLIMIT_NPROC=50: limit reached
www-data@Ubuntu:/$ ulimit -u 50
www-data@Ubuntu:/$ ls
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: Resource temporarily unavailable

因此在将 RLIMIT_NPROC 设置为 50 后,进程将无法再 fork 。这意味着已经有 50 个或更多进程作为用户 www-data 运行。然而,情况似乎并非如此,服务器只是一个空白闲置的 Apache 2.4。根据pswww-data目前只有2个procs:

jeroen@Ubuntu:~$ ps aux | grep www-data
www-data 11473 0.0 0.5 631296 46164 ? Sl 14:28 0:01 /usr/sbin/apache2 -k start
www-data 11474 0.0 0.5 565656 45632 ? Sl 14:28 0:01 /usr/sbin/apache2 -k start
jeroen 12136 0.0 0.0 13644 956 pts/4 S+ 14:51 0:00 grep --color=auto www-data

那么为什么 www-data 在 Apache 2.4 中达到了 RLIMIT_NPROC 50 的限制,即使在空闲时也是如此?

最佳答案

在@sarnold 的建议下找到了问题。我的应用程序依赖于 mpm_prefork,直到 Ubuntu 13.04,安装 apache2-mpm-prefork 包时会自动启用此模块。我以为情况仍然如此,但事实证明它正在运行 mpm_event

似乎在 Apache 2.4 中,MPM 的包装发生了变化,mpm_prefork 需要在安装后手动启用:

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo service apache2 restart

现在问题似乎都消失了。

关于linux - Apache 2.4 命中 rlimit_nproc : hidden processes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19435040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com