系統崩潰了,網站響應慢了,你是如何快速定位錯誤資訊的?
系統崩潰了,或者網站響應很慢,網站出現 502。。。這些問題在工作上,或者開發過程中經常出現吧。這些問題或許在面試的時候也會經常被問到。那麼你是怎麼在第一時間檢查錯誤,定位錯誤資訊的呢!
出現以上的錯誤的話,我們經常想到的是日誌吧。是的,作為一名程式設計師,比碼程式碼還重要那麼一點點的東西就是日誌的分析和查詢。下面來看看一些常見日誌及設定方法:Nginx 的日誌設定與 php-fpm 的一些日誌設定
Nginx 的 access.log 和 error.log
1 nginx 常用的配置檔案有兩種: access.log 和 error.log
access.log 的作用是:記錄使用者所有的訪問請求,不論狀態碼,包括 200 ,404,500 等請求,404,500 的請求並不會出現在 error.log 中。
error.log 的作用是:記錄 nginx 本身執行時的一些錯誤,不會記錄使用者訪問的請求。比如記錄模組錯誤資訊日誌,以及 nginx 配置檔案的錯誤日誌等,格式不支援自定義,可以設定級別。
2 設定 access_log
訪問日誌主要用於記錄客戶端的請求。客戶端向 nginx 伺服器發起的每一次請求都會被記錄到 access_log 中。包含請求 IP、時間、訪問 url 等等,當然訪問日誌中具體記錄哪些日誌資訊我們可以透過 log_format 設定.
檢視日誌存放地址
find / -name nginx.conf
根據查詢出來地址,進入 nginx.conf 檔案查詢 access_log 和 error_log 檔案的路徑
access_log 的設定語法:
log_format combined '$remote_addr - $remote_user [$time_local]' ' "$request" $status $body_bytes_sent' ' "$http_referer" "$http_user_agent"'; #日誌格式允許包含的變數註釋如下: $remote_addr, $http_x_forwarded_for //記錄客戶端IP地址 $remote_user //記錄客戶端使用者名稱稱 $request //記錄請求的URL和HTTP協議 $status //記錄請求狀態 $body_bytes_sent //傳送給客戶端的位元組數,不包括響應頭的大小; 該變數與Apache模組mod_log_config裡的“%B”引數相容。 $bytes_sent //傳送給客戶端的總位元組數。 $connection //連線的序列號。 $connection_requests //當前透過一個連線獲得的請求數量。 $msec //日誌寫入時間。單位為秒,精度是毫秒。 $pipe //如果請求是透過HTTP流水線(pipelined)傳送,pipe值為“p”,否則為“.”。 $http_referer //記錄從哪個頁面連結訪問過來的 $http_user_agent //記錄客戶端瀏覽器相關資訊 $request_length //請求的長度(包括請求行,請求頭和請求正文)。 $request_time //請求處理時間,單位為秒,精度毫秒; 從讀入客戶端的第一個位元組開始,直到把最後一個字元傳送給客戶端後進行日誌寫入為止。 $time_iso8601 //ISO8601標準格式下的本地時間。 $time_local //通用日誌格式下的本地時間。
參考例項
http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '"$gzip_ratio" $request_time $bytes_sent $request_length'; log_format srcache_log '$remote_addr - $remote_user [$time_local] "$request" ' '"$status" $body_bytes_sent $request_time $bytes_sent $request_length ' '[$upstream_response_time] [$srcache_fetch_status] [$srcache_store_status] [$srcache_expire]'; open_log_file_cache max=1000 inactive=60s; server { server_name ~^(www.)?(.+)$; access_log logs/$2-access.log main; error_log logs/$2-error.log; location /srcache { access_log logs/access-srcache.log srcache_log; } } }
3 設定 error_log
配置錯誤日誌檔案的路徑和級別
error_log file [level]; Default: error_log logs/error.log error;
第一個引數指寫入錯誤日誌的路徑
第二個引數指日誌的級別。level 可以是:debug、info、notice、warn、error、crit、alert、emerg 中的任意值。只有日誌的錯誤級別大於等於 level 指定的值才會被寫入錯誤日誌中,預設值是 error.
error.log 配置示例:
#錯誤日誌儲存位置 #error_log logs/error.log; #指定錯誤日誌的位置和級別 #error_log logs/error.log notice; #error_log logs/error.log info;
PHP 開發中需要了解的兩種日誌是什麼
有這麼一種情景
在測試環境多番測試沒有遇到問題,但在一次上線過程中,線上上環境出現 20 秒的響應超時,這個顯然是環境的問題了,儘管線上上資料量大,可 Mysql 也不至於慢到 20 秒,而且發現每次都是 20.01~20.04 秒之間,相差不到一秒鐘,mysql 也不至於這麼均勻,這個時候你可能會去檢視 Mysql 慢查詢日誌,如果發現沒有超時的 sql 日誌,那這有可能就是 php 這邊出現的問題,這個時候你就要看看 php 的慢日誌了。
php-fpm 慢日誌
php 慢日誌需要在 php-fpm.conf 設定,如果使用原始碼包安裝預設請執行下面命令
cp php-fpm.conf.default php-fpm.conf
預設透過原始碼包編譯安裝 php 目錄應在
/usr/local/php
目錄下,如果你透過 yum 或者其他方式安裝,不清楚或不知道 php 具體安裝目錄,可以使用
find / -name php-fpm.conf
或者
php -i | grep Path ------------------------------------------ [root@xxxx etc]# php -i | grep Path Configuration File (php.ini) Path => /usr/local/php/etc XPath Support => enabled Path to sendmail => /usr/sbin/sendmail -t -i [root@xxxx etc]#
開啟慢查詢日誌
php 舊的版本是在 php-fpm.conf 這裡設定的,而 php7.x 版本原始碼包編譯後需要 修改慢查詢配置
vim /usr/local/php/etc/php-fpm.d/
配置項都是一樣的,如果你在 php-fpm.conf 找不到,就去他的同級目錄 php-fpm.d 下面找找。
; The log file for slow requests ; Default Value: not set ; Note: slowlog is mandatory if request_slowlog_timeout is set ;slowlog = log/$pool.log.slow ; The timeout for serving a single request after which a PHP backtrace will be ; dumped to the 'slowlog' file. A value of '0s' means 'off'. ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) ; Default Value: 0 ;request_slowlog_timeout = 0
slowlog 設定慢查詢日誌的生成目錄
request_slowlog_timeout 設定慢查詢的標準時間(開啟此配置就相當於開啟了慢查詢日誌),配置以秒為單位,一般設定 3s。
php-error 錯誤日誌
在生產環境中是不允許 php 報錯的,就算報錯也是白屏或者 500,所以在生產環境中的日誌收集是非常重要的。
開啟錯誤日誌
一般情況下,php 錯誤日誌的配置都在 php.ini 檔案中
/usr/local/php/etc/php.ini --------------------------- error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off log_errors = On ; Log errors to specified file. PHP's default behavior is to leave this value ; empty. ; ; Example: ;error_log = php_errors.log ; Log errors to syslog (Event Log on Windows). ;error_log = syslog error_log 錯誤日誌的生成目錄 error_reporting 生產環境錯誤級別應全開 display_errors 在頁面上不顯示錯誤 log_errors 開啟錯誤日誌
最終的結果是
error_log = /var/log/php_error.log display_errors = Off error_reporting = E_ALL log_errors = On
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70009696/viewspace-2846208/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Facebook是如何防止訊息系統在新年前夕發生崩潰?
- 網站經常崩潰,企業應該如何做好監控?網站
- 誤升級GLIBC導致系統崩潰之後
- GodBlessYou: 讓你的應用不再崩潰Go
- 如何定位瀏覽器頁面崩潰的問題瀏覽器
- 記一次 .NET 某企業 ERP網站系統 崩潰分析網站
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- 一個不相容的 JS 方法,讓你的網站發生崩潰JS網站
- iOS應用崩潰了,如何透過崩潰手機連線電腦查詢日誌方法iOS應用崩潰
- 「趣圖」CSS 又歪了!你是第幾次被 CSS 搞崩潰了?CSS
- win10系統崩潰藍屏什麼原因 win10系統出現崩潰藍屏如何修復Win10
- 不生成core檔案的記憶體越界快速定位方法/記憶體越界定位/地址崩潰定位方法記憶體
- 公司網站證書錯誤怎麼解決,快速排除公司網站SSL證書錯誤網站
- 因為我的一個低階錯誤,生產資料庫崩潰了將近半個小時資料庫
- win10 qq視訊崩潰怎麼修復_win10系統qq視訊老是崩潰解決方法Win10
- 大型網站如何防止崩潰,解決高併發帶來的問題網站
- 紙質文件管理系統 快速定位你所需的檔案資料
- Android 收集程式崩潰異常資訊Android
- Edge崩潰(Edge錯誤程式碼STATUS_ACCESS_DENIED的修復方法)
- 【除錯技巧】Dialog dismiss 崩潰除錯
- Windows下Qt使用dump定位崩潰位置(1)WindowsQT
- Go程式崩潰現場應該如何保留?Go
- 麒麟系統開發筆記(十一):在國產麒麟系統上使用gdb定位崩潰異常方法流程進階定位代筆記
- win10系統用一會就崩潰如何解決Win10
- win10系統崩潰藍色畫面什麼原因 win10系統出現崩潰藍色畫面如何修復Win10
- Hbase master gone 系統崩潰. 遭遇 hbase bug 以及對應的解決方案.ASTGo
- 網站首頁系統發生錯誤怎麼處理網站
- 秒殺系統如何保證資料庫不崩潰以及防止商品超賣資料庫
- SAP CRM WebClient UI,如何快速定位到丟擲錯誤訊息的那一行程式碼WebclientUI行程
- 「Go框架」gin框架是如何做崩潰處理的?Go框架
- vs2010除錯崩潰 reflector除錯
- 加快你的網站響應速度-Vue懶載入網站Vue
- 研招網崩了?網路崩潰的原因有哪些?怎麼維護網站?網站
- 測試必存!12種網站崩潰的原因及排查方法!網站
- win10經常網頁崩潰怎麼解決 win10網頁崩潰如何修復Win10網頁
- 如何使用Ida Pro和Core Dump檔案定位崩潰位置(Linux下無除錯符號的程序專享)Linux除錯符號
- win10系統firefox多開崩潰怎麼修復_win10 firefox多開總是崩潰解決方法Win10Firefox
- win10系統驅動崩潰怎麼辦_win10系統驅動經常崩潰解決方法Win10