[20200318]生產系統網路state=ESTABLISHED和Timer=probe分析3.txt

lfree發表於2020-03-20

[20200318]生產系統網路state=ESTABLISHED和Timer=probe分析3.txt

--//前一段時間遇到的問題。http://blog.itpub.net/267265/viewspace-2678760/
--//我們rac環境跑2個資料庫,一臺使用tcp keepalive特性,另外一臺使用SQLNET.EXPIRE_TIME.再觀察看看。
net.ipv4.tcp_keepalive_time = 590
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 4

--//今天看看效果:
--//使用tcp keepalive特 性 伺服器:
#  netstat -notp  | grep probe|wc
      9      81    1135

#  netstat -tnop 2>/dev/null  | grep probe | awk '{print $7}' | cut -f1 -d"/"  | paste -sd, | xargs ps  -fp | column -t
UID     PID    PPID  C  STIME  TTY  TIME      CMD
oracle  41399  1     0  Feb21  ?    00:00:00  oracleAAAA1  (LOCAL=NO)
oracle  41401  1     0  Feb21  ?    00:00:00  oracleAAAA1  (LOCAL=NO)
oracle  41403  1     0  Feb21  ?    00:00:00  oracleAAAA1  (LOCAL=NO)
oracle  41407  1     0  Feb21  ?    00:00:00  oracleAAAA1  (LOCAL=NO)
oracle  41410  1     0  Feb21  ?    00:00:00  oracleAAAA1  (LOCAL=NO)
oracle  41419  1     0  Feb21  ?    00:00:00  oracleAAAA1  (LOCAL=NO)
oracle  41421  1     0  Feb21  ?    00:00:00  oracleAAAA1  (LOCAL=NO)
oracle  56446  1     0  Feb13  ?    00:00:01  oracleAAAA1  (LOCAL=NO)
oracle  56456  1     0  Feb13  ?    00:00:01  oracleAAAA1  (LOCAL=NO)
      
--//使用SQLNET.EXPIRE_TIME伺服器:
# netstat -notp  | grep probe|wc
     19     171    2395

#  netstat -tnop 2>/dev/null  | grep probe | awk '{print $7}' | cut -f1 -d"/"  | paste -sd, | xargs ps  -fp | column -t
UID     PID     PPID  C  STIME  TTY  TIME      CMD
oracle  10876   1     0  Mar12  ?    00:00:10  oracleBBBB2  (LOCAL=NO)
oracle  13084   1     0  Mar12  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  18552   1     0  Feb22  ?    00:00:02  oracleBBBB2  (LOCAL=NO)
oracle  27338   1     0  Mar13  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  31757   1     0  Mar13  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  32919   1     0  Mar12  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  39905   1     0  Mar13  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  41848   1     0  Mar07  ?    00:00:01  oracleBBBB2  (LOCAL=NO)
oracle  45505   1     0  Feb22  ?    00:00:02  oracleBBBB2  (LOCAL=NO)
oracle  57508   1     0  Mar10  ?    00:00:02  oracleBBBB2  (LOCAL=NO)
oracle  58939   1     0  Mar10  ?    00:00:20  oracleBBBB2  (LOCAL=NO)
oracle  60365   1     0  Mar10  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  68429   1     0  Mar02  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  68450   1     0  Mar06  ?    00:00:00  oracleAAAA2  (LOCAL=NO)
oracle  74697   1     0  Mar09  ?    00:00:01  oracleBBBB2  (LOCAL=NO)
oracle  85260   1     0  Mar12  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  86272   1     0  Mar10  ?    00:00:01  oracleAAAA2  (LOCAL=NO)
oracle  102040  1     0  Mar06  ?    00:00:20  oracleAAAA2  (LOCAL=NO)
oracle  118165  1     0  Mar05  ?    00:00:02  oracleAAAA2  (LOCAL=NO)

--//如果你注意觀察STIME列,就可以發現我3月5號清除後,使用tcp keepalive特 性 服 務器,都是3月5號之前的連線,3月5號之後沒有1個
--//連結。而使用SQLNET.EXPIRE_TIME伺服器,3月5日前後的日期都有,說明我的改動使用tcp keepalive是有效的。

--//我當時嚴重懷疑前臺接入認證的程式引起的問題。windows開機出現登入介面很快,實際上是一個假象,許多服務後臺程式還沒有完
--//成啟動,我們登入後接入認證的程式設計根本還沒來得及啟動,而且這個程式設計不好,啟動後會彈出一個介面,如果使用者選擇X而不
--//是最小化,機器無法接入網路,個人懷疑這個接入認證軟體引起的問題。

--//但是明顯現在看到的一些很早就已經連線伺服器的連線執行也很長時間,也會出現這樣的情況,原因就不是很清楚了.

--//決定統一修改使用tcp keepalive特性。
1.修改/etc/sysctl.conf,加入:
net.ipv4.tcp_keepalive_time = 590
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 4

--//註解 /u01/app/oracle/product/11.2.0.4/dbhome_1/network/admin/sqlnet.ora:
$ grep  -i expire sqlnet.ora
#SQLNET.EXPIRE_TIME=5

2.清除這些程式。
# sysctl  net.ipv4.tcp_max_orphans
net.ipv4.tcp_max_orphans = 262144

# sysctl -w net.ipv4.tcp_max_orphans=0

--//注選擇root使用者執行,不然netstat的輸出看不到程式號。
# netstat -tnop 2>/dev/null  | grep probe | awk '{print $7}' | cut -f1 -d"/"|xargs -IQ echo kill -9 Q | bash
or
# netstat -tnop 2>/dev/null  | grep probe | awk '{print $7}' | cut -f1 -d"/"|xargs -IQ kill -9 Q
--//等 netstat -tnop 2>/dev/null  | grep probe 沒有輸出後,執行:
--//我的測試最多等3*120秒這些連線state=FIN_WAIT1會全部消失。最後執行:
# sysctl -w net.ipv4.tcp_max_orphans =262144

# sysctl  net.ipv4.tcp_max_orphans
net.ipv4.tcp_max_orphans = 262144

3.剩下繼續觀察效果。
--//2天后觀察:

--//使用tcp keepalive特 性 服 務器:
#  netstat -notp  | grep probe|wc
      0       0       0
--//使用SQLNET.EXPIRE_TIME伺服器:
# netstat -notp  | grep probe|wc
      2      18     252

# netstat -tnop 2>/dev/null  | grep probe | awk '{print $7}' | cut -f1 -d"/"  | paste -sd, | xargs  ps -fp  | column -t
UID     PID    PPID  C  STIME  TTY  TIME      CMD
oracle  16924  1     0  Mar14  ?    00:00:00  oracleBBBB2  (LOCAL=NO)
oracle  37366  1     0  Mar11  ?    00:00:23  oracleBBBB2  (LOCAL=NO)

--//STIME 都是在我修改前的,估計以後會越來越少。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2681581/,如需轉載,請註明出處,否則將追究法律責任。

相關文章