本文內(nèi)容參考自(2條消息) Linux C/C++ 開(kāi)發(fā)(學(xué)習(xí)筆記十三):百萬(wàn)并發(fā)的服務(wù)器實(shí)現(xiàn)_菊頭蝙蝠的博客-博客_linux百萬(wàn)并發(fā)
nat 模式,物理機(jī)的VMnet8網(wǎng)卡,連接到了VMnet8虛擬交換機(jī),在本機(jī)使用網(wǎng)絡(luò)調(diào)試助手要使用此ip,其他ip連不上。
linux 文件系統(tǒng)默認(rèn)的文件描述符的數(shù)量是1024個(gè),可以通過(guò)ulimit -a命令查看
可通過(guò)ulimit -n命令進(jìn)行修改,這種修改方式是臨時(shí)修改,系統(tǒng)重啟后又恢復(fù)原狀
可通過(guò)修改文件永久修改系統(tǒng)默認(rèn)的文件描述符數(shù)量
在那個(gè)文件下添加兩行
reboot后即可
二、Cannot assign requested address----->在服務(wù)器開(kāi)多個(gè)端口 問(wèn)題及原因在客戶端這邊,遠(yuǎn)程ip,遠(yuǎn)程端口,協(xié)議都是確定的,本機(jī)ip也是確定的,那么實(shí)際上就是本機(jī)的端口耗盡了。
解決方法就是 在服務(wù)器開(kāi)多個(gè)端口。
解決問(wèn)題通過(guò)一個(gè)循環(huán),開(kāi)MAX_PORT個(gè)端口,每個(gè)為一個(gè)sockfd
并把每個(gè)sockfd加入到epoll中去
最后還需要用一個(gè)數(shù)組,將每次遇到的sockfd存入到數(shù)組后。(由于后續(xù)在監(jiān)聽(tīng)到數(shù)據(jù)后,需要區(qū)分是listenfd還是客戶端的信息)
后續(xù)while(1) 持續(xù)監(jiān)聽(tīng)的時(shí)候,通過(guò)sockfds數(shù)組(理解為sockfd的集合)判斷是listenfd還是clientfd就行了。
通過(guò)將MAX_PORT個(gè)io都放入到epoll中去管理
三、Connection time out----->設(shè)置當(dāng)前系統(tǒng)設(shè)置大連接數(shù)和防火墻對(duì)外的大連接數(shù)運(yùn)行到后來(lái),客戶端還是會(huì)出現(xiàn)問(wèn)題
可以看到64999非常接近65535這個(gè)數(shù)
排查問(wèn)題通過(guò)命令來(lái)查看 系統(tǒng)所有進(jìn)程一共可以打開(kāi)的文件數(shù)量?
結(jié)果很大,因此和大可打開(kāi)的文件數(shù)量沒(méi)有關(guān)系
查看當(dāng)前系統(tǒng)設(shè)置大連接數(shù)
這是 內(nèi)核里面設(shè)置的防火墻對(duì)外的大連接數(shù)
因此需要設(shè)置參數(shù),linux內(nèi)核中的參數(shù),都可以通過(guò)sysctl.conf來(lái)設(shè)置
修改后,通過(guò)下面這條命令進(jìn)行生效
然后發(fā)現(xiàn),服務(wù)器端,出現(xiàn)了問(wèn)題,too many open files in system?
發(fā)現(xiàn)服務(wù)器的file-max不夠大
對(duì)服務(wù)器端的/etc/sysctl.conf 同樣進(jìn)行修改
通過(guò)sudo sysctl -p去更新
如果出現(xiàn)問(wèn)題
需要 運(yùn)行下列命令。
Linux modprobe命令用于自動(dòng)處理可載入模塊。modprobe可載入指定的個(gè)別模塊,或是載入一組相依的模塊。
然后再sudo sysctl -p去更新
五、內(nèi)存不夠----->調(diào)整TCP/IP協(xié)議棧 參數(shù)在跑的時(shí)候查看htop,發(fā)現(xiàn)當(dāng)一段時(shí)間后,fd個(gè)數(shù)不再增加了
服務(wù)器停住了,因?yàn)閮?nèi)存滿了,但是過(guò)一會(huì)又開(kāi)始下降,說(shuō)明是內(nèi)存開(kāi)始回收。
一旦開(kāi)始對(duì)客戶端大量進(jìn)程結(jié)束,cpu的利用率會(huì)到達(dá)100%(而一般不能這么做,一般不能超過(guò)80%)
這時(shí)候就要調(diào)整 TCP/IP協(xié)議棧了。
net.ipv4.tcp_mem, tcp全局緩存大小,單位是頁(yè)(4k)從左到右分別是 1G? ?2G? ?3G
2G之前系統(tǒng)不會(huì)有什么行動(dòng),2~3G系統(tǒng)會(huì)進(jìn)行內(nèi)存優(yōu)化(比如對(duì)沒(méi)用的TCP連接進(jìn)行回收),3G以上禁止分配
net.ipv4.tcp_wmem對(duì)應(yīng)tcp套接字的發(fā)送緩沖區(qū),單位是B,從左到右分別是最小值、默認(rèn)值(創(chuàng)建套接字時(shí)分配的大?。┖痛笾?/p>
net.ipv4.tcp_rmem對(duì)應(yīng)tcp套接字的接收緩沖區(qū),單位是B,從左到右分別是最小值、默認(rèn)值(創(chuàng)建套接字時(shí)分配的大?。┖痛笾?
sockfd-->2k
1024字節(jié)2*100w差不多為2G。(通過(guò)這種方式計(jì)算出來(lái))
總的緩存=(每個(gè)fd發(fā)送緩存+每個(gè)fd接受緩存)*fd數(shù)量
如果想做到千萬(wàn)并發(fā),就要用到用戶態(tài)協(xié)議棧了
如果想提升客戶端連接速度,可以將100個(gè)listenfd放入100個(gè)線程中去
把clientfd和listenfd放到不同的線程中
如果只利用一個(gè)端口8888,開(kāi)多個(gè)進(jìn)程
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱(chēng):LinuxC/C++學(xué)習(xí)筆記(九):百萬(wàn)并發(fā)的服務(wù)器實(shí)現(xiàn)-創(chuàng)新互聯(lián)
分享路徑:http://chinadenli.net/article24/ddijce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、關(guān)鍵詞優(yōu)化、面包屑導(dǎo)航、動(dòng)態(tài)網(wǎng)站、靜態(tài)網(wǎng)站、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容