幾個網絡相關的問題

1 一臺機器最多支持多少 tcp 連接

首先,一個連接的組成是 【local ip, local port, remote ip, remote port】,作為服務端 ,前兩者是不變的。

那么一個端口,ipv4地址,2的32 次方 * 端口數(2 的 16 次方)= 2的48 次方

另外,還需要修改文件句柄大小。ulimit 是一個進程的句柄大小。默認 1024.

2 連接數過多會帶來什么影響

連接數過多之tcp回收問題 time wait,即服務端主動關閉連接。

可修改 vi /etc/sysctl.conf 文件,修改 timeout,socket 回收,重用 tcp,開啟 syn cookies。 4 個方式。

3 cpu0 顯示繁忙

軟中斷過高,而且大部分都集中在同一個CPU。

用軟件處理,有 RPS,通過對流的 hash,負載到不同的 cpu,問題是不能夠很好的讓 進程的 cpu 和處理中斷的 cpu 是同一個 cpu,導致 cache miss。為了解決這個問題,linux 后來的版本,有個 RFS 的方案,防止 cache miss。但是據說還是不太好用。

購買支持多隊列的網卡硬件,可以徹底解決 軟中斷集中在單個 cpu0 的問題(看版本)。

從這個話題換個角度說:當你的網卡沒有打滿,cpu 滿載了,除了用 pidstat 看看是不是程序問題,或者 cs 問題,還可以看看是不是 cpu0 軟中斷太多導致的。

4 time wait 和 close wait 區別

time wait 是主動關閉,這個是為了確保舊連接的數據對新連接的影響。通常是 2msl。而且資源會被占用。

解決辦法,1 盡量不要主動斷開連接。

2 另外,關閉 socket 的 linger 選項。

close wait 對方關閉。此時,我們需要再調一次 close 來主動關閉。

5 寫文件經歷幾層 cache

普通調用:1 層,如果是 DIO,則是 0 層。


image.png

6 tcp 滑動窗口是什么

滑動窗口是接受數據端使用的窗口大小,用來告知發送端接收端的緩存大小,以此可以控制發送端發送數據的大小,從而達到流量控制的目的

7 為什么有網卡中斷

可以認為是“喚醒” CPU 處理網卡數據,否則網卡緩存會溢出,導致丟棄數據。

還有一種 DMA 的方式。

8 bio 有什么好處,什么地方用 bio

BIO方式適用于連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,并發局限于應用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容