深入理解Nginx之調試優化技巧


在開發過程中,我們經常會碰到段錯誤等異常,這時我們需要有相應的機制來進行調試,特別是服務提供在線上時,面對大量的日志信息,合理的調試處理機制對於開發來說是一件非常重要的事情,幸好Nginx本身提供了很好的調試機制,主要包括以下幾個方面。

1、Core文件 默認情況下,編譯Nginx是帶上-g選項

這就意味着我們可以使用gdb進行調試,以跟蹤具體的錯誤原因。

使用Nginx自身帶有的兩個配置選擇就可以輕松配置,使它在Crash的時候產生Core文件。

worker_rlimit_core  50M;
working_directory   /tmp/;

其中worker_rlimit_core表示單個worker子進程所使用的Core文件大小的最大值。

working_directory表示Core文件存放的目錄,這里需要注意的一點是:該目錄nginx必須具有寫權限,屬主最好為Nginx的進程所有者。

當Nginx接收到信號結束處理時,就會產生相應的Core文件,我們就可以使用gdb來跟蹤查看具體的錯誤原因,如下: gdb /usr/local/nginx/sbin/nginx /tmp/core.xxx >>bt

2、調試模式 為了收集運行過程中的更多的信息

我們可以開啟調試模式運行Nginx,這在線上環境上收集具體的信息非常有用,我們只需要更新Nginx的配置文件,並重新加載,所有調試都會記錄在日志當中。

在編譯Nginx時加上–with-debug選項,並在配置文件中可以進行相應的配置以查看調用日志。

如下,在error_log中帶有debug選項,就會將相應的調試日志記錄下來: error_log  /usr/local/nginx/logs/error.log  debug; http { server { error_log  /usr/local/nginx/logs/error.log  debug; …. 因為日志占用的空間非常大,為了更加便於收集日志,Nginx還提供了一個配置選項用來設置只記錄特定連接的調試信息,這個配置選項為debug_connection。

比如我們只對來自192.168.1.1的連接進行調試信息的記錄,配置如下: events { debug_connection   192.168.1.1; }

這時我們可以通過tail -f /usr/local/nginx/logs/error.log -n 100|grep debug來進行日志過濾,查看相應的具體調試信息。

3、單進程非守護模式

Nginx有兩種進程模型可以選用,為單進程和多進程兩種,默認情況下使用的是多進程模型,Nginx以守護進程的方式運行,但為了方便開發和調試,Nginx提供了單進程模型和非守護進程的方式,由兩個配置選項來控制:

守護進程: daemon Syntax: daemon on | off Default: on

多進程模型配置: master_process Syntax: master_process on | off Default: on

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM