1. 程式人生 > >openresty 併發處理mysql的一些配置

openresty 併發處理mysql的一些配置

因為是自己除錯著玩,系統環境比較low,只是一個虛擬機器。

要測試併發,首先要將系統能支援的檔案描述符數更改,預設系統是1024。

修改的檔案為/etc/security/limits.conf

在底下增加一行*  -    nofile  100000

重啟系統。執行ulimit -n,看到結果是100000。

如果只是臨時想更改檔案描述符數,只需要執行ulimit -n 100000,這樣只會在當前終端上生效。

修改好檔案描述符後,做併發5000的測試,發現nginx報錯,報錯內容為worker connections not enough,上網查詢結果是在

nginx.conf的events中,修改配置worker_connections  1024 ,將1024改為20000。

在配置檔案的最外層增加配置worker_rlimit_nofile 100000;

要併發,肯定要用到連線池。openresty 的mysql庫自帶了連線池API。

local pool_max_idle_time = 20000  --ms  
    local pool_size = 200--connections  
    local ok, err = db:set_keepalive(pool_max_idle_time, pool_size)

設定連線池的數量為200,20秒後沒有連線則釋放此連線。

這時做併發測試,還是會報錯,說mysql 連線數超出,無法連線。

要去修改mysql的配置,預設連線數為100。

修改路徑為/etc/mysql/my.cnf

修改max_connections 欄位

最後再次測試,發現還是報錯,報錯內容為lua tcp read timeout ,conn't connect mysql 。

經排查是寫lua 的時候,new mysql後,有個 db:set_timeout(1000),之前設定位1秒,因為是虛擬機器,磁碟IO比較慢,併發處理

資料會慢一些,導致超時,將這個時間改大一些就好了。