用LR模擬HTTP請求對ELB進行性能測試,過程中出現 “開啟 nginx緩存功能”發消息幾分鐘後出現大量錯誤。最近幾天對該問題原因進行調查,將本次過程做以記錄。
工具/原料
nginx
方法/步驟
1、 測試環境說明:
ELB實例環境:redhat 6.2虛擬機應用服務器:tomcat應用
2、復現問題:
使用LR,30個vuser以200Hits/s的速度發消息,發送5分51秒,開始出現大量504錯誤,結果截圖如下:
此時nginx.conf配置文件,關於緩存的配置如下:
3、修改相關配置並驗證:
檢查錯誤原因,所有出錯消息返回碼都為504,超時。分析和時間有關的配置,inactive=2m; #緩存時間proxy_cache_valid any 2m; #緩存時間proxy_connect_timeout 1; #nginx跟後端服務器連接超時時間(代理連接超時)proxy_send_timeout 1; #建立連接後,nginx等候讀取後端服務器響應的時間proxy_read_timeout 1; #nginx轉發請求到後端的超時時間緩存時間長短和超時沒有關係,那麼修改nginx和後端服務器連接的相關超時時間將nginx.conf中相關配置修改如下:
修改後用LR發消息22分鐘57秒,沒有出現錯誤。截圖如下,從這個測試結果可以看出最大響應時間為2.868秒,也進一步證明推理的正確性,確實有響應時間超過1秒的,這時會產生錯誤。
在網上查詢 proxy_connect_timeout ; proxy_send_timeout ; proxy_read_timeout ;這3個參數 默認值都是60秒,建議不要超過75秒。將結論發送給開發人員,開發人員將鏡像文件的超時時間修改為60秒。
4、總結
上面的這個配置項並沒有修改接口,所以用戶在使用的時候使用的一定是我們系統提供的默認值,而且在功能測試消息量小的時候,不會出現錯誤,這樣的問題很容易遺漏為現網bug。所以,提醒我們的開發人員,一些業界廣泛使用的開源代碼,每個配置的默認值一定是有根據的,在我們使用的時候,一定要清楚每個配置項的意義,如果不是我們的系統有特殊需求,不要把配置值改為與默認值相差的很遠。同時,也要求我們測試人員,要對系統增加儘量多的瞭解,而不僅僅是一部分,這樣才能提高測試質量。
注意事項
nginx