現象:大量訪問超時
跟進:定位log,有大量長耗時請求。
netstat -ant|awk '/^tcp/ end '
last_ack 14
syn_recv 348
established 5938
fin_wait1 229
fin_wait2 30
closing 33
time_wait 18122
closed:無連線是活動的或正在進行
listen:伺服器在等待進入呼叫
syn_recv:乙個連線請求已經到達,等待確認
syn_sent:應用已經開始,開啟乙個連線
established:正常資料傳輸狀態
fin_wait1:應用說它已經完成
fin_wait2:另一邊已同意釋放
itmed_wait:等待所有分組死掉
closing:兩邊同時嘗試關閉
time_wait:另一邊已初始化乙個釋放
last_ack:等待所有分組死掉
先來看看netstat:
netstat -n
active internet connections (w/o servers)
proto recv-q send-q local address foreign address state
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 time_wait
你實際執行這條命令的時候,可能會得到成千上萬條類似上面的記錄,不過我們就拿其中的一條就足夠了。
再來看看awk:
/^tcp/
濾出tcp開頭的記錄,遮蔽udp, socket等無關記錄。
state相當於定義了乙個名叫state的陣列
nf表示記錄的字段數,如上所示的記錄,nf等於6
$nf表示某個欄位的值,如上所示的記錄,$nf也就是$6,表示第6個字段的值,也就是time_wait
state[$nf]表示陣列元素的值,如上所示的記錄,就是state[time_wait]狀態的連線數
++state[$nf]表示把某個數加一,如上所示的記錄,就是把state[time_wait]狀態的連線數加一
end表示在最後階段要執行的命令
for(key in state)
遍歷陣列
net.ipv4.tcp_syncookies = 1 表示開啟syn cookies。當出現syn等待佇列溢位時,啟用cookies來處理,可防範少量syn攻擊,預設為0,表示關閉;
net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將time-wait sockets重新用於新的tcp連線,預設為0,表示關閉;
net.ipv4.tcp_tw_recycle = 1 表示開啟tcp連線中time-wait sockets的快速**,預設為0,表示關閉。
net.ipv4.tcp_fin_timeout 修改系預設的 timeout 時間
然後執行 /sbin/sysctl -p 讓引數生效.
/etc/sysctl.conf是乙個允許改變正在執行中的linux系統的介面,它包含一些tcp/ip堆疊和虛擬記憶體系統的高階選項,修改核心引數永久生效。
簡單來說,就是開啟系統的timewait重用和快速**。
如果以上配置調優後效能還不理想,可繼續修改一下配置:
vi /etc/sysctl.conf
net.ipv4.tcp_keepalive_time = 1200
#表示當keepalive起用的時候,tcp傳送keepalive訊息的頻度。預設是2小時,改為20分鐘。
net.ipv4.ip_local_port_range = 1024 65000
#表示用於向外連線的埠範圍。預設情況下很小:32768到61000,改為1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192
#表示syn佇列的長度,預設為1024,加大佇列長度為8192,可以容納更多等待連線的網路連線數。
net.ipv4.tcp_max_tw_buckets = 5000
#表示系統同時保持time_wait套接字的最大數量,如果超過這個數字,time_wait套接字將立刻被清除並列印警告資訊。
預設為180000,改為5000。對於apache、nginx等伺服器,上幾行的引數可以很好地減少time_wait套接字數量,但是對於 squid,效果卻不大。此項引數可以控制time_wait套接字的最大數量,避免squid伺服器被大量的time_wait套接字拖死。
JedisPool異常Jedis鏈結處理
問題現象 jedis 2.1.0.jar 問題現象 jedis 2.1.0.jar 基於jedispool管理jedis物件,通過get方法獲取值,出現key對應的value值錯誤,例如 k va a b bjedis.get a b 通過獲取key為a的值,但獲取了值b來。同一套 的專案,分別部署...
linux 編譯鏈結libcurl異常處理
strerror.c text 0x3f3 undefined reference to idna strerror libcurl libcurl.a libcurl la timeval.o in function curlx tvnow timeval.c text 0x8f undefine...
linux c tcp服務帶超時處理的c s
1.server deepfuture deepfuture laptop private mytest testtcps server wait.server read deepfuture.iteye.com server send hello server read deepfuture.it...