ITPub博客

首页 > 数据库 > Oracle > [20200318]生产系统网络state=ESTABLISHED和Timer=probe分析3.txt

[20200318]生产系统网络state=ESTABLISHED和Timer=probe分析3.txt

原创 Oracle 作者:lfree 时间:2020-03-20 10:41:26 0 删除 编辑

[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/,如需转载,请注明出处,否则将追究法律责任。

全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    2695
  • 访问量
    6464192