|
一、遇到的一些問題 記得 2008 年做性能測試的時候,新進(jìn)7臺 lenovo 4核4G 服務(wù)器用于性能測試。 當(dāng)時資源緊張,這7臺服務(wù)器都裝了雙系統(tǒng)(Win2003/CentOS5)空閑時用于做測試機(jī)(壓測的Agent)。 當(dāng)時給Nginx做了一系列測試,印象很深的是:在這批機(jī)器上,Nginx狀態(tài)頁面的壓測。 短連接的話最佳QPS約4萬,長連接的話最高QPS約13萬。 大概3年后,那批 lenovo 服務(wù)器已經(jīng)沒人瞧得上了,只能做肉雞。 然而,一次不經(jīng)意的測試,發(fā)現(xiàn)再牛的服務(wù)器,短連接最佳QPS也高不了多少。而且,測試機(jī)的資源沒用完,被測試服務(wù)器的資源也用不完,網(wǎng)絡(luò)也沒瓶頸。 服務(wù)器資源使用率很低,然而響應(yīng)就是不夠快。 最后,我們發(fā)現(xiàn)了瓶頸在監(jiān)聽的入口!是否可以提高監(jiān)聽入口的性能?是否可以端口復(fù)用?最后我們找到了SO_REUSEPORT。 SO_REUSEPORT支持多個進(jìn)程或者線程綁定到同一端口,提高服務(wù)器程序的性能。 二、解決方案 測試環(huán)境 Default 查看編譯參數(shù) Nginx 配置如下: 注意有一個reuse_port參數(shù) Default 壓測 reuse_port Tengine 早已支持 reuse_port 。開啟 reuse_port 后,你會發(fā)現(xiàn)有很多進(jìn)程同時監(jiān)聽80端口: 加壓后你會發(fā)現(xiàn),服務(wù)器性能可被你榨干: 對比一下測試 reuse_port 的效果,小伙伴們驚呆了(短連接QPS過了24萬)! 真相大白后,你還等什么? 探個究竟 測試過程中由于壓大 TCP: Possible SYN flooding on port 80. ,出大量錯誤 。 于是將并發(fā)量降到了6萬 net.core.somaxconn = 65535 。 再關(guān)閉 reuse_port 后,我們看下 perf top的情況: 然后再打開 reuse_port ,對比 perf top 的情況: 此時再放大 Nginx 監(jiān)聽的 back_log ,看下資源使用情況: 我們來看看些時的隊列情況(有入隊過萬了): 然后我們再來挑戰(zhàn)30萬并發(fā)(MTT是平均響應(yīng)時間(ms)): 經(jīng)過一系列調(diào)優(yōu),相同環(huán)境相同并發(fā)量,沒有再出現(xiàn) TCP: Possible SYN flooding on port 80.。但出現(xiàn)了少量連接超時的情況: 至此測試完畢,開啟reuse_port確實(shí)可以讓性能提升3倍,何不試試。 【via@運(yùn)維幫】 |
|
|