当前位置: 首页 > article >正文

php CURL请求502

增加 pm.max_children 的值
  • 当前值为 50,如果并发请求较多,可能会耗尽子进程资源,导致 502。
  • 增加到 100 或更高(根据服务器内存和负载能力调整)。
2. 调整 request_terminate_timeout
  • 当前为 100 秒,适合大多数脚本。如果你的应用程序中某些脚本执行时间较长,可以进一步增加到 300 或更高。
3. 增加 listen.backlog
  • 当前值为 8192,通常已经足够高。如果并发流量特别大,可以再增加,例如 16384
4. 检查 pm 模式
  • 你的 pm 模式为 dynamic,适合多数情况。如果流量非常稳定,且波动不大,可以尝试改为 static 模式,设置一个固定数量的子进程(例如 pm.max_children = 100)。
5. 检查 listen 的权限
  • 当前 listen.mode = 0666,确保 Nginx 有权限访问 /tmp/php-cgi-74.sock
  • 如果有权限问题,修改为以下内容:
     

    listen.owner = www listen.group = www listen.mode = 0660

6. 优化日志配置
  • 检查 slowlog 是否有效,确保记录慢请求的日志,便于后续排查:

    request_slowlog_timeout = 10 slowlog = /www/server/php/74/var/log/slow.log

7. 增加 rlimit_filesrlimit_core
  • 允许更多文件描述符:
     

    rlimit_files = 65535 rlimit_core = 0

优化后的配置示例

[global]
pid = /www/server/php/74/var/run/php-fpm.pid
error_log = /www/server/php/74/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi-74.sock
listen.backlog = 16384
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0660
user = www
group = www

pm = dynamic
pm.max_children = 100        ; 增加最大子进程数量
pm.start_servers = 10        ; 启动时的进程数
pm.min_spare_servers = 10    ; 保持的最小空闲进程数
pm.max_spare_servers = 30    ; 保持的最大空闲进程数

pm.status_path = /phpfpm_74_status

request_terminate_timeout = 300
request_slowlog_timeout = 10
slowlog = /www/server/php/74/var/log/slow.log

rlimit_files = 65535
rlimit_core = 0
 

检查和排查步骤

1. 重启 PHP-FPM 和 Nginx

每次修改配置后重启服务:

 

service php-fpm-74 restart service nginx restart

2. 检查日志
  • PHP-FPM 错误日志

    tail -f /www/server/php/74/var/log/php-fpm.log

  • Nginx 错误日志

    tail -f /var/log/nginx/error.log

  • 慢请求日志: 如果启用了 slowlog,分析慢请求的脚本,优化这些脚本。
3. 测试并发

使用工具如 abwrk 模拟并发请求,测试是否可以正常响应:

ab -n 1000 -c 50 http://your-domain.com/

4. 系统资源监控

监控服务器的内存、CPU 和磁盘 I/O 使用情况,确认是否资源耗尽:

htop free -h

 


http://www.kler.cn/a/411416.html

相关文章:

  • 如何选择黑白相机和彩色相机
  • Matlab 深度学习 PINN测试与学习
  • STM32端口模拟编码器输入
  • 钉钉免登录接口
  • 自制Windows系统(十)
  • 【初阶数据结构和算法】leetcode刷题之设计循环队列
  • 能源电力企业安全数据内外网文件交换
  • Git——本地仓库链接并推送到多个远程仓库
  • 汽车网络安全渗透测试
  • 一个十字翻转小游戏
  • D80【 python 接口自动化学习】- python基础之HTTP
  • MyBatis框架介绍、部署及使用
  • 在Ubuntu2004中搭建基于ESP-IDF v5.1的ESP32-S3开发环境
  • ES索引模板操作
  • 模拟实现Bash
  • Dubbo 最基础的 RPC 应用(使用 ZooKeeper)
  • C++《模板进阶》
  • Linux 服务器安装 Docker - CentOS 9 (Stream)
  • Qt界面篇:QMessageBox高级用法
  • Java中的多线程
  • YOLOv8实战无人机视角目标检测
  • 网络——浏览器发送一个请求到收到响应经历了哪些步骤
  • react实现模拟chatGPT问答页
  • 春秋云境 CVE 复现
  • UE5 使用SlateViewer模版创建窗口(记录)
  • 人体特定吸收率 (SAR) 分布建模