php執行后報502,無錯誤提示的排查和解決

文章目錄

  • 一、闡述問題
  • 二、開始排查
    • 1.執行代碼展示
    • 2.PHP層面排查問題
    • 3.系統層面排查問題
      • 1. 分析系統日志
      • 2. core dump 分析
        • 2.1 core dump 是什么
        • 2.2 core dump 配置 并 生成 core 文件
        • 2.3 gdb 解析 core 文件
    • 4. 問題解決
  • 三、贈送內容
  • 四、總結

一、闡述問題

這個問題花了我起碼10個小時,必須得總結一下。

問題是這樣的,我在laravel 里面連接了一下sqlserver的數據庫,然后頁面直接就報502。去項目下的日志看,也沒有任何報錯。

二、開始排查

1.執行代碼展示

$serverName = '192.168.116.180\messyna'; //數據庫服務器地址
$connectionInfo = array("UID" => "mssa", "PWD" => "12345677", "Database" => 'test111');
$conn = sqlsrv_connect($serverName, $connectionInfo);
if($conn == FALSE){echo "連接失敗!";var_dump(sqlsrv_errors());exit;
}else{echo "鏈接成功";
}
echo "連接成功!";
exit;

這就是普通的連接sqlserver的代碼。只要執行這段代碼,直接就報 502!

Sqlserver的配置肯定沒問題,前一天還是可以執行的。而且有其他的機器能執行。

2.PHP層面排查問題

經過一段時間的亂碰,覺得還是看一下php-fpm的錯誤日志。

找到php-fpm的配置,找到錯誤日志路徑。

在這里插入圖片描述

終于看到報錯信息:
在這里插入圖片描述
deepseek的回答結果如下:

WARNING: [pool www] child 4542 exited on signal 11 (SIGSEGV) after 542.345727 seconds from start

  • 含義:www 進程池中的子進程 4542 在運行 542秒(約9分鐘) 后,因 信號 11(SIGSEGV) 崩潰退出。

    • SIGSEGV(分段錯誤):表示進程試圖訪問非法內存地址,常見原因包括:

      • PHP 擴展(如 Redis、Opcache 等)存在 bug。

      • PHP 代碼中存在內存溢出(如無限遞歸、大數組操作)。

      • 服務器內存不足或配置錯誤(如 pm.max_children 設置過高)。

      • 硬件問題(如內存條故障,但概率較低)。

我的分析測試:

  1. 硬件問題 可以排除,最近我都沒動過什么配置之類的。而且是虛擬主機,不可能。
  2. PHP 代碼中存在內存溢出 可以排除。就一個連接,能有什么溢出
  3. 內存不足 ,我將虛擬主機加大了2G內存, 結果還是502,說明不是內存問題。
  4. 擴展問題 ,感覺有點像
    - mysql的連接是正常的,就sqlserver 不正常
    - 重新安裝 pdo_sqlsrv 和 sqlsrv 兩個擴展,結果依然是502,跟擴展沒關系
  5. 重裝php8.2 ,結果測試,還是502

經過以上的測試,差不多可以知道,應該不是php的問題。應該是centos系統的問題。不管怎么測試。指向的都是 分段錯誤

3.系統層面排查問題

1. 分析系統日志

dmesg | grep php 在系統日志中篩選與 “php” 相關的信息

在這里插入圖片描述

取一條日志出來看看:

[65062.298372] php-fpm[1288]: segfault at 0 ip 00007fc555571fd6 sp 00007fff26f52bb8 error 4 in libc-2.17.so[7fc555433000+1c4000]

經過查資料分析:

這個錯誤提示表明 PHP-FPM 進程發生了段錯誤(segfault),這通常是由內存訪問違規引起的嚴重錯誤。

segfault at 0:程序嘗試訪問內存地址 0x0(空指針),這通常是由于未初始化的指針或內存損壞導致的。

libc-2.17.so:錯誤發生在 C 標準庫中,這是系統核心組件,可能由以下原因觸發:

  • PHP 擴展與 libc 不兼容。
  • PHP 本身存在內存管理漏洞。
  • 系統庫文件損壞。

