ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [20230317]关于TIME_WAIT问题.txt

[20230317]关于TIME_WAIT问题.txt

原创 Linux操作系统 作者:lfree 时间:2023-03-23 10:03:52 0 删除 编辑

[20230317]关于TIME_WAIT问题.txt

--//被别人问起这个问题,服务器的网络链接出现大量TIME_WAIT连接。实际上达到怎么样量才是最严重也没有标准。
--//实际上如果不影响生产系统应用,可以完全不用理会。自己看了以前一些笔记,做一些总结,不知道对不对。

--//互联网上能找到许多图,感觉很复杂。实际上主要记住一点仅仅主动方(也就是发起方主动退出才会在发起方出现TIME_WAIT),比如:
--//对于oracle的单机数据库,正常情况下比如sqlplus通过网络连接执行sql语句正常退出,发起方在客户端,服务器不会出现TIME_WAIT
--//问题,TIME_WAIT仅仅出现在客户端。

--//在rac环境下如果应用程序使用scan ip连接,确实会在服务端出现大量的TIME_WAIT链接、因为最终的连接是vip地址。
--//所以rac环境中间件服务器尽量不要使用scan ip,直接可以使用vip配置,来减少中间环节,避免服务端出现大量TIME_WAIT的情况。
--//另外tnsping可以导致服务端出现TIME_WAIT。因为tnsping发起断开连接在服务端。
--//顺便验证自己的测试:

1.测试配置情况:
--//192.168.100.33 客户端
--//192.168.100.78 服务器

2.测试1:
--//192.168.100.33:
$  time sqlplus -s -l scott/book@192.168.100.78:1521/book <<<'select sysdate from dual;'
SCOTT@192.168.100.78:1521/book>
SYSDATE
-------------------
2023-03-21 08:46:04
real    0m0.072s
user    0m0.024s
sys     0m0.009s

$ seq 100 | xargs -IQ bash -c "netstat -tonp 2>/dev/null| grep 192.168.100.78 | ts.awk;sleep 1"
                      Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name    Timer
[2023-03-21 08:46:04] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (59.93/0/0)
[2023-03-21 08:46:05] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (58.87/0/0)
[2023-03-21 08:46:06] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (57.81/0/0)
[2023-03-21 08:46:07] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (56.75/0/0)
...
[2023-03-21 08:46:59] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (4.84/0/0)
[2023-03-21 08:47:00] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (3.78/0/0)
[2023-03-21 08:47:01] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (2.72/0/0)
[2023-03-21 08:47:02] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (1.66/0/0)
[2023-03-21 08:47:03] tcp        0      0 192.168.100.33:47790        192.168.100.78:1521         TIME_WAIT   -                   timewait (0.60/0/0)
--//题头我加上的.注意看前面的时间,基本可以对上一般timewait=60秒.
--//你可以发现time_wait发生在客户端.

--//192.168.100.78:
$ seq 100 | xargs -IQ bash -c "netstat -tonp 2>/dev/null| grep 192.168.100.33 | ts.awk;sleep 1"
--//没有输出或者仅仅输出1行(看运气).

3.测试2:
--//先做一个简单测试:
--//192.168.100.33:
$ seq 1 | xargs -IQ -P20 tnsping 192.168.100.78 1
TNS Ping Utility for Linux: Version 10.2.0.4.0 - Production on 21-MAR-2023 09:04:07
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Copyright (c) 1997,  2007, Oracle.  All rights reserved.
Used parameter files:
/u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
Used HOSTNAME adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=192.168.100.78))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.78)(PORT=1521)))
OK (0 msec)

--//192.168.100.33.打开另外窗口执行:
$ seq 70 | xargs -IQ bash -c "netstat -tonp 2>/dev/null| grep 192.168.100.78 | ts.awk;sleep 1"
--//没有任何输出.

