为什么apache2为单个文件下载启动多个子进程?

时间:2016-06-03 23:46:38

标签: apache

我在Ubuntu 14.04 LTS上运行apache2。 Web服务器专用于仅提供mp4视频文件。启用服务器状态模块后,我正在观察服务器为每个mp4下载请求生成3个子进程。无论我的应用程序是否尝试加载文件,或者我是通过wget还是通过Web服务器手动执行此操作,都会发生这种情况。这些请求都不会重复多次。然而,服务器仍然创建3个子节点,所有子节点都作为单独的PID运行。

有谁能解释这里发生了什么?

1 个答案:

答案 0 :(得分:0)

这是为了速度。

实际上,它应该是pre-fork() on startup。还有安全问题可以解决:

  • 以root身份启动Apache2
  • 打开(即listen())端口80和443等(可能以root用户身份)
  • fork()
  • 删除用户权限到www-data:www-data(user:group),这使服务更安全
  • accept()连接并处理它们(在孩子中)

默认情况下,它会创建一定数量的子项。您应该能够更改该号码。之前是10点。一些较大的服务器将创建100个。

然后,孩子们将回答一定数量的请求(默认情况下为100,如果我是正确的话),然后退出。当他们退出时,父进程会检测到孩子死亡的事实,并再次调用fork()来调整子进程数。只有在各种阈值允许的情况下,才会发生进一步的fork()次呼叫。