error 4:表示 SEGV_ACCERR(訪問權限錯誤),即程序嘗試訪問沒有權限的內存區域。

總體上來說,應該是讀取內存地址無效。但是沒有具體的信息,過于籠統,還需要進一步的調試。

又經過了漫長的查資料,終于查到了一點方向,core dump

2. core dump 分析

2.1 core dump 是什么
  1. core dump 是什么?
    core dump(核心轉儲) 是操作系統在程序異常終止(如崩潰、段錯誤、非法指令等)時,將進程當時的內存狀態、寄存器內容、程序計數器值等關鍵信息寫入到一個文件中的過程。這個文件被稱為 core 文件,它本質上是進程運行時狀態的 “快照”。

  2. core dump 的作用

    • 調試程序錯誤
      開發人員可以通過分析 core 文件,定位程序崩潰的具體位置(如哪行代碼引發錯誤)、變量值、函數調用棧等信息,從而快速排查內存越界、空指針引用、段錯誤等問題。

    • 系統故障分析
      在服務器環境中,core dump 可用于分析長期運行的服務(如 Web 服務器、數據庫)突然崩潰的原因,避免問題反復出現。

    • 性能優化參考
      雖然 core dump 主要用于錯誤定位,但也能間接反映程序的內存使用模式,為性能優化提供線索。

  3. core dump 的觸發場景
    當程序遇到以下情況時,系統通常會生成 core dump:

    • 訪問非法內存地址(如空指針解引用、數組越界)
    • 執行非法指令(如除以 0、無效的 CPU 操作碼)
    • 收到無法處理的信號(如 SIGSEGV、SIGABRT)
    • 內存不足或被系統強制終止(如 OOM Killer 觸發)

正和我意,觸發場景正好能解決我的問題。

2.2 core dump 配置 并 生成 core 文件
  1. 設置 core 文件大小為無限制(unlimited):

    //臨時調試
    ulimit -c unlimited//調試完最后記得關閉 core dump
    ulimit -c 0
    
  2. 執行 php 代碼,報錯 502。 此時在項目的根目錄下,會生成一個 core 文件。

    在這里插入圖片描述

這幾個core 文件就記錄了 內存讀取失敗的相關情況,那接下來就是讀取這個core 文件了

2.3 gdb 解析 core 文件

GDB(GNU Debugger) 是 Linux/Unix 系統下最常用的 代碼調試工具,主要用于分析和修復程序崩潰、死鎖、內存泄漏等問題

1. 安裝 gdb

yum install gdb

2. 生成 GDB 回溯信息

gdb php core.2134
(gdb) bt full  # 獲取完整的堆棧回溯

3. 文件內容如下:

在這里插入圖片描述

4. 經過deepseek分析:

在這里插入圖片描述

4. 問題解決

根據 GDB 完整堆棧回溯信息,問題的根源已經很明顯了

OpenSSL庫版本沖突 ,有兩個庫版本,ODBC驅動嘗試初始化SSL連接時,不同版本的OpenSSL庫發生沖突,導致內存訪問異常

在這里插入圖片描述

確實是有兩個,而且那個還是前一天我安裝 python 時候產生的。

直接刪除openssl111,因為openssl111 安裝前,一直是正常的。肯定是 openssl111 安裝了,導致出問題

刪除后,執行代碼,一切正常。終于解決

三、贈送內容

以下是監控 PHP-FPM 主進程,然后程序崩潰時,可以查看具體情況

 # 附加到 PHP-FPM 主進程
sudo gdb -p $(pgrep -o php-fpm)# 當崩潰發生時,輸入以下命令抓取堆棧
(gdb) bt full             # 查看完整調用棧
(gdb) info threads        # 查看所有線程狀態
(gdb) quit                # 退出

四、總結

整個過程非常艱辛,由什么問題都不知道一直到解決,查了很多資料。走了很多的彎路。

一些工具都是第一次使, core dump,gdb 以前基本上沒使用過。