--//192.168.100.78:
$ seq 70 | xargs -IQ bash -c "netstat -tonp 2>/dev/null| grep 192.168.100.33 | ts.awk;sleep 1"
                      Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name    Timer
[2023-03-21 09:04:07] tcp        0      0 192.168.100.78:1521         192.168.100.33:47918        TIME_WAIT   -                   timewait (59.87/0/0)
~~~~~~~~~~~~~~~~~~~~~
[2023-03-21 09:04:08] tcp        0      0 192.168.100.78:1521         192.168.100.33:47918        TIME_WAIT   -                   timewait (58.85/0/0)
[2023-03-21 09:04:09] tcp        0      0 192.168.100.78:1521         192.168.100.33:47918        TIME_WAIT   -                   timewait (57.83/0/0)
...
[2023-03-21 09:05:04] tcp        0      0 192.168.100.78:1521         192.168.100.33:47918        TIME_WAIT   -                   timewait (3.78/0/0)
[2023-03-21 09:05:05] tcp        0      0 192.168.100.78:1521         192.168.100.33:47918        TIME_WAIT   -                   timewait (2.76/0/0)
[2023-03-21 09:05:06] tcp        0      0 192.168.100.78:1521         192.168.100.33:47918        TIME_WAIT   -                   timewait (1.74/0/0)
[2023-03-21 09:05:07] tcp        0      0 192.168.100.78:1521         192.168.100.33:47918        TIME_WAIT   -                   timewait (0.72/0/0)
--//题头我加上的,注意看时间,基本能对上.
--//你可以发现time_wait发生在服务端.

4.测试3:
--//192.168.100.33:
$ seq 10000 | xargs -IQ -P20 tnsping 192.168.100.78 100 > /dev/null
--//相当于瞬间执行1000000次tnsping 。

--//192.168.100.78:
$ netstat -tonp 2>/dev/null | grep 192.168.100.33 | wc -l
61919

--//192.168.100.33:
$ time sqlplus -s -l scott/book@192.168.100.78:1521/book <<<'select sysdate from dual;'
SYSDATE
-------------------
2023-03-21 09:43:51
real    0m0.077s
user    0m0.023s
sys     0m0.011s
--//执行并不慢.另另外一个方面也说明出现大量time_wait问题不会太大.

--//192.168.100.33端也出现少量time_wait,我估计端口占用问题或者从192.168.100.33发出太多的tnsping,根本发不出去。
$ netstat -tonp| grep 192.168.100.78|head -10
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 192.168.100.33:40585        192.168.100.78:1521         TIME_WAIT   -                   timewait (40.32/0/0)
tcp        0      0 192.168.100.33:40615        192.168.100.78:1521         TIME_WAIT   -                   timewait (40.34/0/0)
tcp        0      0 192.168.100.33:40645        192.168.100.78:1521         TIME_WAIT   -                   timewait (40.36/0/0)
tcp        0      0 192.168.100.33:40657        192.168.100.78:1521         TIME_WAIT   -                   timewait (40.37/0/0)
tcp        0      0 192.168.100.33:40682        192.168.100.78:1521         TIME_WAIT   -                   timewait (40.38/0/0)
tcp        0      0 192.168.100.33:40932        192.168.100.78:1521         TIME_WAIT   -                   timewait (40.55/0/0)
tcp        0      0 192.168.100.33:40033        192.168.100.78:1521         TIME_WAIT   -                   timewait (39.94/0/0)
tcp        0      0 192.168.100.33:40194        192.168.100.78:1521         TIME_WAIT   -                   timewait (40.05/0/0)
tcp        0      0 192.168.100.33:39479        192.168.100.78:1521         TIME_WAIT   -                   timewait (39.56/0/0)
tcp        0      0 192.168.100.33:39048        192.168.100.78:1521         TIME_WAIT   -                   timewait (39.27/0/0)

$ netstat -tonp| grep 192.168.100.78|wc
    249    2241   32094

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2941142/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: [20230320]Trim CPU.txt
请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7971267