Nginx代理連接Redis失敗

遇到了一個客戶端連接Redis總是失敗的問題,由於是通過nginx代理連接的,又嘗試不通過nginx代理連接直接連接redis地址,不過連接很不穩定,不時就斷了。
因爲這部分配置跑了一年多了,也沒想到是nginx的問題,各種排查網絡情況,弄了半天也沒有個結論。
順手看了一眼nginx的error日誌,發現了新大陸。。。看來正式環境的nginx的error日誌加上的必要性還是非常非常的大的。
nginx的錯誤日誌如下:

2020/03/31 16:02:10 [alert] 25058#0: *5913973074 open socket #228 left in connection 182
2020/03/31 16:02:10 [alert] 25058#0: *5915419717 open socket #151 left in connection 183
2020/03/31 16:02:10 [alert] 25058#0: *5915419718 open socket #152 left in connection 184
...

看到貌似開的連接數太多了。
又用netstat查了一下網絡情況,如下:

tcp        0      0 xxx:42992 192.168.1.105:6379      TIME_WAIT  
tcp        0      0 xxx:43010 192.168.1.105:6379      TIME_WAIT  
tcp        0      0 xxx:35034 192.168.1.105:6379      TIME_WAIT  
tcp        0      0 xxx:60994 192.168.1.105:6379      TIME_WAIT  
tcp        0      0 xxx:35976 192.168.1.105:6379      TIME_WAIT  
tcp        0      0 xxx:34210 192.168.1.105:6379      TIME_WAIT  
...

茫茫多的TIME_WAIT。。。
查了一下資料,說是要增加一下nginx配置裏邊的

events {
    worker_connections  10240; # 之前默認是1024
}

修改完了雖說TIME_WAIT的連接數沒有變少,但是連接redis的服務功能變正常了,而且nginx也沒有錯誤日誌了。

附:nginx文檔關於 worker_connections 的說明。

Sets the maximum number of simultaneous connections that can be opened by a worker process.

It should be kept in mind that this number includes all connections (e.g. connections with proxied servers, among others), not only connections with clients. Another consideration is that the actual number of simultaneous connections cannot exceed the current limit on the maximum number of open files, which can be changed by worker_rlimit_nofile.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章