按照流程一路排查下去,發現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,有一...