1. 問題描述
上線一個新的環(huán)境,發(fā)現(xiàn)原來的ws連接上之后,會自動斷開。查看日志發(fā)現(xiàn),連接其實已經(jīng)成功,但是莫名就斷開了
日志參考如下
127.0.0.1:40148 - - [23/Sep/2021:18:58:18] "WSCONNECTING /operation/api/ws/smart_station/car_real_time/609a646968206d11a655d3e3/" - -
127.0.0.1:40148 - - [23/Sep/2021:18:58:18] "WSCONNECT /operation/api/ws/smart_station/car_real_time/609a646968206d11a655d3e3/" - -
==== 連接成功
==== 連接成功, 并且來到了最后一行
127.0.0.1:40148 - - [23/Sep/2021:18:58:19] "WSDISCONNECT /operation/api/ws/smart_station/car_real_time/609a646968206d11a655d3e3/" - -
127.0.0.1:36798 - - [23/Sep/2021:19:01:41] "WSCONNECTING /operation/api/ws/smart_station/car_real_time/609a646968206d11a655d3e3/" - -
從上述的日志中發(fā)現(xiàn),我自己打印的連接上之后的日志全部打印出來了,并且整個連接也成功連上了,但是很快就立刻斷開了。并且斷開的時候并沒有調(diào)用我的consumer中的disconnect方法,相應(yīng)的日志也沒有打印出來。
2. 排查
nginx配置有問題???
經(jīng)過運維排查,并沒有發(fā)現(xiàn)這個環(huán)境配置與沒有問題的環(huán)境有任何區(qū)別,并且該環(huán)境曾經(jīng)也部署過這個服務(wù),ws連接一直是正常的。排查修改
排查修改過的代碼,發(fā)現(xiàn)redis配置發(fā)生過變更,換了新的redis實例。與運維同學(xué)溝通,發(fā)現(xiàn)新的redis的版本為4.0,而原先的redis是5.0版本
3. 解決
- 使用channel時配套使用了channel_redis,但是發(fā)現(xiàn)有內(nèi)存泄漏問題,主要是由于channel_redis本地緩存的queque的大小沒有做限制,導(dǎo)致的內(nèi)存泄漏,該問題解決的版本在channel_redis 3.1.0 。所以我們對channel_redis這個包做了升級。
- channel_redis 3.1.0 要求使用5.0版本以上的redis,所以當(dāng)檢測redis版本不對時,就會導(dǎo)致ws連接的斷開。
- 修改redis配置為一個5.0版本的實例,ws連接就正常了。