需要持續的學習,持續的踩坑,才能到達最終的彼岸 =》保安

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86058.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86058.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 核心知識點解析

最近正在復習Java八股,所以會將一些熱門的八股問題,結合ai與自身理解寫成博客便于記憶 InnoDB 和 MyISAM 的區別 特性InnoDBMyISAM事務支持支持ACID事務不支持事務鎖機制行級鎖表級鎖外鍵支持支持不支持崩潰恢復有crash-safe能力無存儲結構聚簇索引非…

CppCon 2015 學習:Comparison is not simple, but it can be simpler.

What is comparison? 這段文字是從計算機科學、編譯器設計或系統優化的角度來定義和評價“比較(comparison)”這個操作: 1. Pervasive(無處不在) 比較操作在編程中極為常見,存在于: 分支語句&…

RocketMQ入門5.3.2版本(基于java、SpringBoot操作)

一、RocketMQ概述 RocketMQ是一款由阿里巴巴于2012年開源的分布式消息中間件,旨在提供高吞吐量、高可靠性的消息傳遞服務。主要特點有: 靈活的可擴展性 海量消息堆積能力 支持順序消息 支持多種消息過濾方式 支持事務消息 支持回溯消費 支持延時消…

VR線上展廳特點分析與優勢

VR線上展廳:特點、優勢與實際應用 VR線上展廳,作為虛擬現實(VR)技術在展示行業的創新應用,正逐步改變著傳統的展覽方式。通過模擬真實的物理環境,為參觀者提供身臨其境的展覽體驗,成為展示行業…

QT 5.9.2+VTK8.0實現等高線繪制

項目下載鏈接:QT5.9.2VTK8.0實現等高線繪制資源-CSDN文庫 示例如下: 主要代碼如下: #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkPo…

MySQL:忘記root密碼

修改配置文件: vi /etc/my.cnf## 修改配置文件 ##[mysqld] skip - grant - tables## 重啟 ##/etc/init.d/mysqld restart ## 或service mysqld restart## 登錄mysqld -u root -p -h 127.0.0.1USE mysql; UPDATE user SET Password password(123456) WHERE User r…

JSP、HTML和Tomcat

