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 層。
6 tcp 滑動窗口是什么
滑動窗口是接受數據端使用的窗口大小,用來告知發送端接收端的緩存大小,以此可以控制發送端發送數據的大小,從而達到流量控制的目的
7 為什么有網卡中斷
可以認為是“喚醒” CPU 處理網卡數據,否則網卡緩存會溢出,導致丟棄數據。
還有一種 DMA 的方式。
8 bio 有什么好處,什么地方用 bio
BIO方式適用于連接數目比較小且固定的架構,這種方式對服務器資源要求比較高,并發局限于應用中,JDK1.4以前的唯一選擇,但程序直觀簡單易理解。