最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

笔试题:百万并发TCP连接到底考的是啥

XAMPP新闻 admin 100浏览 0评论

查看邮件的时候,偶然看到几年前参加应聘时答过的一道笔试题目,个人觉得这道题目还有些东西可聊,索性拿出来和大家分享一下。

题目要求

需求描述:使用 Golang 实现一个 client 和 server, 要求 server 可以支持百万级别的 TCP 并发连接,应用层协议不限制。然后通过 client 可以模拟百万并发请求,并且能够针对每一个请求都收到 server 的响应数据,响应时间不做要求。

加分项:可以支持到千万级别的并发请求。尽量实现功能,我们会根据以下几点做评价:

  • 你完成了多少,完成的好不好(比如内存占用错误率是否 crash 等)
  • 整个应用的设计、代码质量等方面
  • 记住:一个 work 的解决方案比好看但不 work 的解决方案好得多

提交要求

  • client/server 代码
  • 可以在 README 里记录设计思路,以及运行步骤
  • 将代码 push 到 GitHub 上,并发给我们地址

时间和其他说明:我们对笔试的时间没有强制要求,但希望能在收到你回复确认之后的两天内看到成果或收到开发进度的回复,你可以自己平衡完成的时间和效果。你可以先在自己电脑上测试,尽量控制内存占用。如果需要更好的机器,比如内存更大的 Linux 虚拟机,我们可以开虚拟机给你使用和测试,或者你也可以在自己的云虚拟机/VPS上进行测试,我们可以对合理范围内的全部费用进行报销。

简单来讲,该考目的题眼在于:百万级并发有数据交互的 TCP 连接

然而事情并非上述3个关键词那么简单:

  • “能够针对每一个请求都收到 server 的响应数据” — 有数据交互的 TCP 连接和空闲 TCP 连接完全是两回事,尤其在“百万级”这个限定词之下
  • “一个 work 的解决方案比好看但不 work 的解决方案好得多” — 怕你代码写出来了,文档也写的八九不离十,然后 demo 跑不起来
  • “可以在 README 里记录设计思路,以及运行步骤” — 网上代码一大堆,要能把各种细节说得清楚明白才相信代码真的是你自己完成的
  • “我们对笔试的时间没有强制要求,但希望能在收到你回复确认之后的两天内看到成果或收到开发进度的回复,你可以自己平衡完成的时间和效果” — 这话大家都看得懂吧,我们没有时间要求,但……你要自己看着办

2017年9月1日12:14收到的这封邮件,9月4日10:13回复了我的实现。

不得不说,这个题目不算难,但细节却不少,如果不是天时、地利、人和都具备了,2天半提交下面的答案还是有困难的(此处“人和”并非指有其他人帮忙)。同时,这个实现也远非完美,毕竟“时间紧、任务重”,很多可以进一步优化的地方只能留给后来人了。

下面的内容,正是我当时在 README 中给出的整体设计思路、系统配置,以及相应的实验数据。代码部分没有在本文中贴出,有需要的朋友可以关注下本公众号,后台私信我。


100w Concurrent TCP Connections Test

0x01 目标

  1. 解决 1M 并发 TCP 连接所需的系统参数调优问题;
  2. 基于 golang 进行简单 C/S 开发(主要涉及 TCP 和简单协议处理);
  3. 针对 golang 程序进行调优(CPU/MEM)

0x02 代码设计

  • server 监听 10000-11000 共 1000 个端口;
  • client 针对上述每个端口发起 5w 个连接,最多可以建立 1000 * 5w =~ 50M 连接;
  • client 发送 ping 给 server ,server 收到 ping 后回复 pong ;client 收到 pong 后,再次发送 ping ;循环往复;
  • client 侧在发送前引入 100 秒内的随机延时;server 侧在收到数据包后,回复应答前,引入 100 秒内的随机延时;当建立稳定的 100w 并发连接后,可以近似认为 QPS 为 1w ;

0x03 系统参数调整

1. 调整可用文件句柄数量 (C+S)

解决单机 10M 文件句柄的使用问题

  • 系统级别
$ vi /etc/sysctl.conf
...
fs.file-max = 10485760
  • 用户级别
$ vi /etc/security/limits.conf
...
*             soft    nofile          10485760
*             hard    nofile          10485760
root          soft    nofile          10485760
root          hard    nofile          10485760

查看

$ sysctl -p
$ sysctl fs.file-max
fs.file-max = 10485760

$ ulimit -n
10485760

可以通过 /proc/sys/fs/file-nr 查看当前整个系统所使用的文件句柄情况;

$ cat /proc/sys/fs/file-nr
768 0   10485760

上述三个值的含义如下

说明

  • the number of allocated file handles (i.e., the number of files presently opened).
  • the number of free file handles.
  • the maximum number of file handles (i.e., the same value as /proc/sys/fs/file-max).

2. 调整可用端口数量 (C)

针对特定的 [<serv_ip>,<serv_port>]组合,在 <cli_ip> 固定的情况下,最多可以建立 6w 连接;

因此,理论上讲,server 端只要监听 18 个端口就可支持 18 * 6w = 108w 连接(近似 1M 连接);

$ vi /etc/sysctl.conf
...
net.ipv4.ip_local_port_range = 5000 65000

查看

$ sysctl -p
$ sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 5000 65000

3. 与 tcp mem 使用相关的设置 (C+S)

$ vi /etc/sysctl.conf
...
net.ipv4.tcp_mem = 786432 2097152 3145728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216

tcp_mem 配置中三个值的含义如下(单位是 page,即 4096 字节)

说明

  • low: TCP doesn’t regulate its memory allocation when the number of pages it has allocated globally is below this number.
  • pressure: When the amount of memory allocated by TCP exceeds this number of pages, TCP moderates its memory consumption. This memory pressure state is exited once the number of pages allocated falls below the low mark.
  • high: The maximum number of pages, globally, that TCP will allocate. This value overrides any other limits imposed by the kernel.

