gpt4 book ai didi

LAMP 服务器中的 PHP 请求平衡

转载 作者:可可西里 更新时间:2023-11-01 14:03:00 25 4
gpt4 key购买 nike

在 AWS 1.7GB 服务器中一次收到 2000 个请求。该应用程序正在尝试处理此问题,但以内存耗尽错误结束。我根据我所知和收集到的信息优化了 PHP 脚本和 MySQL 数据库。

所以这里我决定是

我想在服务器中处理 200 个请求,第一次拒绝 1800 个请求。下次会处理下一个200的请求,拒绝1600。这样我就可以处理所有的请求。

问题:1如何实现?

我计划像下面这样实现这个

  1. 如果 apache 进程数超过 120,我打算拒绝来自服务器的请求。

  2. 要根据我计划拒绝请求的情况监视服务器 RAM 可用内存。

需要的建议:哪个是实现的最佳选择?

如果还有其他建议也欢迎。

问题2如何使用PHP获取apache进程数?

问题3PHP如何获取空闲RAM内存大小?

注意:拒绝请求不是问题我可以重新回来。如果我拒绝来自服务器的请求,那么就没有问题,服务器是正常的。一旦我处理了这 2000 个请求,就没有问题了,因为我总是得到更少的负载。

最佳答案

首先,我建议不要使用系统调用,尤其是当您有那么多请求时。运行外部进程可能会导致很大的性能问题,因为在您的情况下没有。进程数/内存使用变化迅速(你说的是一次 2000 个请求),你不能使用 cronjob 来缓存这些值(即使你每秒运行一个 cron,你也不能确定这些值是 100% 真实的) .您可以获得脚本的内存使用情况,近似编号。您一次可以处理的流程的数量,并且应该这样做。

现在,据我所知,您想按特定顺序处理请求:处理请求 1-200,然后是 201-400,依此类推?如果是这种情况,您将需要跟踪已处理的请求。

实现此目的的一个简单方法是在数据库中保留一个请求队列 - 如果您可以使用 memcached 或类似的东西,那就更好了:

  • 每次收到请求时,您都会检查队列并确保您没有超过 200 个事件请求;
  • 下一步是检查请求是否应该运行(这意味着您可以唯一地标识每个请求,即通过检查 GET/POST 中的某些值)- 这使您可以确保如果请求 #200 已被处理,让我们在最后一分钟说,您将忽略它并允许请求 #201 运行;
  • 如果请求通过,则将其添加到队列中并标记为已完成/完成后将其从队列中删除;

但是,如果请求顺序对您来说无关紧要,您可以只保留请求计数而不是请求队列,并确保您永远不会超过某个限制。

关于LAMP 服务器中的 PHP 请求平衡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21449862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com