2011-11-10 72 views
3

我们有一个用PHP编写的轻量级跟踪脚本,运行在Apache/2.2.14(Ubuntu)上。该脚本将收到大量的并发连接,但每个连接都会很快。目前,我们正在使用的prefork,配置如下:Apache2轻量级连接的高容量优化技巧

StartServers   5 
MinSpareServers  5 
MaxSpareServers  10 
ServerLimit   600 
MaxClients   600 
MaxRequestsPerChild 0 

我们也有保持活动关

我与这些设置相当多的玩耍了,并与Apache基准一直在测试。任何时候我提出与ab的并发连接,我会得到“apr_socket_recv:连接重置由对等体(104)。”我也提出了最大数量的文件描述符。

我想知道是否有任何apache的大师可以指出我在这种类型的安装(大量的轻量级连接)的正确方向。 StartServers,Min/MaxSpareServers等的最佳值是多少?工人MPM值得研究吗?任何想法都欢迎。

+1

您是否想用超过600个线程使用ab进行基准测试?你是否同时增加最大客户数?也许如果你发布一些日志,你会帮助人们回答你的问题..(/var/log/apache/error.log等..) – Zak

回答

4

我可以给你一些提示:

  • 尝试在工人模式,而不是prefork的使用Apache。要做到这一点,要么将PHP置于fastcgi模式(php-fpm),要么冒险将其保留在线程化apache工作者的mod_php中(风险在于siome外部库可能会与区域设置冲突,但如果您的PHP跟踪代码是小,你可以控制,所有东西都有多线程启用 - 没有任何外部库的PHP5是多线程启用)
  • 如果你MaxClient是600然后把600在StartServersMinSpareServersMaxSpareServers。否则Apache是​​在very low speed创建一个新的分支:

父进程产生在1每秒的最大速率新的儿童。

,如果你认为你的服务器可以处理600个叉再取RAM,创建600个叉子,也许改变MaxRequestsPerChild设定成类似3000,所以,有时老叉被删除并重新创建(避免memleaks)。您不会在任何时候创造分支创建速度,并且Apache不会随时管理创建和删除儿童的任何事情。

  • 禁用保持活动是在你的情况是一件好事,因为你没有
  • 要知道什么是MaxLients正确的价值,无论是在预派生或工作模式,只是测试它,追踪由一个叉使用的内存并用这个数字来划分你可用RAM的内容。要小心,php也会使用一些RAM,mod_php这个RAM将在apache fork内存中使用,在php-fpm中它将在php-fpm进程中,检查memory_limit设置在PHP中的最大大小为1 PHP过程。
  • 减少您的PHP RAM使用量,以便您能够并行运行更多的PHP脚本。不要建立大数组,保持会话点亮等。使用APC操作码可以减少你的内存占用(也可以做其他很好的事情),也可以使用PHP 5.3而不是5.2。
+0

谢谢,正是我在找什么。你能否在这方面详细阐述一下prefork vs worker? – user1040700

+0

那么,工作人员可以很容易地获得更多的并行请求(每个分支25到75个并行请求,而不是一个),但是可能少于60个分支,您需要测试您可以分配多少分支 - 特别是如果每​​个PHP过程需要大量的内存。 – regilero