星期五, 3月 02, 2012

Linux tcp session 處於 ESTABLISHED狀態 且無法釋放

今天在某環境看到

TCP webserver(Linux)連到 AP的連線(透過F5) 呈現不對等關係

webserver端(Linux)看到 連線數正常 30 - 40個連線ESTABLISHED

AP 端(Aix)看到 webserver(Linux)連線數為200多個ESTABLISHED session...

由以下指令來算ESTABLISHED 連線數
 #netstat -an | grep ".5555" | awk '{print $5}'| cut -d '.' -f 1-4 |sort | uniq -c | sort -nr
 291 192.168.xx.1
 281 192.168.xx.2
 255 192.168.xx.3
 214 192.168.xx.4
  43 192.168.xx.5
  27 192.168.xx.6
  10 192.168.xx.7
   8 192.168.xx.8
   6 192.168.xx.9

看了一下網路文章 , 敘述發生在有NAT的環境 , 看起來蠻符合的 , 好像需調整以下TCP timeout參數:

vi /etc/sysctl.conf 
加入以下參數, 修改linux timeout

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000   ==>預設為五天
to

net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 1200

再打sysctl -p 即生效
---
Linux NAT ip_conntrack 模組會記錄 tcp 通訊協定的 established connection 記錄, 而且預設 timeout 時間長達五天 (432,000 )


查看目前 ip_conntrack buffer 使用狀況指令

grep conn /proc/slabinfo

結果實例: ip_conntrack 3024 4090 384 409 409 1 (各值說明如下)
ip_conntrack the cache name
3024 the number of currently active objects
4090 the total number of available objects
384 the size of each object in bytes
409 the number of pages with at least one active object
409 the total number of allocated pages
1 the number of pages per slab are given

man slabinfo 可查詢詳細說明.

查出目前 ip_conntrack 記錄最多的前五名 IP
指令: cat /proc/net/ip_conntrack | cut -d ' ' -f 10 | cut -d '=' -f 2 | sort | uniq -c | sort -nr | head -n 5
結果實例:
    295 192.168.xx.2
     52 210.202.xx.xx
     14 125.231.xx.xx
     13 61.60.xx.xx
     11 61.60.xx.xx

由此可知, 192.168.xx.xx 佔用了絕大多數的 buffer, 推斷這個 IP AP 可能request大量連線.

--
最後回到AP Server :

找出使用5555 port 的socket
#netstat -Aan|grep ".5555"|more
f10000f0076f3358 tcp4       0      0  192.168.xx.xx.5555 192.168.xx.xx.4077 ESTA
BLISHED

用Aix 的kdb 指令 分析有使用到的socket.
#kdb

(0)> sockinfo f10000f0076f3358 tcpcb |grep -E "KEEP|opts"
    t_timer....... 00000000 (TCPT_KEEP)  ==> keep-alive對應的timer(TCPT_KEEP)數值為0,表示沒有設置timer時間
    opts........ 0004 (REUSEADDR)
(0)>

#rmsock f10000f0076f3358 tcpcb
 The socket 0x7946000 is being held by proccess 376864 (xxxx_srv).

#在Aix 下以下指令,找出所有被使用的port 的socket , 反查AP pid分析

接著使用shell scripts 找到所有的ESTABLISHED 連線, check socket 到底被誰占用
netstat -Aan |grep ".5555" |awk '{print $1}' > a.lst
for a in `cat a.lst`
do
rmsock $a tcpcb  >>a.log
done
cat a.log

發現所有的socket 都被AP server占用 ( pid 376864 )

The socket 0x7946000 is being held by proccess 376864 (xxxx_srv).
The socket 0x7946000 is being held by proccess 376864 (xxxx_srv).
.
.
這只是結果現象, 但究竟成因為何?

挑了另一台AP (Solaris) , 使用snoop指令可以撈取TCP neogiation.

正常連線如下

192.168.xx.xx -> server4         TCP D=5555 S=51760 Syn Seq=117012684 Len=0 Win=5840 Options=
        server4          -> 192.168. xx.xx  TCP D=51760 S=5555 Syn Ack=117012685 Seq=3082196059 Len=0 Win=49248 Options=2834143267 3777258114,mss 1460,nop,wscale 0,nop,nop,sackOK>
192.168.xx.xx  ->  server4          TCP D=5555 S=51760 Ack=3082196060 Seq=117012685 Len=0 Win=46 Options=2834143267>
192.168.xx.xx  ->  server4          TCP D=5555 S=51760 Push Ack=3082196060 Seq=117012685 Len=251 Win=46 Options=2834143267>
         server4          -> 192.168.xx.xx  TCP D=51760 S=5555 Ack=117012936 Seq=3082196060 Len=0 Win=48997 Options=2834143267 3777258116>
         server4          -> 192.168.xx.xx  TCP D=51760 S=5555 Push Ack=117012936 Seq=3082196060 Len=28 Win=48997 Options=2834143268 3777258116>
192.168.xx.xx  ->  server4          TCP D=5555 S=51760 Ack=3082196088 Seq=117012936 Len=0 Win=46 Options=2834143268>


而出問題的TCP連線 , 主要是DB 與Server之間...沒有收到 FIN ACK (goodbye) 封包...跟客戶聯繫後...請他們改AP程式要能夠主動closing釋放socket...觀察兩個禮拜後 就正常了....結案...原來DBA也要會分析網路...XD


192.168.xx.xx -> server4         TCP D=5555 S=54587 Ack=3375666357 Seq=1217496740 Len=0 Win=46 Options=2834248185>
192.168.xx.xx -> server4         TCP D=5555 S=54587 Fin Ack=3375666357 Seq=1217496740 Len=0 Win=46 Options=2834248185>
         server4          -> 192.168.xx.xx TCP D=54587 S=5555 Ack=1217496741 Seq=3375666357 Len=0 Win=48628 Options=2834248185 3778307603>
         server4          -> 192.168.xx.xx TCP D=54587 S=5555 Fin Ack=1217496741 Seq=3375666357 Len=0 Win=48628 Options=2834248185 3778307603>

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...