9x9上三角乘法表 乘法表的實現 <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><title>99 上三角乘法表</title><style>body {font-family: monospace;padding…

常用枚舉技巧:基礎(一)

文章目錄 常用枚舉技巧&#xff1a;基礎&#xff08;一&#xff09;LeetCode 1. 兩數之和思路Golang 代碼 LeetCode 2441. 與對應負數同時存在的最大正整數思路Golang 代碼 LeetCode 1512. 好數對的數目思路Golang 代碼 LeetCode 2001. 可互換矩形的對數思路Golang 代碼 LeetCo…

從混亂到秩序:探索管理系統如何徹底改變工作流程

內容摘要 在許多企業與組織中&#xff0c;工作流程混亂是阻礙發展的“絆腳石”。員工們常常被繁瑣的步驟、模糊的職責和溝通不暢等問題搞得焦頭爛額&#xff0c;工作效率低下&#xff0c;錯誤頻發。而與之形成鮮明對比的是&#xff0c;一些引入了先進管理系統的團隊&#xff0…

使用SSE解決獲取狀態不一致問題

使用SSE解決獲取狀態不一致問題 1. 問題描述2. SSE介紹2.1 SSE 的工作原理2.2 SSE 的事件格式規范2.3 SSE與其他技術對比2.4 SSE 的優缺點 3. 實戰代碼 1. 問題描述 目前做的一個功能是上傳多個文件&#xff0c;這個上傳文件是整體功能的一部分&#xff0c;文件在上傳的過程中…

華為×小鵬戰略合作:破局智能駕駛深水區的商業邏輯深度解析

當中國智能電動車競爭進入下半場&#xff0c;頭部玩家的合縱連橫正在重構產業格局。華為與小鵬汽車近日官宣的“戰略合作”&#xff0c;表面看是技術互補的常規操作&#xff0c;實則暗藏改寫行業游戲規則的深層商業邏輯。 一、技術破壁&#xff1a;從“單點突破”到“全棧協同”…

Tailwind CSS 實戰:基于 Kooboo 構建 AI 對話框頁面(六):圖片上傳交互功能

在 《Tailwind CSS 實戰&#xff1a;基于 Kooboo 構建 AI 對話框頁面&#xff08;五&#xff09;》 中&#xff0c;完成了語音交互功能的優化。本文作為該系列教程的第六篇&#xff0c;將聚焦于圖片上傳功能的開發。通過集成圖片上傳與預覽能力&#xff0c;我們將進一步完善 AI…

40. 自動化異步測試開發之編寫異步業務函數、測試函數和測試類(類寫法)

40. 自動化異步測試開發之編寫異步業務函數、測試函數和測試類&#xff08;類寫法&#xff09; 一、類結構設計解析 1.1 基類設計 class Base:async_driver None # &#x1f697; 存儲瀏覽器驅動實例async def get(self, url: str http://secure.smartbearsoftware.com/.…

面向開發者的提示詞工程④——文本推斷(Inferring)

文章目錄 前言一、情感&#xff08;正向/負向&#xff09;二、識別情感類型三、識別憤怒四、從客戶評論中提取產品和公司名稱五、一次完成多項任務 前言 面向開發者的提示詞工程——導讀 在這節課中&#xff0c;你將從產品評論和新聞文章中推斷情感和主題。 舉了個商品評論的例…

java day15 (數據庫)

進入數據庫的學習 DB 因為數據太多了&#xff0c;方便統一管理的軟件 操作就不用改代碼了&#xff0c;直接改數據庫則可&#xff1b; 命令就是sql語句 這些都是關系型數據庫&#xff0c;sql可以控制全部&#xff0c;至于具體的環境我以前就有安裝過了&#xff1b; 理解&am…

國標GB28181設備管理軟件EasyGBS遠程視頻監控方案助力高效安全運營

一、方案背景? 在商業快速擴張的背景下&#xff0c;連鎖店門店數量激增&#xff0c;分布范圍廣。但傳統人工巡檢、電話匯報等管理方式效率低下&#xff0c;存在信息滯后、管理盲區&#xff0c;難以掌握店鋪運營情況&#xff0c;影響企業效率與安全。網絡遠程視頻監控系統可有…

Python 字典(dict)的高級用法與技巧

今天我們繼續深入講解 Python 字典的 高級用法與技巧&#xff0c;包括&#xff1a; defaultdict&#xff1a;帶默認值的字典Counter&#xff1a;快速統計工具字典排序&#xff1a;按鍵或值排序合并字典&#xff08;傳統方式和 Python 3.9 新語法&#xff09;嵌套字典的安全訪問…

動靜態庫的使用(Linux)

1.庫 通俗來說&#xff0c;庫就是現有的&#xff0c;可復用的代碼&#xff0c;例如&#xff1a;在C/C語言編譯時&#xff0c;就需要依賴相關的C/C標準庫。本質上來說庫是一種可執行代碼的二進制形式&#xff0c;可以被操作系統載入內存執行。通常我們可以在windows下看到一些后…

R2ec: 構建具有推理能力的大型推薦模型,顯著提示推薦系統性能!!

摘要&#xff1a;大型推薦模型通過編碼或項目生成將大型語言模型&#xff08;LLMs&#xff09;擴展為強大的推薦工具&#xff0c;而近期在LLM推理方面的突破也同步激發了在推薦領域探索推理的動機。目前的研究通常將LLMs定位為外部推理模塊&#xff0c;以提供輔助性思考來增強傳…

【Java后端基礎 005】ThreadLocal-線程數據共享和安全

&#x1f4da;博客主頁&#xff1a;代碼探秘者 ?專欄&#xff1a;文章正在持續更新ing… ?C語言/C&#xff1a;C&#xff08;詳細版&#xff09; 數據結構&#xff09; 十大排序算法 ?Java基礎&#xff1a;JavaSE基礎 面向對象大合集 JavaSE進階 Java版數據結構JDK新特性…