用gdb除錯找出nginx崩潰的原因

2021-06-20 10:48:30 字數 1073 閱讀 3220

按照流程一路排查下去,發現nginx訪問日誌裡面有大量的http 504 err code

tail -f /var/log/messages

同時出現大量的類似錯誤資訊

nginx[1234]: segfault at 0000000000000008 rip 000000000043edf8 rsp 00007fff34a21fa0 error 4

出現segfault那只能用gdb了,這也是linux做server的好處了,換成微軟平台,無比的麻煩

解決問題分成4步:

配置系統生成coredump檔案,很簡單

ulimit -a

第一行就是關於core file的設定,預設是不生成coredump檔案的,執行ulimit -c 1024即可,記得除錯完成之後要用ulimit -c 0關閉,不然你的硬碟很快會被填滿

gdb除錯,需要debug版本的nginx才能定位到源**,於是需要重新編譯乙份nginx

首先把現有的nginx bin目錄和conf目錄都備份

然後列印nginx的原始編譯選項

/opt/nginx/sbin/nginx -v

在這個基礎上加上 --with-debug,重新make乙份即可

在$$/objs 目錄中找到編譯好的nginx ,複製到你的nginx執行目錄,切記不要make install ,因為這樣會覆蓋掉你的nginx.conf檔案

重新執行nginx,等待core.***檔案生成。一般是在當前目錄下生成

用gdb載入 coredump 檔案

gdb --core=core.***

gdb> where

很容易就找到了nginx segfault的原因:我們自己寫的乙個nginx modules裡面,對某些引數沒有做邊界檢查,但外部環境變化之後,訪問空指標了

收尾:

gdb除錯ros node崩潰位址

catkin make dcmake build type debugrosrun prefix gdb ex run args package node thread debugging using libthread db enabled using host libthread db libr...

Nginx學習之十四 GDB除錯Nginx初試

本文的測試環境 win7 虛擬機器vmwarevmware workstation full 7.1.4 385536 ubuntu12.04 nginx 1.4.0 要想有效的研究nginx原始碼,必須要動手除錯,gdb就是有用的利器。下面簡要介紹用gdb除錯nginx的乙個小例子。本文完成了這樣...

Nginx學習之十四 GDB除錯Nginx初試

win7 虛擬機器vmwarevmware workstation full 7.1.4 385536 ubuntu12.04 nginx 1.4.0 要想有效的研究nginx原始碼,必須要動手除錯,gdb就是有用的利器。下面簡要介紹用gdb除錯nginx的乙個小例子。關於gdb除錯nginx,有一...