You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调试解决PHP、Laravel、Shopware并发请求导致的死锁问题

嵌套API调用并发死锁问题调试求助

架构配置

  • 面向客户端的Laravel项目
  • 内部Shopware 6项目

Laravel通过REST API对外提供服务,部分API请求会通过Guzzle内部调用Shopware获取客户或店铺信息,单请求/低并发场景下一切正常,但多并发请求时会出现失效问题。

问题现象

当多个店铺相关API请求同时发起时,Shopware无法及时收到Laravel的内部调用。这些内部请求会被延迟到Laravel请求因超时失败后才被Shopware处理,此时Shopware完成请求返回响应,但Laravel已经不再监听,完全拿不到结果。

具体时间线:

  1. 多个外部请求到达Laravel
  2. Laravel开始处理这些请求
  3. Laravel向Shopware发起内部API请求
  4. Laravel因等待超时停止监听内部请求的响应
  5. Laravel向外部返回错误响应
  6. Shopware才开始处理之前被延迟的内部请求
  7. Shopware完成请求,但Laravel已无监听,响应完全作废

假设推测

Laravel的外部请求占用了所有可用的并发连接资源,导致内部请求无法被发送到Shopware,形成死锁:外部请求等待内部请求的响应,而内部请求则等待外部请求释放连接资源才能被处理。

思考分析

已排除锁机制问题:只有在多并发嵌套调用时才会出现异常,少量请求完全正常;而且Laravel请求超时前,Shopware的index.php首行代码都没有被执行过。推测是系统并发连接数达到上限,内部请求被排队,直到外部请求释放连接后才会被处理,但目前无法验证这个猜测。

已尝试的解决方案

  1. 调整Apache的mpm_prefork_module参数,提升并发配置:
<IfModule mpm_prefork_module>
  StartServers    50
  MinSpareServers 50
  MaxSpareServers 150
  MaxRequestWorkers       150
  MaxConnectionsPerChild  5000
</IfModule>

结果:没有任何改善

  1. 将Laravel和Shopware的数据库分离到不同实例(Laravel用MySQL5,Shopware用MySQL8),规避数据库锁带来的影响
    结果:没有任何改善

环境信息

  • macOS Ventura
  • MAMP Pro 6.6
  • Apache 2.4.46
  • MySQL 5.7.34

求助需求

希望得到调试及解决该并发死锁问题的具体建议。

内容的提问来源于stack exchange,提问作者zZeepo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:12:39