国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

性能優(yōu)化之event擴(kuò)展疑問

Jonas

最近在了解webman關(guān)于優(yōu)化Linux內(nèi)核的內(nèi)容,里面提到了在這個優(yōu)化基礎(chǔ)之前,需要開啟event擴(kuò)展。此前有了解到IO多路復(fù)用里面的幾種模式,于是想通過實際的測試,來看下開啟event擴(kuò)展之后實際的提升有多大。

一 環(huán)境準(zhǔn)備

在起初,直接本地搭建環(huán)境。通過相同的鏡像(這里借助了tinywan/docker-php-webman的鏡像)構(gòu)建了兩個容器,兩個容器都設(shè)置了linux內(nèi)核優(yōu)化的相關(guān)參數(shù)。然后一個開啟event擴(kuò)展一個未開啟,然后通過宿主機(jī)去壓測,兩邊壓測結(jié)果都沒啥區(qū)別,于是想到有可能是因為宿主機(jī)自身的并發(fā)數(shù)限制,于是決定直接在阿里云上搞。

1.1 機(jī)器配置

受壓端與施壓端保證同一個可用區(qū),通過內(nèi)網(wǎng)壓測,機(jī)型選擇的是通用算力型,避免用共享型機(jī)器,系統(tǒng)均是Debian
受壓端:2核(vCPU) 2 GiB
施壓端:8核(vCPU) 8 GiB

1.2 環(huán)境配置-受壓端

安裝PHP8.0,搭建webman,設(shè)置linux 內(nèi)核,其中l(wèi)inux設(shè)置內(nèi)核生效的有以下幾項
截圖

設(shè)置打開文件數(shù)
截圖

關(guān)閉event擴(kuò)展
截圖

開啟event擴(kuò)展
截圖

壓測接口
官方自帶示例接口/index/json
截圖

1.3 環(huán)境配置-施壓端

設(shè)置linux內(nèi)核
截圖

設(shè)置文件打開數(shù)
截圖

安裝 Apache的ab工具

二 壓測

2.1 未開啟event擴(kuò)展

壓測命令
ab -n 2000000 -c 5000 -k http://172.18.155.51:8787/index/json

受壓端CPU狀態(tài)
截圖
截圖

施壓端CPU狀態(tài)
截圖

壓測失敗
截圖
壓測結(jié)束,這里受壓端還一直持有connection,估計是因為壓測端的異常斷開
截圖

縮小并發(fā)數(shù)
ab -n 2000000 -c 1500 -k -r http://172.18.155.51:8787/index/json

QPS壓測結(jié)果:
67065.64
66931.87
66882.92
截圖

2.2 開啟event擴(kuò)展

壓測命令
ab -n 2000000 -c 1500 -k http://172.18.155.51:8787/index/json

受壓端CPU狀態(tài)
截圖

施壓端CPU狀態(tài)
截圖

3次QPS壓測結(jié)果:
66183.54
64454.47
66645.59
截圖

增高并發(fā)數(shù)
ab -n 2000000 -c 5000 -k -r http://172.18.155.51:8787/index/json
受壓端
截圖

壓測結(jié)果
截圖

三 結(jié)果

受壓端保持兩個worker

3.1 并發(fā)數(shù)1500

不開啟event與開啟event表現(xiàn)基本一致

場景 壓測一 壓測二 壓測三
不開啟event 67065 66931 66882
開啟event 66183 64454 66645

3.2 并發(fā)數(shù)5000

不開啟event,施壓端出現(xiàn)報錯
apr_pollset_poll: The timeout specified has expired

開啟event,壓測正常

四 疑問

并發(fā)數(shù)超5000,開啟event能正常受理,這個能夠理解。
但是按照兩種多路復(fù)用的模型,epoll的方式在性能上不應(yīng)該比select上更加出色嗎,為啥兩者在并發(fā)數(shù)1500的時候,表現(xiàn)出來的性能卻是差不多的?

2030 5 3
5個回答

Jonas

@walkor walkor或者其他同學(xué)了解這塊看到的話,能幫忙解答一下疑問么??

nitron

epoll是為解決Linux內(nèi)核處理[大量]文件描述符而提出的方案

  • Jonas 2023-10-31

    但是除了解決大量文件描述符,從它改進(jìn)的思路來看,從select的輪詢變?yōu)閑poll的回調(diào),兩者在調(diào)用的觸發(fā)思路上應(yīng)該也有區(qū)別呀

  • nitron 2023-10-31

    epoll要維持一個RB樹和多個等待隊列,內(nèi)核開銷很大,FD少的時候,底層開銷得不償失
    select監(jiān)聽的fd數(shù)量較少,fd就緒所消耗的時間復(fù)雜度就會大大減小

  • Jonas 2023-10-31

    所以如果我切換成大量并發(fā)的話應(yīng)該能看出效果,但是因為ab壓測不成功(設(shè)置并發(fā)數(shù)5000,select模式下壓測報錯),所以反而看不出具體結(jié)果

  • Jonas 2023-10-31

    是這樣理解么?

walkor 打賞
  • 雖然select數(shù)據(jù)結(jié)構(gòu)沒有epoll高效,但是因為壓測時每個連接都是可讀的,即使select是遍歷也沒有性能浪費(fèi),結(jié)果差距不大
  • 壓測時select可以一次性返回所有可讀描述符,select的調(diào)用頻率明顯降低,提升了一定性能
  • select面對海量連接并且只有部分連接可讀時性能應(yīng)該會有明顯下降
  • 壓測一般網(wǎng)絡(luò)開銷、協(xié)議解析、業(yè)務(wù)等是瓶頸,select和epoll的性能無法明顯地表現(xiàn)出來
  • event擴(kuò)展php封裝了一層類,每個連接都需要new一個實例,產(chǎn)生一些開銷。短鏈接壓測時這個開銷很大,長連接可以忽略
  • select默認(rèn)只支持1024個描述符,大于這描述符時會超時,壓測表現(xiàn)為卡住報錯
  • Jonas 2023-10-31

    有點明白了,謝謝walkor

  • Jonas 2023-10-31

    對了,在壓測過程中發(fā)現(xiàn)個另外的問題
    在select場景下,并發(fā)數(shù)過高時,我看到worker下的tcp連接全是close_wait狀態(tài),一直不會釋放。
    webman版本v1.5.10

  • walkor 2023-10-31

    正常,select最多處理1024個連接,超出部分無法響應(yīng),無法檢測到連接關(guān)閉,連接就一直處于close_wait

gddd

你終端叫什么名字

Jonas

梳理了一下select和epoll的內(nèi)部實現(xiàn),歡迎指正
https://blog.jeyfang.com/archives/574

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??