前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何简单计算PHP网站是否已经最高负载

如何简单计算PHP网站是否已经最高负载

作者头像
沈唁
发布2018-05-24 15:48:43
1.5K0
发布2018-05-24 15:48:43
举报
文章被收录于专栏:沈唁志沈唁志

你的项目最大能承受多少请求

经常见到有人问:我的项目出现了 XXX 的错误(如崩溃,502)等等,是不是机器撑不住了?是不是该做负载均衡了?是不是需要优化 php-fpm?如果我根据他的问题再深一步问,几乎都对自己的项目到底能支撑多大的负载没什么概念。不能定位问题又怎么能解决问题呢?现在说一下怎么简单计算你的项目最大能支撑的访问(以 nginx+php-fpm 为例)。

常见单位
  • qps:每秒请求数(一秒内多少次请求)
  • rpm:每分钟请求数(一分钟内承受多少次请求)

公式

项目最大负载量(假设单位是 qps) = php-fpm 进程数 * (1 / 你的项目单次请求耗时,单位秒)

公式不难理解, 1 / 你的项目单次请求耗时 就是一个进程每秒能处理多少次请求,再乘以这台机器的最大 fpm 进程数就是这台机器每秒能处理多少次请求。(当然这是理想情况下,不过用来判断大致的负载情况够了)

如何知道机器 php-fpm 进程数

首先我们需要查看 php-fpm 的配置文件,需要查看以下几个参数。

pm、pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers。

  • pm:表示 php-fpm 使用什么参数运行,这里有两个值可以选择,就是 static(静态)或者 dynamic(动态)。静态表示 php-fpm 的进程常驻,这样就省去了高峰时进程不够需要再 fork 的时间。动态表示空闲期间会回收一些进程,最小可以减小到 min_spare_servers 以节约内存开销。
  • pm.max_children:静态方式下开启的 php-fpm 进程数量
  • pm.start_servers:动态方式下的起始 php-fpm 进程数量
  • pm.min_spare_servers:动态方式下的最小 php-fpm 进程数
  • pm.max_spare_servers:动态方式下的最大 php-fpm 进程数量

因此如果你的机器设置为静态,那么 php-fpm 进程数取 pm.max_children 计算就可以了。

如果你的机器设置为动态,那么 php-fpm 进程数取 pm.max_spare_servers 进行计算(计算最大负载当然取最大值了)。

如何知道我的项目单次请求耗时

这个计算的方法有很多,而且只能取平均值,因为不同的访问肯定耗时也不同,算不出十分精确地结果。参考工具可以用 xdebug+Webgrind,或者 XHProf。用这些工具算出你的项目单次运行大概需要多少 ms。这里计算时需要注意的地方是,比如你的项目有两个 url,url1 访问的次数是 url2 的三倍,url1 访问的平均时间是 15ms,url2 访问的平均时间是 5ms,那么你的项目平均访问时间应该是(15*0.75+5*0.25)/2=12.5ms。

结论

把以上的两个数代入到公式中,就能算出 qps 了,然后你可以分析峰值时的 nginx 日志,取一分钟看看总共有多少次请求(记得排除纯静态请求)。然后把我们计算的 qps * 60,看看是否比 nginx 日志大,如果确实比 nginx 大或者数目接近的话,证明确实是承受不了这么大的负载,解决方案在内存足够的情况下可以增加 php-fpm 的最大进程数,内存不够就需要加机器。如果 qps * 60 小于 nginx 日志的话,那么我们就需要看看是不是一些其他的资源限制了访问,比如 cpu,甚至 mysql 等等。

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:如何简单计算PHP网站是否已经最高负载

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你的项目最大能承受多少请求
    • 常见单位
    • 公式
    • 如何知道机器 php-fpm 进程数
    • 如何知道我的项目单次请求耗时
    • 结论
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档