重点关注 high 这个值:它代表允许所有 tcp sockets 用于排队缓冲数据报的页面量,当内存占用超过此值,系统将无法为新的 socket 连接分配内存,进而拒绝 TCP 连接

从节省内存的角度,设置如下:

  • 设置 tcp 的读写缓冲区的默认值均为 4K 大小,最大值设置为 16M
  • 设置 tcp_mem 三个值分别为 3G/8G/12G

4. nf_conntrack 相关 (C+S)

解决 “nf_conntrack: table full, dropping packet” 报错,无法建立新连接的问题

$ vi /etc/sysctl.conf
...
net.nf_conntrack_max = 1048576
net.netfilter.nf_conntrack_max = 1048576

背景知识:

  • nf_conntrack/ip_conntrack 跟 nat 有关,用来跟踪连接条目,它会使用一个哈希表来记录 established 的记录。nf_conntrack 在 2.6.15 被引入,而 ip_conntrack 在 2.6.22 被移除;如果该哈希表满了,就会出现
    “nf_conntrack: table full, dropping packet” 信息;
  • nf_conntrack 工作在 3 层,支持 IPv4 和 IPv6,而 ip_conntrack 只支持 IPv4。目前,大多的 ip_conntrack_* 已被 nf_conntrack_* 取代,很多 ip_conntrack_* 仅仅是个 alias ;

未修改前 nf_conntrack 的配置数值(对应之前建立了 26w+ 连接后报错的情况)

$ cat /proc/sys/net/netfilter/nf_conntrack_max
262144

可以通过如下命令查看当前 nf_conntrack 的 buffer 使用状况

$ cat /proc/sys/net/netfilter/nf_conntrack_count

0x04 测试方法

在机器1上执行

go build server.go
./server

在机器2上执行

go build client.go
./client xx.xx.xx.xx 1000000

0x05 辅助命令

  • 查看当前系统文件句柄使用情况
$ cat /proc/sys/fs/file-nr
768 0   10485760
  • 查看 nf_conntrack 使用情况
$ grep conntrack /proc/slabinfo
nf_conntrack_1      1100   1200    320   25    2 : tunables    0    0    0 : slabdata     48   

或者

$ cat /proc/sys/net/netfilter/nf_conntrack_count
6
  • 查看 TCP 连接情况
