swoole多進程處理產生的問題


以前用swoole的時候,沒有涉及到數據庫連接,碰到問題沒有那么多,后來公司業務原生來寫swoole多進程,問題出現很多

1.多進程之間會產生進程隔離,global無效,不能共用一個mysql,redis連接,所以每個進程單獨開一個數據庫連接

2mysql數據庫是多線程,每一個線程處理一個連接,當一個query連接超過mysql的max_timeout時,公司設置為20s,會回收,所以在swoole中,由於是一個長駐內存的服務,我們建立了一個mysql的連接,不主動關閉 或者是用pconnect的方式,那么這個mysql連接會一直保存着,然后長時間沒有和數據庫有交互,就主動被mysql server關閉了,之后繼續用這個連接,就報mysql server gone away了

解決方法:

1修改mysql連接時間,但是設置太大的話,數據庫產生大量sleep線程

2增加斷線重連的操作

3減少僵屍進程出現


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM