以前公司网站架构一直都是nginx+apache,因为apache市场占有率还是很大的,稳定性也一直很好,加上如今版本已经升级到2.4,安全和性能方面都有提升,因为公司业务访问量不是太大,所以一直也没计划更换,但最近因为测试人员用jmeter连续测压测3轮200并发(压测都是动态请求)反馈很多报错,查了一个apache的错误日子,报内存不够,8G的内存应该不会这么差吧!而且响应时间在我看来也比较久,其中当然也有一些代码的原因,这里我只想从运维的角度去试试php-fpm替代apache看看效果如何?其实说白了最后主要就是看响应时间和错误率。
1、首先保存单台apache(kvm运行,apache还是优化了的)的压测数据(总共29个接口)


再看看apache优化之后的参数

2、因为这次在测试swarm mode,所以正好通过swarm部署php-fpm环境,单台docker容器运行,代码一样,php.ini版本和参数基本都一样,下面看一组www.conf基本没有做任何优化的压测结果

分析nginx日志和压测结果看到很多500错误,当时我就纳闷了,php-fpm不至于这么弱吧?不是高并发的网站都是使用php-fpm嘛!当时查了一下php-fpm日志报错如下:
Failed to connect to redis: Cannot assign requested address
经排查是php-fpm服务端连接redis有问题,php-fpm频繁的连redis服务器,由于每次连接都在很短的时间内结束,导致产生太多的TIME_WAIT不释放,以至于用完了可用的默认端口号,所以新的连接没办法绑定端口,说明是php-fpm服务端的问题,而不是redis服务器端的问题。通过netstat的确也看到很多TIME_WAIT状态的连接,所以我们需要简单的做一些内核参数优化。
解决办法:
在docker容器所在的宿主机上执行命令
sysctl -w net.ipv4.tcp_timestamps=1 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置不起作用
sysctl -w net.ipv4.tcp_tw_recycle=1 表示开启TCP连接中TIME-WAIT sockets的快速回收
再次压测已经看到没有500错误,也就是错误率为0,响应时间和apache不分上下,有的接口高,有的接口低,虽然相差不是很大,但这只是php-fpm参数没有优化压测的结果,已经让我感到一丝丝的欣慰啦!
下面是响应时间的截图对比

关于php-fpm优化压测的细节和结论
对于www.conf优化并不是设置的进程数量越高越好,如果设置不合适就会导致系统负载很高,也需要根据压测结果和php-fpm报的错误日志需要不断的调试和压测,提一句还是看结果最重要。下面是我压测过程中日志警告的截图


下面是我调优的参数,系统负载最高都能到30左右。其实还是建议大家根据实际的硬件配置优化,这里我限制了CPU能使用宿主机的400%,内存8G。一般一个php-fpm占用20M内存左右。
www.conf主要优化参数:
php-fpm工作模式选为默认,如果内存很大可以设置为static,但是设置static后只有pm.max_children一个参数有效(切记切记),设置dynamic是所有参数都有效,另外还有一种ondemand管理方式,这里不多议。
www.conf文件优化如下:
pm = dynamic
子进程最大数
pm.max_children = 50
优化后为100,因为并发是200,持续3轮,理论上一般并发多少这个值就设置多少,然后相对于的增加一点点即可!这样php-fpm日志就不会报最大子进程数不够的警告。比如这里我压测的时候也设置了300,观察了php-fpm最多250个左右子进程,但是设置为300的响应时间还没有100好看。
初始子进程数
pm.start_servers = 5
优化后为50
最小空闲子进程数
pm.min_spare_servers = 5
优化后为50
最大空闲子进程数
pm.max_spare_servers = 35
优化后为70
每个子进程重生之前服务的请求数
pm.max_requests = 500
优化后为4000
单个请求的超时中止时间
request_terminate_timeout = 0
优化后为10,如果后端处理时间大于10秒就会报出502,这也是为了很好释放资源的优化,设置的时候一定要注意。
文件打开描述符的rlimit限制
rlimit_files = 1024
优化后为8192
再次压测结果响应时间php-fpm还不如apache好看,甚至比apache弱,这一点确实让我很惊讶,关于www.conf配置文件我优化了N次,但是压测结果在处理时间都没让我很满意,虽然在错误率这方面优势很明显,难道只是我一厢情愿的认为php-fpm比apache强很多吗?难道对于我这种压测标准默认的配置就是最优的吗?这里结果是单台php-fpm只是在错误率上面有明显的优势,处理时间上如果优化不好会比apache弱或者不分上下?以后准备抛除所有压测php测试页面进行对比看看!
个人疑问:
1、最大子进程数设置很大,系统负载偶尔会飙升很高,甚至有时候能到一百多,这里让我很不解。
2、当top看到系统负载不高,而vmstat查看r列会造成cpu严重不足,也能到一百多,又让我真心有点不理解了。

