TCP連線的幾個問題的處理

2021-08-16 19:16:57 字數 1162 閱讀 5339

問題一:

accept4: too many open files; retrying in 640ms
或者

dial tcp 127.0.0.1:8080: socket: too many open files
都是socket的數量,即檔案描述符的數量不夠用了,解決方法,增加檔案描述符的數量

ulimit -n 204800
其中204800可以適當增加,不超過系統上限就行。

問題二:

dial tcp 127.0.0.1:8080: connect: cannot assign requested address
這個是埠不夠用了,一般計算機的埠最多是65535個

查詢的方法:

sysctl -a |grep port_range
解決的方法是:

vi /etc/sysctl.conf

net.ipv4.ip_local_port_range = 10000 65000

sysctl -p

更直接的方法:

多配幾個ip

ifconfig eth0:1 ***

ifconfig eth0:2 ***

出現問題的原因:

netstat -ano
可見大量的state是time_wait的連線,釋放這些連線可以避免問題。

方法是:

sysctl -w net.ipv4.tcp_fin_timeout=30 調低埠釋放後的等待時間,預設為60s,修改為15~30s

sysctl -w net.ipv4.tcp_timestamps=1 開啟對於tcp時間戳的支援,若該項設定為0,則下面一項設定不起作用

sysctl -w net.ipv4.tcp_tw_recycle=1 表示開啟tcp連線中time-wait sockets的快速**

總之,只要程式寫的還行的話,受限的資源無外乎socket的檔案數量或者埠數量,把數量改大了或者及時釋放了,是解決問題的主要思路。

TCP相關的幾個問題

復用tcp報文段裡的序列號部分?傳送資料長度如何確定,傳送方怎麼知道自己該發哪些位元組了?正常傳送資料時應該用哪個標識 tcp報文段裡的頭部長度的作用何在?tcp頭里的關鍵項和作用 疑惑1 復用tcp報文段裡的序列號部分?tcp通過位元組序列號 確認機制來保證資料不丟失,接收方每接收乙個報文段,就要...

預處理的幾個問題

一 解決塊注釋 不能巢狀的問題 我們知道行注釋 可以多層巢狀和逐層取消,而塊注釋 不能巢狀或不能與 混用,否則有可能出現編譯錯誤。通常我們在程式除錯時如果要取消一大段 可以用條件編譯 if 0 endif實現 二 避免標頭檔案的重複包含 假如a.h中自定義了乙個結構體,在b.h和c.h中都又自定義了...

php連線mongoDB的幾個問題

連線方法網上有很多,在此就不多此一舉了,主要記錄一下遇到的問題。選擇資料庫時可通過如下語句 mongo new mongo mongodb db mongo dbname。這個時候就有個問題,一般情況下,這種寫法可以獲取資料庫,但是如果資料庫的名稱有特殊字元,比如,資料庫名稱為 edu dashi,...