一次排查服務器端接口報500錯誤的經歷

目錄

1 出現問題情景

2 排查問題

3 解決辦法

4 寫在最後

 

 


1 出現問題情景

該問題來自我實習期間完成的一個博客後端系統,具體如下:

  • 當我辛辛苦苦在編輯器裏完成文章格式修改(字數較多,一般大於3000字;字數較少時不會出現問題),以及相關目錄和標籤的選定,點擊提交按鈕打算提交到博客系統時發現:文章無法提交成功。或者修改文章,重新編輯文章時(PS:編輯後,字數較多,一般大於3000字),提交文章也出現類似問題。

然後,查看接口調用返回值發現:

發佈文章接口和修改文章接口報服務器500錯誤。

 

 


2 排查問題

(1)首先,去服務器端查看uwsgi配置的報錯信息:裏面只給出了具體接口報500錯誤信息,沒有具體錯誤原因顯示;

(2)然後,去服務器端查看nginx的報錯信息:裏面也只給出了具體接口報500錯誤信息,沒有具體錯誤原因顯示;

(3)到了現在,就感覺很納悶了。於是,我跑到本地測試相關接口,發現所有接口功能正常使用,沒有什麼報錯信息提示。到了這一步,可以排除代碼實現邏輯是沒有問題,那麼問題就應該出現在測試服務器環境的服務器部署問題,而且問題可能就出現在數據庫配置部署。

(4)最後,按照(3)的想法,到測試環境開啓博客系統後端服務的shell環境,執行具體發佈和更新文章的接口方法,直接對後端數據進行添加和更新操作,於是發現以下報錯:

django.db.utils.OperationalError: (1153, "Got a packet bigger than 'max_allowed_packet' bytes")

 

問題果然是出現在數據庫層調用出現的問題。依據問題可知:由於數據寫入量太大,超出mysql數據庫最大單個數據存儲字節大小,從而導致數據無法寫入或者更新。

 

 


3 解決辦法

在測試服務器,使用root賬號權限,修改最大字節數,步驟代碼如下:

[liuzhen@liuzhen] - [/etc/mysql] - [Fri Jul 27, 10:30]

└─[$]> mysql -u root -proot       
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 128557
Server version: 5.7.20-0ubuntu0.16.04.1-log (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql
> set global max_allowed_packet=1000000000; Query OK, 0 rows affected, 1 warning (0.00 sec)

修改成功後,重新調用博客系統發佈文章和修改文章接口,發現問題得到解決。

 

 


4 寫在最後

剛開始遇到這個問題時,發現服務器500錯誤,排查了好久一直找不到具體報錯原因,也無法作出具體解決方案。於是,到網上查看了一下接口報500服務器內部錯誤出現的一般原因,發現:

一般出現500服務器內部錯誤,極可能是調用數據庫進行數據查詢、更新、修改或者刪除時出現了邏輯錯誤或者相關錯誤,也就是數據庫層調用出現了錯誤。

出現後,排查日誌和接口返回錯誤提示,可能是找不到報錯信息,所以最好的方法就是去手動在相應環境下執行一下數據庫層調用方法,排查一下具體問題。

 

 

參考資料:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章