我正在FreeBSD 10.3-BETA
使用Apache-2.4.18 MPM Prefork
. Apache 住在监狱里,通过devfs
, procfs
, fdescfs
,和(和其他相同的文件)实际副本安装。/home
nullfs
/etc/{passwd,group,*db,login.conf}
MaxWorkersPerUser
我在 ApacheMPM 文档中找不到任何类似的指令,所以我试图通过 FreeBSD 限制系统来限制它。
我login.conf
对任何用户都有一些限制,例如:
# limits -U littej
Resource limits for class coolguy:
cputime 90 secs
filesize infinity kB
datasize infinity kB
stacksize infinity kB
coredumpsize 0 kB
memoryuse 524288 kB
memorylocked 64 kB
maxprocesses 30
openfiles infinity
sbsize infinity bytes
vmemoryuse 757760 kB
pseudo-terminals infinity
swapuse infinity kB
当我尝试创建更多允许的进程时,出现标准错误:
littej@home $ for i in {1..30}; do sleep 60& done
[1] 7394
..
[28] 7421
bash: fork: retry: Resource temporarily unavailable
但是,如果我将连接到我的站点,则 apache 进程会从我的用户中产生 - 并坚持下去。因此,在限制为 的情况下maxprocesses=30
,我可以生成ServerLimit
apache 进程。并且它们都有以下限制maxproccesses=30
:
# pgrep -fu littej|wc -l; for i in `pgrep -fu littej`; do procstat -l $i|grep maxproc|grep -v sleep; done
120
9857 httpd maxprocesses 30 30
<..all of them are same with different PIDS..>
9848 httpd maxprocesses 30 30
7412 bash maxprocesses 30 30
7137 sh maxprocesses 30 30
然后我尝试使用rctl
限制。同样,即使 rctl 显示它应该将 maxproc 限制为 30,但允许增加三倍:
# rctl -a user:littej:maxproc:deny=30
# rctl
user:littej:maxproc:deny=30
<..some other system users..>
# rctl -u user:littej|grep maxproc
maxproc=80
(由于系统存在,数字不一样,pgrep|wc
我没有立即收集所有统计数据)我做错了什么?谢谢指教。