0

我正在FreeBSD 10.3-BETA使用Apache-2.4.18 MPM Prefork. Apache 住在监狱里,通过devfs, procfs, fdescfs,和(和其他相同的文件)实际副本安装。/homenullfs/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,我可以生成ServerLimitapache 进程。并且它们都有以下限制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我没有立即收集所有统计数据)我做错了什么?谢谢指教。

4

0 回答 0