首页 > 编程语言 >项目环境出现PHP 502 Bad Gateway 问题排查

项目环境出现PHP 502 Bad Gateway 问题排查

时间:2024-07-26 16:06:25浏览次数:9  
标签:rt PHP st Bad sa NULL 502 SA php

一、现象

昨天运维人员被告知,在升级完客户集群环境后,访问管理页面偶尔会报 502 Bad Gateway。登录客户环境,发现只要请求分发到 node2,就会报 502,开始解决问题...

 

二、排查思路

1、看到 502 第一时间想到的应该是 php-fpm 出问题了,先看下 nginx 日志,连接被对端关闭,说明 php-fpm 进程提前退出了,那是什么原因导致 php-fpm 退出了呢?

 

2、查看 php-fpm 日志,有很多 warning 级别日志,而且都是重复的退出、重建。网上有很多文章说调整 php-fpm 执行时间之类,作用不大,如果报 504 可以考虑适当调整执行时间参数。这时修改 php-fpm 为如下配置,保存重启 php-fpm

pm.max_children = 1
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 1

 

 3、使用 strace 命令追踪 php-fpm worker 进程

[mlcdm@node2 ~]$ sudo strace -p 9277
strace: Process 9277 attached
accept(5, {sa_family=AF_INET, sin_port=htons(46636), sin_addr=inet_addr("127.0.0.1")}, [112->16]) = 3
poll([{fd=3, events=POLLIN}], 1, 5000)  = 1 ([{fd=3, revents=POLLIN}])
times({tms_utime=0, tms_stime=0, tms_cutime=0, tms_cstime=0}) = 8082094440
read(3, "\1\1\0\1\0\10\0\0", 8)         = 8
read(3, "\0\1\0\0\0\0\0\0", 8)          = 8
read(3, "\1\4\0\1\3a\7\0", 8)           = 8
read(3, "\0174SCRIPT_FILENAME/var/www/mlclou"..., 872) = 872
read(3, "\1\4\0\1\0\0\0\0", 8)          = 8
lstat("/var/www/mlcloud/public//index.php/api/appfile/pluto", 0x7ffd136a20b0) = -1 ENOTDIR (Not a directory)
stat("/var/www/mlcloud/public//index.php/api/appfile", 0x7ffd136a44a0) = -1 ENOTDIR (Not a directory)
stat("/var/www/mlcloud/public//index.php/api", 0x7ffd136a44a0) = -1 ENOTDIR (Not a directory)
stat("/var/www/mlcloud/public//index.php", {st_mode=S_IFREG|0666, st_size=1604, ...}) = 0
read(3, "\1\5\0\1\0\275\3\0", 8)        = 8
read(3, "method=dbf.task.offlinetimeoutta"..., 189) = 189
read(3, "\0\0\0", 3)                    = 3
stat("/var/www/mlcloud/public/.user.ini", 0x7ffd136a2fc0) = -1 ENOENT (No such file or directory)
rt_sigaction(SIGPROF, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGPROF, {sa_handler=0x9d26a0, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc5c4ae3630}, NULL, 8) = 0
rt_sigaction(SIGHUP, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=0}, 8) = 0
rt_sigaction(SIGHUP, {sa_handler=0x9d26a0, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc5c4ae3630}, NULL, 8) = 0
rt_sigaction(SIGINT, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fc5c4ae3630}, 8) = 0
rt_sigaction(SIGINT, {sa_handler=0x9d26a0, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc5c4ae3630}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {sa_handler=0xa3ac20, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7fc5c4ae3630}, 8) = 0
rt_sigaction(SIGQUIT, {sa_handler=0x9d26a0, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc5c4ae3630}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fc5c4ae3630}, 8) = 0
rt_sigaction(SIGTERM, {sa_handler=0x9d26a0, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc5c4ae3630}, NULL, 8) = 0
rt_sigaction(SIGUSR1, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fc5c4ae3630}, 8) = 0
rt_sigaction(SIGUSR1, {sa_handler=0x9d26a0, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc5c4ae3630}, NULL, 8) = 0
rt_sigaction(SIGUSR2, NULL, {sa_handler=SIG_DFL, sa_mask=[], sa_flags=SA_RESTORER, sa_restorer=0x7fc5c4ae3630}, 8) = 0
rt_sigaction(SIGUSR2, {sa_handler=0x9d26a0, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc5c4ae3630}, NULL, 8) = 0
setitimer(ITIMER_PROF, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=60, tv_usec=0}}, NULL) = 0
rt_sigaction(SIGPROF, {sa_handler=0x9d26a0, sa_mask=~[ILL TRAP ABRT BUS FPE KILL SEGV CONT STOP TSTP TTIN TTOU SYS RTMIN RT_1], sa_flags=SA_RESTORER|SA_SIGINFO, sa_restorer=0x7fc5c4ae3630}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0
lstat("/var/www/mlcloud/public//index.php", {st_mode=S_IFREG|0666, st_size=1604, ...}) = 0
lstat("/var/www/mlcloud/public", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
lstat("/var/www/mlcloud", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat("/var/www", {st_mode=S_IFDIR|0775, st_size=4096, ...}) = 0
lstat("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/var/www/mlcloud/public/index.php", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0666, st_size=1604, ...}) = 0
getcwd("/home/mlcdm", 4095)             = 12
chdir("/var/www/mlcloud/public/")       = 0
setitimer(ITIMER_PROF, {it_interval={tv_sec=0, tv_usec=0}, it_value={tv_sec=30, tv_usec=0}}, NULL) = 0
stat("/etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned", 0x7ffd136a1470) = -1 ENOENT (No such file or directory)
open("/var/www/mlcloud/public//index.php", O_RDONLY) = 6
fstat(6, {st_mode=S_IFREG|0666, st_size=1604, ...}) = 0
fstat(6, {st_mode=S_IFREG|0666, st_size=1604, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc5c5145000
read(6, "<?php\n\n// Valid PHP Version?\n$mi"..., 4096) = 1604
close(6)                                = 0
munmap(0x7fc5c5145000, 4096)            = 0
stat("/tmp", {st_mode=S_IFDIR|0700, st_size=61440, ...}) = 0
open("/tmp/tmpftRfMVP", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} ---
+++ killed by SIGSEGV +++

找到问题了,php-fpm 在 /tmp/ 目录创建临时文件失败,导致进程退出,页面响应 502

 

4、看下 /tmp/ 目录 属主及权限,OMG,运维部署时忘记修改 node2 /tmp/ 目录权限了,因为 php-fpm 进程属主是 www,导致无法在此目录写文件

[mlcdm@node2 ~]$ stat /tmp/
  File: ‘/tmp/’
  Size: 61440           Blocks: 128        IO Block: 4096   directory
Device: fd01h/64769d    Inode: 524291      Links: 12
Access: (0700/drwx------)  Uid: ( 1003/   mlcdm)   Gid: ( 1003/   mlcdm)
Access: 2024-07-24 15:00:24.774052000 +0800
Modify: 2024-07-24 15:16:39.705052000 +0800
Change: 2024-07-24 15:16:39.705052000 +0800
 Birth: -

 

5、修改 /tmp/ 目录权限,这里为什么是 1777 ,是因为需要让 /tmp/ 保持粘滞位特权,表示任何用户都可以在 tmp 目录创建文件,但是只能由文件的创建者或 root 才能删除,防止文件被意外删除导致服务异常

[mlcdm@node2 ~]$ sudo chmod 1777 /tmp/

 

三、总结

1、当页面响应 502 时,多半是网关程序(CGI)异常,比如服务未启动,异常退出等原因导致的,可着重排查CGI程序
2、strace 命令功能强大,对了解进程具体做了哪些系统调用很有帮助
3、linux 用户权限是遇到问题时第一个想到一个点,可以参考鸟哥的私房菜用户权限章节

 

标签:rt,PHP,st,Bad,sa,NULL,502,SA,php
From: https://www.cnblogs.com/gentsir/p/18325576

相关文章

  • PHP上海小区精神文明建设协管小程序22444(案例分析)
    目  录摘 要1绪论1.1研究背景1.2国内外研究现状1.3论文结构与章节安排2 上海小区精神文明建设协管小程序系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3社会可行性分析2.2系统流程分析2.2.1 数据流程3.3.2 业务流......
  • IT实战课堂计算机毕业设计毕设项目精品PHP实现的网络电商平台设计与实现
    项目功能简介:《[含文档+PPT+源码等]精品PHP实现的网络电商平台设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!软件开发环境及开发工具:操作......
  • 一文教你如何利用ThinkPHP6打造高效SEO优化的网站!
    在今天的互联网时代,网站的SEO(SearchEngineOptimization)优化已经成为了网站建设的一个重要环节。ThinkPHP6是一种基于PHP语言的开源Web应用框架,因其高效、安全、简洁等优势受到广泛的使用和推崇。本文将为大家介绍如何使用ThinkPHP6进行网站SEO优化。一、ThinkPHP6中SEO优化......
  • php--序列化与反序列化
    ......
  • php实现pdf转图片
    以下运行环境是Centos7第一,安装ImageMagick(作用,用于处理图片) 第二,安装 ImageMagick开发包(作用,使得可以通过php程序处理图片) 安装成功后开启imagick扩展 以下是简单的demo ......
  • 开源PHP大型商城购物系统 ShopXO 前端uniapp企业级B2C内置多种配色随意切换支持打包成
    开源PHP大型商城购物系统ShopXO前端uniapp企业级B2C内置多种配色随意切换支持打包成小程序开源PHP大型商城购物系统ShopXO前端uniapp企业级B2C内置多种配色随意切换支持打包成小程序ShopXO是一款基于ThinkPHP6框架完全开源的电商系统,容易扩展,具有强大的负载能力和稳定性业级......
  • SSM-网络课程系统-29230(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、APP
    SSM网络课程系统摘 要本论文主要论述了如何使用SSM框架开发一个网络课程系统,将严格按照软件开发流程进行各个阶段的工作,采用B/S架构Java技术,面向对象编程思想进行项目开发。在引言中,将论述网络课程系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统......
  • ThinkPHP一对一关联模型的运用(ORM)
    一、序言最近在写ThinkPHP关联模型的时候一些用法总忘,我就想通过写博客的方式复习和整理下一些用法。具体版本:topthink/framework:6.1.4topthink/think-orm:2.0.61 二、实例应用1、一对一关联1.1、我先设计了两张表,分别为用户表(user),用户扩展表(user_extend) 1.2、分别......
  • 微信小程序批量检测是否被封禁异常PHP代码
             ​      <?php//要检测的appid列表$appids=array('appid1','appid2','appid3');//使用实际的appid//循环调用接口检测小程序状态foreach($appidsas$appid){    $url='https://down.ychengsnsm.com/xcx/checkxcx.php?appid=......
  • 抖音短视频seo矩阵系统源码开发搭建私有化部署流程分享-----PHP+SaaS独立部署
      抖音seo源码优化逻辑抖音SEO是通过一系列的技术手段和优化策略来提升视频内容在抖音平台内的曝光率和排名。其中主要包括以下几个方面:1.关键词优化。通过对视频的标题、描述等元素的关键词进行优化,提高相关性和匹配度,让用户更容易搜索到相关视频。2.标签优化。在上传视......