您好,登錄后才能下訂單哦!
這篇文章主要講解了“如何實(shí)現(xiàn)4G內(nèi)存服務(wù)器epoll并發(fā)量最大”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“如何實(shí)現(xiàn)4G內(nèi)存服務(wù)器epoll并發(fā)量最大”吧!
按照題主的意思 是根據(jù)內(nèi)存去算一個(gè)最大并發(fā)的連接數(shù). 那么首先要找出來(lái)單個(gè)連接消耗內(nèi)存的地方.
第一個(gè)首先是socket buffer. read 和write 分別有一個(gè), 默認(rèn)大小在
代碼如下:
/proc/sys/net/ipv4/tcp_rmem (for read)
/proc/sys/net/ipv4/tcp_wmem (for write)
默認(rèn)大小都是87K和16K, 最低是4K和4K, 最高是2M,2M, 實(shí)際使用默認(rèn)值最低也要保留8K,8K.
然后是邏輯IO緩沖區(qū)
就是比如你監(jiān)聽(tīng)了recv事件 事件來(lái)了 你要有內(nèi)存可用(一般都是socket建立起就分配好,斷開(kāi)才會(huì)釋放的).
這個(gè)內(nèi)存是自己寫socket程序時(shí)候自己控制的, 最低也要4K,4K, 實(shí)際使用8K,8K至少.
現(xiàn)在設(shè)定一個(gè)優(yōu)化方案和使用場(chǎng)景, 首先假設(shè)4G內(nèi)存全部為空閑(系統(tǒng)和其他進(jìn)程也要內(nèi)存的….
假如網(wǎng)絡(luò)包的大小都可以控制在4K以下, 假設(shè)所有連接的網(wǎng)絡(luò)都不會(huì)擁堵, 或者擁堵時(shí)候的總量在4K以下:
一個(gè)連接的內(nèi)存消耗是4+4+4+4=16K
4G/16K=26.2萬(wàn)并發(fā)
假如網(wǎng)絡(luò)包的大小都可以控制在8K以下, 假設(shè)所有連接的網(wǎng)絡(luò)都不會(huì)擁堵, 或者擁堵時(shí)候的總量在8K以下
一個(gè)socket的內(nèi)存占用介于 24K ~ 32K之間, 保守的按照32K算
4G/32K=13.1萬(wàn)并發(fā), 這個(gè)在生產(chǎn)環(huán)境作為一個(gè)純網(wǎng)絡(luò)層面的內(nèi)存消耗, 是可以作為參考的.
假如使用默認(rèn)配置, 假如所有連接的網(wǎng)絡(luò)都出現(xiàn)嚴(yán)重?fù)矶? 不考慮邏輯上的發(fā)送隊(duì)列的占用,
使用默認(rèn)配置是2M+2M+8+8 ~= 4M
4G/4M=1024并發(fā) ( …
如果考慮到發(fā)送隊(duì)列也擁堵的話 自己腦補(bǔ).
如果只是為了跑分 為了并發(fā)而優(yōu)化, 沒(méi)有常駐的邏輯緩沖區(qū) 并且socket的網(wǎng)絡(luò)吞吐量很小并且負(fù)載平滑, 把socket buffer size設(shè)置系統(tǒng)最低.
那么是
4G/8K = 52.4萬(wàn)并發(fā) 這個(gè)應(yīng)該是極限值了.
感謝各位的閱讀,以上就是“如何實(shí)現(xiàn)4G內(nèi)存服務(wù)器epoll并發(fā)量最大”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)如何實(shí)現(xiàn)4G內(nèi)存服務(wù)器epoll并發(fā)量最大這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。