ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php-大量轻量级连接的Apache2优化技巧

2019-11-02 02:32:32  阅读:273  来源: 互联网

标签:apache apache2 benchmarking worker php


我们有一个非常轻量级的跟踪脚本,用PHP编写,可在Apache / 2.2.14(Ubuntu)上运行.该脚本将接收大量并发连接,但是每个连接都将很快.当前,我们正在使用prefork,其配置如下:

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

我们还关闭了KeepAlive

我已经在这些设置上进行了很多尝试,并且一直在使用apache基准测试.每当我提高与ab的并发连接时,都会收到“ apr_socket_recv:对等方重置连接(104)”.我还提高了文件描述符的最大数量.

我想知道是否有任何apache专家可以为这种类型的设置(大量轻量级连接)指出正确的方向. StartServer,Min / MaxSpareServers等的最佳值是什么?工人MPM值得研究吗?任何想法都欢迎.

解决方法:

我可以给你一些提示:

>尝试在工作人员模式下使用Apache,而不要使用prefork.为此,请将PHP置于fastcgi模式(php-fpm)或冒着将其保留在线程化的Apache工作者内部的mod_php中的风险(风险是siome外部库可能会发生冲突,例如语言环境设置,但是如果您的PHp跟踪代码是很小,您可以控制所有启用多线程的功能-没有任何外部lib的PHP5启用多线程)
>如果您的MaxClient是600,则在StartServers,MinSpareServers和MaxSpareServers中放入600.否则Apache将在very low speed处创建一个新的fork:

the parent process creates new children at a maximum rate of 1 per second.

如果您认为您的服务器可以处理600个分叉,则占用RAM,创建600个分叉,并可能将MaxRequestsPerChild设置更改为3000,这样有时会删除并重新创建旧的分叉(避免内存泄漏).您不会在分叉创建率上有任何损失,并且Apache也不会在任何时候管理子项的创建和删除方面有所损失.

>与您一样,禁用KeepAlive对您而言是一件好事
>要知道在前叉模式或工作模式下MaxLients的正确值是什么,只需对其进行测试,跟踪一次前叉使用的内存,然后将可用RAM的大小除以该数字即可.请注意,php也会使用一些RAM,与mod_php一起,该RAM将在apache fork内存中使用,在php-fpm中它将在php-fpm进程中,检查PHP中的memory_limit设置是否为最大大小PHP过程.
>减少您的PHP RAM使用量,以便您能够并行运行更多PHP脚本.不要构建大型数组,保持会话状态良好,等等.使用APC操作码可以减少内存占用(也可以做其他一些不错的事情),同时使用PHP 5.3而不是5.2.

标签:apache,apache2,benchmarking,worker,php
来源: https://codeday.me/bug/20191102/1988145.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有