关于对php-fpm的压力测试相关推荐

  1. 编译安装LAMP对其性能压力测试

    本文主要描述了apache,php,mysql的安装方式,并结合xcache对php进行加速,使用ab命令对php进行压力性能测试. 本次环境:都是在一台主机上实现,系统为Centos6.5_64位 ...

  2. 2021PHP框架最新性能压力测试比较 php框架如何选择

    关闭debug,无优化情况下测试. 硬件: CPU:Intel(R) Xeon(R) CPU E5-2689 0 @ 2.60GHz 16核心.内存:16GB. 操作系统:Linux desktop ...

  3. 2021 PHP框架与go框架最新性能压力测试比较

    有人说PHP性能低?go语言性能高?到底谁高谁低数据说话!我们就来实际对比一下各PHP框架及一款go语言框架的性能是怎样的. 硬件: CPU:Intel(R) Xeon(R) CPU E5-2689 ...

  4. 网站压力测试工具webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 引用 wget htt ...

  5. 二、多并发实现接口压力测试

    一.flsak接口压力测试 import base64 import logging import os, cv2,time import urllib, glob import numpy as n ...

  6. 微软压力测试工具 web application stress

    WEB服务器的压力测试工具~ 115808 2009年8月1日 lbimba 铜牌会员 这里给广大的煤油推荐一个web网站压力测试工具.它可以用来模拟多个用户操作网站,在程序投入运行时,可以用它来进行 ...

  7. python的web压力测试工具-pylot安装使用

    pylot是python编写的一款web压力测试工具.使用比较简单.而且测试结果相对稳定. 这里不得不鄙视一下apache 的ab测试,那结果真是让人蛋疼,同样的url,测试结果飘忽不定,看得人心惊肉 ...

  8. 压力测试 闪存_产品评测 | HPE Nimble AF全闪存系列,诠释真正的高端存储

    随着AI.互联网.大数据等技术快速发展,企业对存储设备的需求已踏上一个更高的级别,高性能.低延时.大容量等多种需求的应用场景愈发常见,在这种情况下,寻求能够满足相应工作负载能力的存储设备已成为企业IT ...

  9. ubuntu mysql 改密码_tpcc-mysql 压力测试

    若是想知道数据库或集群在业务环境中的性能,就需要压测. TPC-C TPC-C 是TPC组织发布的一个测试规范,用来模拟测试复杂的在线事务处理系统(OLTP). 它的测试结果包括每分钟事务数(tpmC ...

  10. 性能测试,负载测试,压力测试以及容量测试的联系与区别--网搜及总结

    1.负载测试,英文是Load testing. 负载测试是性能测试的一种,测试一个应用在重负荷下的表现.例如测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败,以发现设计上的错误或验证系 ...

最新文章

  1. new hashmap 初始大小_害怕面试被问HashMap?这一篇就搞定了
  2. wordvba编程代码大全_这几本基础编程书籍一定要看
  3. vue_过滤器_note
  4. 方法:如何解决NetShareEnum返回ERROR_NO_UNICODE_TRANSLATION(1113)的问题
  5. Qt控件背景图片自适应
  6. GMS 地下水数值模拟
  7. bootcamp空间不足_Bootcamp安装WinXP补丁时C盘空间不足怎么办?教程一览
  8. 交换机TFTP配置备份
  9. 第11章 Docker 中 Gitlab 的安装与配置
  10. 随机森林原始论文_2020年还需要阅读的10篇人工智能论文(附链接)
  11. 基于华三交换机,限制其他网段的IP访问
  12. linux link/symlink/unlink 硬连接和软连接介绍
  13. 在未来时空中沉浸探索,体验引领时代的建筑节能展馆
  14. uni-app 对接第三方h5
  15. vue兼容IE11浏览器空白页等一系列问题之踩坑全过程
  16. ArcGIS+百度地图API:制作杭州市边界shp文件
  17. 《灵飞经5·龙生九子》第二十四章 九王朝阙 上
  18. 安卓逆向 AndroidManifest.xml 编辑 解码与编码工具
  19. C# 利用PrintDocument定制打印单据
  20. 爬虫之 json 数据处理

热门文章

  1. linux查看oracle的sga设置,Oracle基础教程之设置系统全局区SGA命令
  2. Android源码设计模式分析项目
  3. matlab怎么实现循环,matlab怎么实现直到型循环
  4. dp线长什么样子_怎么样选择好的DP线?
  5. python37.dll可能与您正在运行_win7系统提示模块可能与您正在运行的windows版本不兼容如何解决...
  6. mysql导入frm文件_MySQL备份文件.ibd、.frm、.MYD、.MYI的恢复教程
  7. matlab分类器设计,简单分类器的MATLAB实现.doc
  8. linux 连接文件,Linux 链接文件
  9. openstack的云主机相关命令
  10. Ansible之roles(角色)详解