$ ss -s
Total: 151 (kernel 719)
TCP:   8 (estab 5, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*     719       -         -
RAW   0         0         0
UDP   1         1         0
TCP   8         7         1
INET      9         8         1
FRAG      0         0         0

或者

$ cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 152
TCP: inuse 7 orphan 0 tw 0 alloc 8 mem 1

或者

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  • 查看 CPU 和内存使用情况
top
free -m
vmstat -w 1

0x06 测试结果

client 侧连接建立过程

[#20#root@sre-net-test-2 /go/src/echo_client]$./client 192.168.122.143 1000000
client elapsed=0s pending=3 connected=0 failed=0
client elapsed=1s pending=1024 connected=10144 failed=0
client elapsed=2s pending=1024 connected=10146 failed=0
client elapsed=3s pending=1022 connected=10152 failed=0
client elapsed=4s pending=653 connected=12103 failed=0
client elapsed=5s pending=570 connected=23074 failed=0
client elapsed=6s pending=929 connected=32016 failed=0
client elapsed=7s pending=184 connected=43408 failed=0
client elapsed=8s pending=240 connected=53102 failed=0
client elapsed=9s pending=566 connected=62152 failed=0
client elapsed=10s pending=50 connected=69727 failed=0
client elapsed=11s pending=597 connected=81030 failed=0
client elapsed=12s pending=192 connected=88476 failed=0
client elapsed=13s pending=291 connected=98971 failed=0
client elapsed=14s pending=20 connected=108879 failed=0
client elapsed=15s pending=422 connected=119701 failed=0
client elapsed=16s pending=98 connected=130500 failed=0
client elapsed=17s pending=409 connected=141334 failed=0
client elapsed=18s pending=509 connected=151031 failed=0
client elapsed=19s pending=338 connected=160490 failed=0
client elapsed=20s pending=118 connected=169721 failed=0
client elapsed=21s pending=109 connected=180090 failed=0
client elapsed=22s pending=502 connected=189713 failed=0
client elapsed=23s pending=22 connected=197414 failed=0
client elapsed=24s pending=372 connected=207334 failed=0
client elapsed=25s pending=185 connected=217038 failed=0
client elapsed=26s pending=757 connected=224445 failed=0
client elapsed=27s pending=287 connected=234012 failed=0
client elapsed=28s pending=494 connected=242679 failed=0
client elapsed=29s pending=238 connected=250346 failed=0
client elapsed=30s pending=826 connected=257846 failed=0
client elapsed=31s pending=520 connected=266346 failed=0
client elapsed=32s pending=178 connected=275219 failed=0
client elapsed=33s pending=50 connected=284206 failed=0
client elapsed=34s pending=213 connected=294858 failed=0
client elapsed=35s pending=117 connected=305374 failed=0
client elapsed=36s pending=1024 connected=314041 failed=0
client elapsed=37s pending=378 connected=322711 failed=0
client elapsed=38s pending=210 connected=331391 failed=0
client elapsed=39s pending=1020 connected=338689 failed=0
client elapsed=40s pending=463 connected=347865 failed=0
client elapsed=41s pending=1024 connected=355408 failed=0
client elapsed=42s pending=194 connected=365243 failed=0
client elapsed=43s pending=389 connected=372941 failed=0
client elapsed=44s pending=1024 connected=380445 failed=0
client elapsed=45s pending=383 connected=390042 failed=0
client elapsed=46s pending=284 connected=399065 failed=0
client elapsed=47s pending=316 connected=407142 failed=0
client elapsed=48s pending=498 connected=415134 failed=0
client elapsed=49s pending=382 connected=423133 failed=0
client elapsed=50s pending=338 connected=431074 failed=0
client elapsed=51s pending=209 connected=438479 failed=0
client elapsed=52s pending=1010 connected=445898 failed=0
client elapsed=53s pending=858 connected=454240 failed=0
client elapsed=54s pending=764 connected=462163 failed=0
client elapsed=55s pending=311 connected=469774 failed=0
client elapsed=56s pending=360 connected=477522 failed=0
client elapsed=57s pending=495 connected=485721 failed=0
client elapsed=58s pending=222 connected=493167 failed=0
client elapsed=59s pending=682 connected=501378 failed=0
client elapsed=60s pending=290 connected=508955 failed=0
client elapsed=61s pending=279 connected=518046 failed=0
client elapsed=62s pending=312 connected=525514 failed=0
client elapsed=63s pending=311 connected=533362 failed=0
client elapsed=64s pending=456 connected=540858 failed=0
client elapsed=65s pending=553 connected=548679 failed=0
client elapsed=66s pending=1024 connected=554750 failed=0
client elapsed=67s pending=243 connected=561194 failed=0
client elapsed=68s pending=465 connected=569489 failed=0
client elapsed=69s pending=180 connected=576463 failed=0
client elapsed=70s pending=276 connected=584980 failed=0
client elapsed=71s pending=258 connected=592781 failed=0
client elapsed=72s pending=213 connected=600833 failed=0
client elapsed=73s pending=382 connected=608126 failed=0
client elapsed=74s pending=1015 connected=615899 failed=0
client elapsed=75s pending=552 connected=623893 failed=0
client elapsed=76s pending=495 connected=630487 failed=0
client elapsed=77s pending=403 connected=638223 failed=0
client elapsed=78s pending=763 connected=645606 failed=0
client elapsed=79s pending=458 connected=652345 failed=0
client elapsed=80s pending=699 connected=659017 failed=0
client elapsed=81s pending=470 connected=665654 failed=0
client elapsed=82s pending=173 connected=673557 failed=0
client elapsed=83s pending=415 connected=680095 failed=0
client elapsed=84s pending=424 connected=686942 failed=0
client elapsed=85s pending=683 connected=693727 failed=0
client elapsed=86s pending=505 connected=700993 failed=0
client elapsed=87s pending=1024 connected=707161 failed=0
client elapsed=88s pending=513 connected=715022 failed=0
client elapsed=89s pending=209 connected=722585 failed=0
client elapsed=90s pending=514 connected=730048 failed=0
client elapsed=91s pending=692 connected=736592 failed=0
client elapsed=92s pending=465 connected=744223 failed=0
client elapsed=93s pending=406 connected=750504 failed=0
client elapsed=94s pending=875 connected=757469 failed=0
client elapsed=95s pending=393 connected=764748 failed=0
client elapsed=96s pending=539 connected=771786 failed=0
client elapsed=97s pending=782 connected=778386 failed=0
client elapsed=98s pending=287 connected=785798 failed=0
client elapsed=99s pending=416 connected=792419 failed=0
client elapsed=100s pending=429 connected=800637 failed=0
client elapsed=101s pending=373 connected=806970 failed=0
client elapsed=102s pending=322 connected=814544 failed=0
client elapsed=103s pending=993 connected=820715 failed=0
client elapsed=104s pending=367 connected=828541 failed=0
client elapsed=105s pending=552 connected=835060 failed=0
client elapsed=106s pending=573 connected=842091 failed=0
client elapsed=107s pending=367 connected=849239 failed=0
client elapsed=108s pending=635 connected=856105 failed=0
client elapsed=109s pending=739 connected=862666 failed=0
client elapsed=110s pending=419 connected=869539 failed=0
client elapsed=111s pending=200 connected=875836 failed=0
client elapsed=112s pending=785 connected=882901 failed=0
client elapsed=113s pending=401 connected=890377 failed=0
client elapsed=114s pending=485 connected=897479 failed=0
client elapsed=115s pending=384 connected=904112 failed=0
client elapsed=116s pending=360 connected=911293 failed=0
client elapsed=117s pending=777 connected=917024 failed=0
client elapsed=118s pending=1024 connected=923084 failed=0
client elapsed=119s pending=581 connected=925911 failed=0
client elapsed=120s pending=131 connected=932410 failed=0
client elapsed=121s pending=520 connected=939410 failed=0
client elapsed=122s pending=390 connected=945955 failed=0
client elapsed=123s pending=524 connected=952855 failed=0
client elapsed=124s pending=414 connected=958906 failed=0
client elapsed=125s pending=379 connected=965819 failed=0
client elapsed=126s pending=284 connected=971910 failed=0
client elapsed=127s pending=346 connected=978950 failed=0
client elapsed=128s pending=799 connected=985329 failed=0
client elapsed=129s pending=446 connected=992711 failed=0
client elapsed=130s pending=438 connected=998996 failed=0
client elapsed=131s pending=0 connected=1000000 failed=0
client elapsed=132s pending=0 connected=1000000 failed=0
。。。
client elapsed=344s pending=0 connected=1000000 failed=0
client elapsed=345s pending=0 connected=1000000 failed=0
^C
[#21#root@sre-net-test-2 /go/src/echo_client]$

机器信息

[#34#root@sre-net-test-2 ~]$lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             8
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Model name:            Intel Core Processor (Haswell)
Stepping:              1
CPU MHz:               2596.990
BogoMIPS:              5193.98
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0-7
Flags:                 fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
[#35#root@sre-net-test-2 ~]$
[#35#root@sre-net-test-2 ~]$uname -a
Linux sre-net-test-2 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[#36#root@sre-net-test-2 ~]$
[#36#root@sre-net-test-2 ~]$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
[#37#root@sre-net-test-2 ~]$free -g
total        used        free      shared  buff/cache   available
Mem:             31           0          30           0           0          30
Swap:             3           0           3
[#38#root@sre-net-test-2 ~]$

初始状态

[#42#root@sre-net-test-2 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1      1630   1725    320   25    2 : tunables    0    0    0 : slabdata     69     69      0


[#43#root@sre-net-test-2 ~]$ss -s
Total: 152 (kernel 1151)
TCP:   8 (estab 6, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*      1151      -         -
RAW      0         0         0
UDP      1         1         0
TCP      8         7         1
INET      9         8         1
FRAG      0         0         0


[#44#root@sre-net-test-2 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 152
TCP: inuse 7 orphan 0 tw 0 alloc 8 mem 2


[#45#root@sre-net-test-2 ~]$cat /proc/sys/fs/file-nr
1056    0    10485760


[#46#root@sre-net-test-2 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174         164       31039           8         971       31611
Swap:          4095           0        4095


[#47#root@sre-net-test-2 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 6
[#48#root@sre-net-test-2 ~]$

中间状态

  • 保持 1M 活跃连接时
top - 00:37:06 up 1 day, 15:12,  6 users,  load average: 0.81, 0.56, 0.36
Threads:  16 total,   2 running,  14 sleeping,   0 stopped,   0 zombie
%Cpu0  :  4.1 us,  6.4 sy,  0.0 ni, 89.2 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu1  :  0.8 us,  3.3 sy,  0.0 ni, 70.5 id,  0.0 wa,  0.0 hi, 25.4 si,  0.0 st
%Cpu2  :  2.4 us,  4.5 sy,  0.0 ni, 93.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  4.0 us,  5.7 sy,  0.0 ni, 89.9 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu4  :  6.2 us, 14.7 sy,  0.0 ni, 79.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  3.0 us,  6.7 sy,  0.0 ni, 90.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  2.0 us,  3.4 sy,  0.0 ni, 94.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  3.4 us,  5.7 sy,  0.0 ni, 90.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32946980 total, 22635508 free,  5592036 used,  4719436 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used. 24006016 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                        nTH P nMaj nMin WCHAN
13286 root      20   0 6030316 5.156g   2616 S 13.7 16.4   0:17.35 client                          16 4    0 113k futex_wai+ 
13282 root      20   0 6030316 5.156g   2616 S 10.7 16.4   0:11.71 client                          16 4    0    9 poll_sche+ 
13311 root      20   0 6030316 5.156g   2616 R  9.0 16.4   0:01.16 client                          16 5    0 5017 futex_wai+
13310 root      20   0 6030316 5.156g   2616 S  8.3 16.4   0:04.56 client                          16 7    0  12k futex_wai+ 
13291 root      20   0 6030316 5.156g   2616 S  8.0 16.4   0:11.65 client                          16 3    0  81k futex_wai+ 
13288 root      20   0 6030316 5.156g   2616 R  7.3 16.4   0:15.08 client                          16 6    0 116k futex_wai+
13309 root      20   0 6030316 5.156g   2616 S  7.3 16.4   0:04.57 client                          16 1    0 9624 futex_wai+ 
13284 root      20   0 6030316 5.156g   2616 S  7.0 16.4   0:16.63 client                          16 0    0 116k ep_poll    
13281 root      20   0 6030316 5.156g   2616 S  5.7 16.4   0:15.21 client                          16 2    0 114k futex_wai+
13283 root      20   0 6030316 5.156g   2616 S  4.7 16.4   0:13.31 client                          16 0    0 122k futex_wai+ 
13292 root      20   0 6030316 5.156g   2616 S  4.3 16.4   0:16.04 client                          16 3    0 115k futex_wai+ 
13285 root      20   0 6030316 5.156g   2616 S  0.0 16.4   0:09.93 client                          16 7    0 105k futex_wai+
13287 root      20   0 6030316 5.156g   2616 S  0.0 16.4   0:15.60 client                          16 3    0 125k futex_wai+ 
13289 root      20   0 6030316 5.156g   2616 S  0.0 16.4   0:12.10 client                          16 5    0 102k futex_wai+ 
13290 root      20   0 6030316 5.156g   2616 S  0.0 16.4   0:16.12 client                          16 5    0 124k futex_wai+
13293 root      20   0 6030316 5.156g   2616 S  0.0 16.4   0:14.77 client                          16 7    0 108k futex_wai+




top - 00:38:32 up 1 day, 15:14,  6 users,  load average: 0.82, 0.64, 0.40
Threads:  16 total,   2 running,  14 sleeping,   0 stopped,   0 zombie
%Cpu0  :  4.3 us,  8.7 sy,  0.0 ni, 87.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni, 82.4 id,  0.0 wa,  0.0 hi, 17.6 si,  0.0 st
%Cpu2  :  4.5 us,  4.5 sy,  0.0 ni, 90.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  5.0 us, 10.0 sy,  0.0 ni, 85.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  9.1 us,  0.0 sy,  0.0 ni, 90.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  5.0 us, 10.0 sy,  0.0 ni, 85.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  : 13.0 us, 13.0 sy,  0.0 ni, 73.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32946980 total, 22574396 free,  5652968 used,  4719616 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used. 23945004 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                        nTH P nMaj nMin WCHAN
13283 root      20   0 6078360 5.214g   2616 S 13.6 16.6   0:20.39 client                          16 7    0 123k futex_wai+
13281 root      20   0 6078360 5.214g   2616 S  9.1 16.6   0:22.04 client                          16 6    0 115k ep_poll
13291 root      20   0 6078360 5.214g   2616 S  9.1 16.6   0:20.07 client                          16 4    0  83k -          
13292 root      20   0 6078360 5.214g   2616 S  9.1 16.6   0:23.80 client                          16 3    0 116k futex_wai+ 
13309 root      20   0 6078360 5.214g   2616 S  9.1 16.6   0:10.18 client                          16 2    0  10k futex_wai+
13282 root      20   0 6078360 5.214g   2616 R  4.5 16.6   0:19.57 client                          16 3    0    9 futex_wai+ 
13290 root      20   0 6078360 5.214g   2616 S  4.5 16.6   0:22.62 client                          16 0    0 125k futex_wai+ 
13310 root      20   0 6078360 5.214g   2616 S  4.5 16.6   0:09.26 client                          16 7    0  12k ep_poll
13311 root      20   0 6078360 5.214g   2616 R  4.5 16.6   0:08.22 client                          16 6    0 6290 futex_wai+ 
13284 root      20   0 6078360 5.214g   2616 S  0.0 16.6   0:20.54 client                          16 7    0 117k futex_wai+ 
13285 root      20   0 6078360 5.214g   2616 S  0.0 16.6   0:09.93 client                          16 7    0 105k futex_wai+
13286 root      20   0 6078360 5.214g   2616 S  0.0 16.6   0:24.90 client                          16 0    0 114k futex_wai+ 
13287 root      20   0 6078360 5.214g   2616 S  0.0 16.6   0:15.60 client                          16 3    0 125k futex_wai+ 
13288 root      20   0 6078360 5.214g   2616 S  0.0 16.6   0:21.22 client                          16 6    0 117k futex_wai+
13289 root      20   0 6078360 5.214g   2616 S  0.0 16.6   0:12.10 client                          16 5    0 102k futex_wai+ 
13293 root      20   0 6078360 5.214g   2616 S  0.0 16.6   0:14.77 client    

退出过程

[#52#root@sre-net-test-2 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1    1000125 1000125    320   25    2 : tunables    0    0    0 : slabdata  40005  40005      0


[#53#root@sre-net-test-2 ~]$ss -s
Total: 1000152 (kernel 1000275)
TCP:   1000008 (estab 1000006, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*      1000275   -         -
RAW      0         0         0
UDP      1         1         0
TCP      1000008   1000007   1
INET      1000009   1000008   1
FRAG      0         0         0


[#54#root@sre-net-test-2 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 1000152
TCP: inuse 1000007 orphan 0 tw 0 alloc 1000008 mem 497703


[#55#root@sre-net-test-2 ~]$cat /proc/sys/fs/file-nr
1000960    0    10485760


[#56#root@sre-net-test-2 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174        5526       22038           8        4609       23377
Swap:          4095           0        4095


[#57#root@sre-net-test-2 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 1000006
[#58#root@sre-net-test-2 ~]$


[#58#root@sre-net-test-2 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1    344984 909550    320   25    2 : tunables    0    0    0 : slabdata  36382  36382      0


[#59#root@sre-net-test-2 ~]$ss -s
Total: 152 (kernel 1526)
TCP:   48307 (estab 6, closed 48298, orphaned 1, synrecv 0, timewait 48298/0), ports 0

Transport Total     IP        IPv6
*      1526      -         -
RAW      0         0         0
UDP      1         1         0
TCP      9         8         1
INET      10        9         1
FRAG      0         0         0


[#60#root@sre-net-test-2 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 152
TCP: inuse 8 orphan 1 tw 48298 alloc 9 mem 4


[#61#root@sre-net-test-2 ~]$cat /proc/sys/fs/file-nr
1120    0    10485760


[#62#root@sre-net-test-2 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174         168       30515           8        1491       31088
Swap:          4095           0        4095


[#63#root@sre-net-test-2 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 6
FIN_WAIT2 198
CLOSING 1
TIME_WAIT 47927
[#64#root@sre-net-test-2 ~]$


[#64#root@sre-net-test-2 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1    184113 810775    320   25    2 : tunables    0    0    0 : slabdata  32431  32431      0
[#65#root@sre-net-test-2 ~]$ss -s
Total: 152 (kernel 1526)
TCP:   24 (estab 6, closed 16, orphaned 0, synrecv 0, timewait 16/0), ports 0

Transport Total     IP        IPv6
*      1526      -         -
RAW      0         0         0
UDP      1         1         0
TCP      8         7         1
INET      9         8         1
FRAG      0         0         0


[#66#root@sre-net-test-2 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 152
TCP: inuse 7 orphan 0 tw 16 alloc 8 mem 2


[#67#root@sre-net-test-2 ~]$cat /proc/sys/fs/file-nr
1088    0    10485760


[#68#root@sre-net-test-2 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174         166       30615           8        1392       31188
Swap:          4095           0        4095


[#69#root@sre-net-test-2 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 6
TIME_WAIT 16
[#70#root@sre-net-test-2 ~]$


[#70#root@sre-net-test-2 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1      1828   3225    320   25    2 : tunables    0    0    0 : slabdata    129    129      0


[#71#root@sre-net-test-2 ~]$ss -s
Total: 152 (kernel 1526)
TCP:   8 (estab 6, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*      1526      -         -
RAW      0         0         0
UDP      1         1         0
TCP      8         7         1
INET      9         8         1
FRAG      0         0         0


[#72#root@sre-net-test-2 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 152
TCP: inuse 7 orphan 0 tw 0 alloc 8 mem 2


[#73#root@sre-net-test-2 ~]$cat /proc/sys/fs/file-nr
1088    0    10485760


[#74#root@sre-net-test-2 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174         164       31038           8         971       31611
Swap:          4095           0        4095


[#75#root@sre-net-test-2 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 6
[#76#root@sre-net-test-2 ~]$

server 侧连接建立过程

[#20#root@sre-net-test-1 /go/src/echo_server]$./server
server elapsed=0s connected=0 failed=0
server elapsed=1s connected=0 failed=0
server elapsed=2s connected=0 failed=0
server elapsed=3s connected=0 failed=0
server elapsed=4s connected=10010 failed=0
server elapsed=5s connected=10948 failed=0
server elapsed=6s connected=22065 failed=0
server elapsed=7s connected=31764 failed=0
server elapsed=8s connected=41572 failed=0
server elapsed=9s connected=51900 failed=0
server elapsed=10s connected=61246 failed=0
server elapsed=11s connected=68573 failed=0
server elapsed=12s connected=79915 failed=0
server elapsed=13s connected=87502 failed=0
server elapsed=14s connected=97406 failed=0
server elapsed=15s connected=107836 failed=0
server elapsed=16s connected=118193 failed=0
server elapsed=17s connected=129331 failed=0
server elapsed=18s connected=139999 failed=0
server elapsed=19s connected=149502 failed=0
server elapsed=20s connected=159290 failed=0
server elapsed=21s connected=168668 failed=0
server elapsed=22s connected=178873 failed=0
server elapsed=23s connected=188805 failed=0
server elapsed=24s connected=196097 failed=0
server elapsed=25s connected=206218 failed=0
server elapsed=26s connected=214992 failed=0
server elapsed=27s connected=223033 failed=0
server elapsed=28s connected=232870 failed=0
server elapsed=29s connected=241640 failed=0
server elapsed=30s connected=249078 failed=0
server elapsed=31s connected=256071 failed=0
server elapsed=32s connected=264859 failed=0
server elapsed=33s connected=273554 failed=0
server elapsed=34s connected=283010 failed=0
server elapsed=35s connected=293684 failed=0
server elapsed=36s connected=304321 failed=0
server elapsed=37s connected=313028 failed=0
server elapsed=38s connected=321583 failed=0
server elapsed=39s connected=329223 failed=0
server elapsed=40s connected=337351 failed=0
server elapsed=41s connected=346275 failed=0
server elapsed=42s connected=354296 failed=0
server elapsed=43s connected=363243 failed=0
server elapsed=44s connected=371570 failed=0
server elapsed=45s connected=379209 failed=0
server elapsed=46s connected=388479 failed=0
server elapsed=47s connected=396812 failed=0
server elapsed=48s connected=405172 failed=0
server elapsed=49s connected=412905 failed=0
server elapsed=50s connected=421268 failed=0
server elapsed=51s connected=429517 failed=0
server elapsed=52s connected=437173 failed=0
server elapsed=53s connected=444994 failed=0
server elapsed=54s connected=452912 failed=0
server elapsed=55s connected=460720 failed=0
server elapsed=56s connected=467850 failed=0
server elapsed=57s connected=476024 failed=0
server elapsed=58s connected=484344 failed=0
server elapsed=59s connected=491947 failed=0
server elapsed=60s connected=499676 failed=0
server elapsed=61s connected=507079 failed=0
server elapsed=62s connected=515911 failed=0
server elapsed=63s connected=523284 failed=0
server elapsed=64s connected=532059 failed=0
server elapsed=65s connected=539835 failed=0
server elapsed=66s connected=547125 failed=0
server elapsed=67s connected=553713 failed=0
server elapsed=68s connected=559223 failed=0
server elapsed=69s connected=567163 failed=0
server elapsed=70s connected=574602 failed=0
server elapsed=71s connected=583205 failed=0
server elapsed=72s connected=590758 failed=0
server elapsed=73s connected=598515 failed=0
server elapsed=74s connected=606685 failed=0
server elapsed=75s connected=614587 failed=0
server elapsed=76s connected=622378 failed=0
server elapsed=77s connected=628614 failed=0
server elapsed=78s connected=635950 failed=0
server elapsed=79s connected=644184 failed=0
server elapsed=80s connected=650726 failed=0
server elapsed=81s connected=657535 failed=0
server elapsed=82s connected=664052 failed=0
server elapsed=83s connected=671167 failed=0
server elapsed=84s connected=677507 failed=0
server elapsed=85s connected=685271 failed=0
server elapsed=86s connected=692177 failed=0
server elapsed=87s connected=698739 failed=0
server elapsed=88s connected=705659 failed=0
server elapsed=89s connected=713117 failed=0
server elapsed=90s connected=719847 failed=0
server elapsed=91s connected=727238 failed=0
server elapsed=92s connected=734818 failed=0
server elapsed=93s connected=741995 failed=0
server elapsed=94s connected=748942 failed=0
server elapsed=95s connected=756126 failed=0
server elapsed=96s connected=763275 failed=0
server elapsed=97s connected=770020 failed=0
server elapsed=98s connected=776703 failed=0
server elapsed=99s connected=783746 failed=0
server elapsed=100s connected=790494 failed=0
server elapsed=101s connected=798418 failed=0
server elapsed=102s connected=805395 failed=0
server elapsed=103s connected=812653 failed=0
server elapsed=104s connected=818639 failed=0
server elapsed=105s connected=825918 failed=0
server elapsed=106s connected=832933 failed=0
server elapsed=107s connected=840182 failed=0
server elapsed=108s connected=846978 failed=0
server elapsed=109s connected=853888 failed=0
server elapsed=110s connected=860045 failed=0
server elapsed=111s connected=867001 failed=0
server elapsed=112s connected=873611 failed=0
server elapsed=113s connected=880882 failed=0
server elapsed=114s connected=887907 failed=0
server elapsed=115s connected=895190 failed=0
server elapsed=116s connected=902190 failed=0
server elapsed=117s connected=909349 failed=0
server elapsed=118s connected=915321 failed=0
server elapsed=119s connected=921889 failed=0
server elapsed=120s connected=924318 failed=0
server elapsed=121s connected=929079 failed=0
server elapsed=122s connected=935559 failed=0
server elapsed=123s connected=942503 failed=0
server elapsed=124s connected=949442 failed=0
server elapsed=125s connected=956530 failed=0
server elapsed=126s connected=962051 failed=0
server elapsed=127s connected=968561 failed=0
server elapsed=128s connected=975642 failed=0
server elapsed=129s connected=982794 failed=0
server elapsed=130s connected=989628 failed=0
server elapsed=131s connected=996698 failed=0
server elapsed=132s connected=999239 failed=0
server elapsed=133s connected=999784 failed=0
server elapsed=134s connected=999923 failed=0
server elapsed=135s connected=999941 failed=0
server elapsed=136s connected=999941 failed=0
server elapsed=137s connected=1000000 failed=0
server elapsed=138s connected=1000000 failed=0
server elapsed=139s connected=1000000 failed=0
。。。
server elapsed=344s connected=1000000 failed=0
server elapsed=345s connected=1000000 failed=0
server elapsed=346s connected=1000000 failed=0
server elapsed=347s connected=991463 failed=8537
^C
[#21#root@sre-net-test-1 /go/src/echo_server]$

机器信息

[#24#root@sre-net-test-1 ~]$lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             8
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Model name:            Intel Core Processor (Haswell)
Stepping:              1
CPU MHz:               2596.990
BogoMIPS:              5193.98
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0-7
Flags:                 fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx hypervisor lahf_lm fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
[#25#root@sre-net-test-1 ~]$
[#25#root@sre-net-test-1 ~]$uname -a
Linux sre-net-test-1 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[#26#root@sre-net-test-1 ~]$
[#26#root@sre-net-test-1 ~]$lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
[#27#root@sre-net-test-1 ~]$free -g
total        used        free      shared  buff/cache   available
Mem:             31           0          30           0           0          30
Swap:             3           0           3
[#28#root@sre-net-test-1 ~]$

初始状态

[#97#root@sre-net-test-1 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1      1680   1775    320   25    2 : tunables    0    0    0 : slabdata     71     71      0


[#98#root@sre-net-test-1 ~]$ss -s
Total: 153 (kernel 779)
TCP:   9 (estab 6, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*      779       -         -
RAW      0         0         0
UDP      1         1         0
TCP      9         8         1
INET      10        9         1
FRAG      0         0         0


[#99#root@sre-net-test-1 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 153
TCP: inuse 8 orphan 0 tw 0 alloc 9 mem 3


[#100#root@sre-net-test-1 ~]$cat /proc/sys/fs/file-nr
1088    0    10485760


[#101#root@sre-net-test-1 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174         181       30990           8        1003       31590
Swap:          4095           0        4095


[#102#root@sre-net-test-1 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 6
[#103#root@sre-net-test-1 ~]$

中间状态

  • 尚未达到 1M 活跃连接时
top - 00:35:51 up 1 day, 15:12,  6 users,  load average: 1.56, 0.60, 0.43
Threads:  13 total,   4 running,   9 sleeping,   0 stopped,   0 zombie
%Cpu0  :  4.5 us, 10.3 sy,  0.0 ni, 85.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.4 sy,  0.0 ni, 50.6 id,  0.0 wa,  0.0 hi, 48.6 si,  0.4 st
%Cpu2  :  3.5 us,  8.7 sy,  0.0 ni, 87.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  5.1 us, 10.1 sy,  0.0 ni, 84.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.7 us,  4.3 sy,  0.0 ni, 95.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  2.7 us,  6.8 sy,  0.0 ni, 90.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  3.1 us,  6.6 sy,  0.0 ni, 90.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  3.4 us,  6.1 sy,  0.0 ni, 90.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32946980 total, 25488180 free,  3034676 used,  4424124 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used. 26769768 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                        nTH P nMaj nMin WCHAN
15622 root      20   0 3341616 2.710g   2636 S  9.0  8.6   0:05.28 server                          13 4    0    7 poll_sche+
15625 root      20   0 3341616 2.710g   2636 S  8.7  8.6   0:05.81 server                          13 3    0  64k futex_wai+
15623 root      20   0 3341616 2.710g   2636 R  8.3  8.6   0:04.61 server                          13 5    0  58k poll_sche+
15626 root      20   0 3341616 2.710g   2636 S  8.3  8.6   0:06.53 server                          13 0    0  73k futex_wai+
15636 root      20   0 3341616 2.710g   2636 S  7.7  8.6   0:02.72 server                          13 6    0  15k futex_wai+
15630 root      20   0 3341616 2.710g   2636 S  7.3  8.6   0:05.69 server                          13 0    0  59k -
15632 root      20   0 3341616 2.710g   2636 R  7.3  8.6   0:06.62 server                          13 5    0  78k -
15621 root      20   0 3341616 2.710g   2636 S  7.0  8.6   0:04.18 server                          13 7    0  56k poll_sche+
15627 root      20   0 3341616 2.710g   2636 R  6.3  8.6   0:05.55 server                          13 2    0  59k -
15628 root      20   0 3341616 2.710g   2636 R  6.0  8.6   0:06.73 server                          13 6    0  71k futex_wai+
15629 root      20   0 3341616 2.710g   2636 S  6.0  8.6   0:05.87 server                          13 2    0  64k futex_wai+
15624 root      20   0 3341616 2.710g   2636 S  4.0  8.6   0:06.10 server                          13 5    0  70k futex_wai+
15631 root      20   0 3341616 2.710g   2636 S  0.0  8.6   0:05.93 server   
  • 保持 1M 活跃连接时
top - 00:38:08 up 1 day, 15:15,  6 users,  load average: 0.90, 0.68, 0.48
Threads:  15 total,   0 running,  15 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  5.3 sy,  0.0 ni, 94.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.0 sy,  0.0 ni, 63.2 id,  0.0 wa,  0.0 hi, 36.8 si,  0.0 st
%Cpu2  :  4.8 us, 14.3 sy,  0.0 ni, 81.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  : 13.6 us, 13.6 sy,  0.0 ni, 72.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  4.8 us,  4.8 sy,  0.0 ni, 90.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  5.3 us,  5.3 sy,  0.0 ni, 89.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  5.0 us,  5.0 sy,  0.0 ni, 90.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  0.0 us,  4.8 sy,  0.0 ni, 95.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 32946980 total, 24289360 free,  3633780 used,  5023840 buff/cache
KiB Swap:  4194300 total,  4194300 free,        0 used. 25693008 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                        nTH P nMaj nMin WCHAN
15625 root      20   0 4016584 3.276g   2636 S 14.3 10.4   0:13.22 server                          15 0    0  70k futex_wai+
15629 root      20   0 4016584 3.276g   2636 S 14.3 10.4   0:15.72 server                          15 2    0  76k -
15626 root      20   0 4016584 3.276g   2636 S  9.5 10.4   0:16.44 server                          15 6    0  85k futex_wai+
15628 root      20   0 4016584 3.276g   2636 S  9.5 10.4   0:16.08 server                          15 3    0  87k futex_wai+
15622 root      20   0 4016584 3.276g   2636 S  4.8 10.4   0:17.61 server                          15 5    0    9 poll_sche+
15627 root      20   0 4016584 3.276g   2636 S  4.8 10.4   0:17.11 server                          15 0    0  74k futex_wai+
15630 root      20   0 4016584 3.276g   2636 S  4.8 10.4   0:16.64 server                          15 6    0  74k futex_wai+
15631 root      20   0 4016584 3.276g   2636 S  4.8 10.4   0:16.31 server                          15 5    0  69k futex_wai+
15632 root      20   0 4016584 3.276g   2636 S  4.8 10.4   0:18.30 server                          15 4    0  94k futex_wai+
15621 root      20   0 4016584 3.276g   2636 S  0.0 10.4   0:16.04 server                          15 2    0  70k futex_wai+
15623 root      20   0 4016584 3.276g   2636 S  0.0 10.4   0:11.78 server                          15 5    0  69k futex_wai+
15624 root      20   0 4016584 3.276g   2636 S  0.0 10.4   0:12.39 server                          15 5    0  81k futex_wai+
15636 root      20   0 4016584 3.276g   2636 S  0.0 10.4   0:05.48 server                          15 7    0  28k futex_wai+
15647 root      20   0 4016584 3.276g   2636 S  0.0 10.4   0:02.81 server                          15 4    0  225 futex_wai+
15648 root      20   0 4016584 3.276g   2636 S  0.0 10.4   0:01.83 server      
  • 保持 1M 活跃连接时
[#106#root@sre-net-test-1 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1    1001625 1001625    320   25    2 : tunables    0    0    0 : slabdata  40065  40065      0


[#107#root@sre-net-test-1 ~]$ss -s
Total: 1001153 (kernel 1001275)
TCP:   1001009 (estab 1000006, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*      1001275   -         -
RAW      0         0         0
UDP      1         1         0
TCP      1001009   8         1001001
INET      1001010   9         1001001
FRAG      0         0         0


[#108#root@sre-net-test-1 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 1001153
TCP: inuse 8 orphan 0 tw 0 alloc 1001009 mem 478116


[#109#root@sre-net-test-1 ~]$cat /proc/sys/fs/file-nr
1002016    0    10485760


[#110#root@sre-net-test-1 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174        3549       23726           8        4898       25097
Swap:          4095           0        4095


[#111#root@sre-net-test-1 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 1000006
[#112#root@sre-net-test-1 ~]$

退出过程

[#112#root@sre-net-test-1 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1    323833 615500    320   25    2 : tunables    0    0    0 : slabdata  24620  24620      0


[#113#root@sre-net-test-1 ~]$ss -s
Total: 153 (kernel 1534)
TCP:   130165 (estab 6, closed 129779, orphaned 377, synrecv 0, timewait 129779/0), ports 0

Transport Total     IP        IPv6
*      1534      -         -
RAW      0         0         0
UDP      1         1         0
TCP      386       8         378
INET      387       9         378
FRAG      0         0         0

[#114#root@sre-net-test-1 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 153
TCP: inuse 8 orphan 377 tw 129779 alloc 386 mem 380


[#115#root@sre-net-test-1 ~]$cat /proc/sys/fs/file-nr
1120    0    10485760


[#116#root@sre-net-test-1 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174         183       30664           8        1326       31265
Swap:          4095           0        4095


[#117#root@sre-net-test-1 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 220
ESTABLISHED 6
FIN_WAIT1 15
FIN_WAIT2 13833
CLOSING 113
TIME_WAIT 115699
[#118#root@sre-net-test-1 ~]$


[#118#root@sre-net-test-1 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1    195702 518175    320   25    2 : tunables    0    0    0 : slabdata  20727  20727      0


[#119#root@sre-net-test-1 ~]$ss -s
Total: 153 (kernel 1534)
TCP:   18 (estab 6, closed 2, orphaned 7, synrecv 0, timewait 2/0), ports 0

Transport Total     IP        IPv6
*      1534      -         -
RAW      0         0         0
UDP      1         1         0
TCP      16        8         8
INET      17        9         8
FRAG      0         0         0


[#120#root@sre-net-test-1 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 153
TCP: inuse 8 orphan 7 tw 2 alloc 16 mem 6


[#121#root@sre-net-test-1 ~]$cat /proc/sys/fs/file-nr
1120    0    10485760


[#122#root@sre-net-test-1 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174         182       30756           8        1236       31357
Swap:          4095           0        4095


[#123#root@sre-net-test-1 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LAST_ACK 2
ESTABLISHED 6
FIN_WAIT2 7
[#124#root@sre-net-test-1 ~]$


[#124#root@sre-net-test-1 ~]$grep conntrack /proc/slabinfo
nf_conntrack_1      2236   4275    320   25    2 : tunables    0    0    0 : slabdata    171    171      0


[#125#root@sre-net-test-1 ~]$ss -s
Total: 153 (kernel 1534)
TCP:   16 (estab 6, closed 3, orphaned 4, synrecv 0, timewait 3/0), ports 0

Transport Total     IP        IPv6
*      1534      -         -
RAW      0         0         0
UDP      1         1         0
TCP      13        8         5
INET      14        9         5
FRAG      0         0         0


[#126#root@sre-net-test-1 ~]$cat /proc/net/sockstat|grep -E "TCP:|sockets:"
sockets: used 153
TCP: inuse 8 orphan 4 tw 3 alloc 13 mem 3


[#127#root@sre-net-test-1 ~]$cat /proc/sys/fs/file-nr
1120    0    10485760


[#128#root@sre-net-test-1 ~]$free -m
total        used        free      shared  buff/cache   available
Mem:          32174         181       30985           8        1007       31586
Swap:          4095           0        4095


[#129#root@sre-net-test-1 ~]$netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 6
FIN_WAIT2 7
[#130#root@sre-net-test-1 ~]$

来源:西风冷楼阙

转载请注明:XAMPP中文组官网 » 笔试题:百万并发TCP连接到底考的是啥

您必须 登录 才能发表评论!