初次mysql報(bào)錯(cuò)too many connection
后面修改了mysql的max_connections值,初步解決了。但是這個(gè)不是最終方案呀。我用的數(shù)據(jù)庫(kù)類是workerman-mysql,每次客戶端連接gatwayworker都會(huì)創(chuàng)建一次mysql連接,能不能像apache那樣子不管多少客戶端訪問都始終有一個(gè)mysql連接
[attach]1972[/attach]
?
1、首先產(chǎn)生大量的sleep線程,通常原因是mysql客戶端沒有及時(shí)關(guān)閉對(duì)應(yīng)的連接,或者是 mysql服務(wù)端wait_timeout超時(shí)時(shí)間配置過大,而此期間客戶端沒有發(fā)來任何請(qǐng)求所致,但是有sleep線程并不代表就一定有問題,多個(gè)長(zhǎng)連接屬于連接復(fù)用,性能好,少量動(dòng)態(tài)連接則意味著頻繁的tcp三次握手,性能不好,而業(yè)務(wù)比較清淡則產(chǎn)生大量的連接,那肯定是有問題,所以要看整體上線文環(huán)境。
2、apache訪問mysql只有一個(gè)連接? 一般的應(yīng)用怎么可能呢? 具體發(fā)起了多少個(gè)連接,那得看客戶端建立了多少個(gè)連接,若只有一個(gè),那說明客戶端做了特殊連接處理比如強(qiáng)制有且僅有建立了一個(gè)連接。
3、同樣的對(duì)于使用workerman-mysql建立連接,可以建立一個(gè),也可以建立N個(gè),這看你怎么用,【每次客戶端連接gatwayworker都會(huì)創(chuàng)建一次mysql連接】這個(gè)是你使用有問題,一般的應(yīng)該在onWorkerStart 里初始化數(shù)據(jù)庫(kù)連接,而不是在onConnect里。
4、另外可以考慮使用mysql連接池的方案來解決問題。