gpt4 book ai didi

php并发请求卡住了?

转载 作者:行者123 更新时间:2023-12-02 05:31:49 25 4
gpt4 key购买 nike

我有一个 PHP 应用程序运行一个报告并在 90 秒内向 SQL 服务器发出大约 100 万个 SQL 查询。在此期间,没有其他人可以使用此基于 Web 的应用程序 - 鸡蛋计时器正在滚动,但在报告超时或完成之前不会加载任何内容。我在一个只有我自己的隔离环境中测试了这个问题,在浏览器中运行报告,然后从其他浏览器窗口到这个应用程序站点的任何操作都挂起。

关于测试环境的一些细节:

Windows 2008 R2 x64 - IIS 7.5 - PHP 5.3.8 via FastCGI 
Windows 2008 R2 x64 - SQL Server 2008 R2 x64

IIS 中的 FastCGI 设置:

Instance MaxRequests = 200
Max Instances = 16
Activity Timeout = 70
Idle Timeout = 300
Queue Length = 1000
Rapid Fails PerMin = 10
Request Timeout = 90

每个 SQL 请求在 SQL 服务器端的完成时间少于 60 毫秒。 Web服务器和SQL服务器的CPU负载均低于10%。 Web 服务器有 16GB RAM,运行报告时大约有 60% 的 RAM 可用。

看来,PHP 向 SQL 服务器发出了太多请求,并且变得太忙而无法处理其他请求。如果是这种情况,那么应该有一些我可以调整的东西让 PHP 处理更多的并发请求。

有人知道吗?请帮忙!

最佳答案

我只是在黑暗中刺探并假设这是由于 session 锁定造成的。

当您使用 PHP 附带的标准 session 处理程序时,它会确保您的 session 文件不会因在脚本执行过程中使用(建议)写锁而损坏(除非 session_write_close() 较早被调用)。

尝试访问相同 session 的其他脚本(您的浏览器将传递相同的 cookie 值)将等待锁定被释放,只要它需要。

您可以通过使用两个完全不同的浏览器来模拟两个用户(一个运行报告,另一个访问网站)来验证这一点。如果可行,您可以肯定这是由于 session 锁定造成的。

这应该不是问题,因为您会知道何时运行报告,但如果这仍然会导致问题,您可以考虑两件事:

  1. 不要为报告脚本启动 session (但这也意味着未经授权的用户可能会尝试运行您的报告脚本)
  2. 在繁重的工作开始前关闭 session ,方法是在验证用户身份后使用 session_write_close()

关于php并发请求卡住了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12266559/

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