Linux性能压测——Stress
# Stress介绍使用
### 一、安装
#### 1、离线安装:
https://github.com/ColinIanKing/stress-ng/archive/refs/heads/master.zip
#### 2、yum安装:
#### 3、版本查询:
#### 4、基本语法:
``` 语法格式: stress <options> 常用选项: -c, --cpu N 产生N个进程,每个进程都反复不停的计算随机数的平方根 -i, --io N 产生N个进程,每个进程反复调用sync()将内存上的内容写到硬盘上 -m, --vm N 产生N个进程,每个进程不断分配和释放内存 --vm-bytes B 指定分配内存的大小 --vm-stride B 不断的给部分内存赋值,让COW(Copy On Write)发生 --vm-hang N 指示每个消耗内存的进程在分配到内存后转入睡眠状态N秒,然后释放内存,一直重复执行这个过程 --vm-keep 一直占用内存,区别于不断的释放和重新分配(默认是不断释放并重新分配内存) -d, --hadd N 产生N个不断执行write和unlink函数的进程(创建文件,写入内容,删除文件) --hadd-bytes B 指定文件大小 -t, --timeout N 在N秒后结束程序 --backoff N 等待N微妙后开始运行 -q, --quiet 程序在运行的过程中不输出信息 -n, --dry-run 输出程序会做什么而并不实际执行相关的操作 --version 显示版本号 -v, --verbose 显示详细的信息 ```
### 二、CPU加压:
#### 1、对2个CPU打满,并使用mpstat和pidstat观察
```
# stress -c N:调用sqrt()函数不停的对随机数求平方根
# stress -c 2 --timeout 60s # mpstat -P ALL 1 100 Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/06/2023 _x86_64_ (4 CPU) 04:12:01 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 04:12:02 AM all 49.87 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 50.13 04:12:02 AM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 04:12:02 AM 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 04:12:02 AM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 04:12:02 AM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
# 如图所示,CPU1、3消耗CPU资源大,且占用CPU资源多的是stress命令发起的进程
# pidstat -T ALL 1 100 Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/06/2023 _x86_64_ (4 CPU) 04:14:19 AM UID PID %usr %system %guest %CPU CPU Command 04:14:20 AM 0 2634 100.00 0.00 0.00 100.00 3 stress 04:14:20 AM 0 2635 100.00 0.00 0.00 100.00 1 stress 04:14:20 AM 0 2636 0.00 0.99 0.00 0.99 0 pidstat
# 根据进程号,查看单个进程:
# pidstat -p 2316 Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/06/2023 _x86_64_ (4 CPU) 11:33:39 PM UID PID %usr %system %guest %CPU CPU Command 11:33:39 PM 0 2316 3.44 0.00 0.00 3.44 1 stress
# 查询每个进程的IO情况:
# pidstat -d | head Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/10/2023 _x86_64_ (4 CPU) 04:32:02 AM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 04:32:02 AM 0 1 4835.63 0.19 0.05 systemd 04:32:02 AM 0 5 0.00 0.00 0.00 kworker/u256:0 04:32:02 AM 0 46 0.00 0.00 0.00 kswapd0 04:32:02 AM 0 455 0.06 0.00 0.00 xfsaild/dm-0 04:32:02 AM 0 535 0.89 0.00 0.00 systemd-journal 04:32:02 AM 0 556 0.01 0.00 0.00 lvmetad 04:32:02 AM 0 570 1.63 0.00 0.00 systemd-udevd
# 查询某个进程的IO情况
# pidstat -d -p 2521 Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/10/2023 _x86_64_ (4 CPU) 04:33:07 AM UID PID kB_rd/s kB_wr/s kB_ccwr/s Command 04:33:07 AM 0 2521 0.00 0.00 0.00 stress
# 查询每个进程的上下文切换情况
# pidstat -w | head Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/10/2023 _x86_64_ (4 CPU) 04:34:20 AM UID PID cswch/s nvcswch/s Command 04:34:20 AM 0 1 0.28 0.26 systemd 04:34:20 AM 0 2 0.02 0.00 kthreadd 04:34:20 AM 0 3 3.19 0.00 kworker/0:0 04:34:20 AM 0 4 0.00 0.00 kworker/0:0H 04:34:20 AM 0 5 0.32 0.01 kworker/u256:0 04:34:20 AM 0 6 3.22 0.00 ksoftirqd/0 04:34:20 AM 0 7 0.09 0.00 migration/0
# 查询特定进程的上下文切换情况
# pidstat -w -p 2521 Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/10/2023 _x86_64_ (4 CPU) 04:34:07 AM UID PID cswch/s nvcswch/s Command 04:34:07 AM 0 2521 0.00 0.00 stress
#### 2、对半数CPU打满加压:
``` # cat cpu_stress.sh #! /bin/bash # 查询本机逻辑CPU个数: cpu=`cat /proc/cpuinfo | grep "processor" | wc -l` echo $cpu # 对半数CPU进行压测: let count=$cpu/2 echo $count stress -c $count ```
#### 3、创建CPU密集型进程(CPU资源利用率接近100%):
# stress -c 5 --timeout 600s # 输出所有CPU状态,每秒一次,输出三次 # mpstat -P ALL 1 3 Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/06/2023 _x86_64_ (4 CPU) 05:11:19 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 05:11:20 AM all 99.71 0.00 0.29 0.00 0.00 0.00 0.00 0.00 0.00 0.00 05:11:20 AM 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 05:11:20 AM 1 98.82 0.00 0.00 0.00 0.00 1.18 0.00 0.00 0.00 0.00 05:11:20 AM 2 98.84 0.00 1.16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 05:11:20 AM 3 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
# 输出所有任务状态,每秒一次,输出三次
# pidstat -T ALL 1 3 Linux 3.10.0-1160.88.1.el7.x86_64 (CentOS7-Debug-1) 04/06/2023 _x86_64_ (4 CPU) 05:12:15 AM UID PID %usr %system %guest %CPU CPU Command 05:12:16 AM 0 42 0.00 0.97 0.00 0.97 0 kworker/0:1 05:12:16 AM 0 2507 0.00 4.85 0.00 4.85 2 kworker/2:1 05:12:16 AM 0 2792 0.00 2.91 0.00 2.91 1 kworker/1:2 05:12:16 AM 0 2795 89.32 0.00 0.00 89.32 1 stress 05:12:16 AM 0 2796 78.64 0.00 0.00 78.64 3 stress 05:12:16 AM 0 2797 71.84 0.00 0.00 71.84 1 stress 05:12:16 AM 0 2798 66.02 0.00 0.00 66.02 0 stress 05:12:16 AM 0 2799 82.52 0.97 0.00 83.50 2 stress 05:12:15 AM UID PID usr-ms system-ms guest-ms Command 05:12:16 AM 0 42 0 10 0 kworker/0:1 05:12:16 AM 0 2507 0 50 0 kworker/2:1 05:12:16 AM 0 2792 0 30 0 kworker/1:2 05:12:16 AM 0 2795 920 0 0 stress 05:12:16 AM 0 2796 810 0 0 stress 05:12:16 AM 0 2797 740 0 0 stress 05:12:16 AM 0 2798 680 0 0 stress 05:12:16 AM 0 2799 850 10 0 stress
### 三、内存加压:
#### 1、多进程预占内存
# 模拟2个进程,每个进程分配1000M的内存
# stress --vm 2 --vm-bytes 1000M --vm-keep # top查询,消耗内存最高的是stress进程 # top top - 21:42:34 up 10 min, 3 users, load average: 2.64, 1.58, 0.68 Tasks: 142 total, 6 running, 136 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.6 us, 52.2 sy, 0.0 ni, 24.1 id, 13.7 wa, 0.0 hi, 9.4 si, 0.0 st KiB Mem : 1862820 total, 52208 free, 1781684 used, 28928 buff/cache KiB Swap: 2097148 total, 1047804 free, 1049344 used. 10368 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1760 root 20 0 1031316 817656 12 R 67.0 43.9 2:50.75 stress 1761 root 20 0 1031316 814272 12 R 71.0 43.7 2:49.65 stress
# 检查进程,两个stress进程消耗CPU也高达77%,78%
# ps -elf | grep -P 'stress|TIME' | grep -v grep | column -t F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 0 S root 1828 1791 0 80 0 - 1828 do_wai 19:52 pts/0 00:00:00 stress --vm 2 --vm-bytes 1000M --vm-keep 1 D root 1829 1828 77 80 0 - 257829 wait_o 19:52 pts/0 00:03:47 stress --vm 2 --vm-bytes 1000M --vm-keep 1 D root 1830 1828 78 80 0 - 257829 wait_o 19:52 pts/0 00:03:50 stress --vm 2 --vm-bytes 1000M --vm-keep # vmstat
#### 2、对半数内存进行加压耗尽:
# cat mem_stress.sh #! /bin/bash # 查询本机内存值: mem=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'` echo $mem # 对半数内存进行消耗: let n=$mem/2 let num=$n/1024 echo $num # 模拟1个进程,分配半数内存 stress --vm 1 --vm-bytes $num+M --vm-keep
### 四、IO加压:
#### 1、模拟4个进程压测IO:
# 模拟4个进程,调用sync()方法将系统内存上的内容写到磁盘上。 # 如果主机内存上的内容很少,将不会出现明显iowait # sync是刷新内存缓冲区数据到磁盘中,以确保同步。如果内存缓冲区内没多少数据,读写到磁盘中的数据也就不多,没法产生IO压力 # stress -i 4
#### 2、压测磁盘
# stress -d N:模拟产生N个进程,每个进程往当前目录中写入固定大小的临时文件,然后执行unlink操作删除该临时文件。临时文件的大小默认为1G,但可以通过--hdd-bytes设置临时文件的大小 # 模拟8个进程,不断的在磁盘上创建1000M的文件,并写入内容 # stress -d 8 --hdd-bytes 1000M # top Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.1 us, 1.3 sy, 0.0 ni, 3.1 id, 95.1 wa, 0.0 hi, 0.4 si, 0.0 st KiB Mem : 1862820 total, 79836 free, 143644 used, 1639340 buff/cache KiB Swap: 2097148 total, 2024636 free, 72512 used. 1549548 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 46 root 20 0 0 0 0 S 1.7 0.0 4:55.75 kswapd0 2080 root 20 0 0 0 0 D 1.3 0.0 0:27.28 kworker/u256:3 2222 root 20 0 8216 1128 32 D 1.0 0.1 0:03.37 stress 2223 root 20 0 8216 1128 32 D 1.0 0.1 0:03.35 stress 2224 root 20 0 8216 1128 32 D 1.0 0.1 0:03.35 stress 2225 root 20 0 8216 1128 32 D 1.0 0.1 0:03.37 stress 2226 root 20 0 8216 1128 32 D 1.0 0.1 0:03.27 stress 2227 root 20 0 8216 1128 32 D 1.0 0.1 0:03.39 stress 2229 root 20 0 8216 1128 32 D 1.0 0.1 0:03.38 stress 2228 root 20 0 8216 1128 32 D 0.7 0.1 0:03.41 stress # iotop Total DISK READ : 0.00 B/s | Total DISK WRITE : 75.30 M/s Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 78.60 M/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 2223 be/4 root 0.00 B/s 9.67 M/s 0.00 % 99.99 % stress -d 8 --hdd-bytes 1000M 2224 be/4 root 0.00 B/s 9.44 M/s 0.00 % 99.88 % stress -d 8 --hdd-bytes 1000M 2226 be/4 root 0.00 B/s 9.44 M/s 0.00 % 99.48 % stress -d 8 --hdd-bytes 1000M 2225 be/4 root 0.00 B/s 9.44 M/s 0.00 % 99.40 % stress -d 8 --hdd-bytes 1000M 2222 be/4 root 0.00 B/s 9.21 M/s 0.00 % 98.66 % stress -d 8 --hdd-bytes 1000M 2229 be/4 root 0.00 B/s 9.44 M/s 0.00 % 98.46 % stress -d 8 --hdd-bytes 1000M 2227 be/4 root 0.00 B/s 9.44 M/s 0.00 % 98.38 % stress -d 8 --hdd-bytes 1000M 2228 be/4 root 0.00 B/s 9.21 M/s 0.00 % 97.56 % stress -d 8 --hdd-bytes 1000M 2080 be/4 root 0.00 B/s 0.00 B/s 0.00 % 89.46 % [kworker/u256:3]
### 五、组合测试:
#### 1、同时消耗CPU、内存、磁盘IO:
# stress -c 4 -m 2 -d 2
###六、TCP长连接和短连接调优
#### 1、服务器内核优化
-
100W TCP长连接:修改程序最大打开文件数
例1:被压测服务器需要保持100W长连接,客户和服务器端是通过socket通讯的,每个连接需要建立一个socket,程序需要保持100W长连接就需要单个程序能打开100W个文件句柄 # 查看系统默认的值 ulimit -n # 设置最大打开文件数 ulimit -n 1040000
这里设置的要超过100W,程序除了有100W连接还有其它资源连接(数据库、资源等连接),这里设置为 104W
-
centOS 7.6 上述设置不生效,需要手动修改配置文件
vim /etc/security/limits.conf 这里需要把硬限制和软限制、root用户和所有用户都设置为 1040000 core 是限制内核文件的大小,这里设置为 unlimited # 添加以下参数 root soft nofile 1040000 root hard nofile 1040000 root soft nproc 1040000 root hard nproc 1040000 * soft nofile 1040000 * hard nofile 1040000 * soft nproc 1040000 * hard nproc 1040000 root soft core unlimited root hard core unlimited * soft core unlimited * hard core unlimited
-
参考
https://www.cnblogs.com/operationhome/p/11966041.html
-
注意:
/proc/sys/fs/file-max
表示系统级别的能够打开的文件句柄的数量,不能小于limits中设置的值
如果file-max的值小于limits设置的值会导致系统重启以后无法登录
# file-max 设置的值参考 cat /proc/sys/fs/file-max 12553500
修改以后重启服务器,ulimit -n
查看配置是否生效
####2、 客户端配置
-
系统端口概述
由于linux端口的范围是 0~65535(2^16-1)
这个和操作系统无关,不管linux是32位的还是64位的。
这个数字是由tcp协议决定的,tcp协议头部表示端口有16位,所以最大值是65535(如果每台机器多几个虚拟ip就能突破这个限制)。
端口号1024以下是系统保留端口,所以剩余可用端口是1024到65535。
例2:如果需要100W长连接,每台机器有 65535-1024 个端口, 100W / (65535-1024) ≈ 15.5,所以这里需要16台服务器 vim /etc/sysctl.conf 在文件末尾添加 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_mem = 786432 2097152 3145728 net.ipv4.tcp_rmem = 4096 4096 16777216 net.ipv4.tcp_wmem = 4096 4096 16777216 sysctl -p 修改配置以后使得配置生效命令
配置解释:
ip_local_port_range
表示TCP/UDP协议允许使用的本地端口号 范围:1024~65000tcp_mem
确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)。第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的BDP可以增大这些值(注意,其单位是内存页而不是字节)tcp_rmem
为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数;第二个值是默认值(该值会被rmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是接收缓冲区空间的最大字节数(该值会被rmem_max覆盖)。tcp_wmem
为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数;第二个值是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)。
####3、 TCP连接伴随着TIME_WAIT问题
- Q: 压测过程中会出现大量 TIME_WAIT
A: 参考TCP四次挥手原理,主动关闭连接的一方会出现 TIME_WAIT 状态,等待的时长为 2MSL(约1分钟左右)
原因是:主动断开的一方回复 ACK 消息可能丢失,TCP 是可靠的传输协议,在没有收到 ACK 消息的另一端会重试,重新发送FIN消息,所以主动关闭的一方会等待 2MSL 时间,防止对方重试,这就出现了大量 TIME_WAIT 状态(参考: 四次挥手的最后两次)
-
优化和避免 TIME_WAIT 状态的方法
调整内核参数:通过调整内核参数如 tcp_tw_reuse 和 tcp_max_tw_buckets 可以优化 TIME_WAIT 状态的处理。例如,tcp_tw_reuse 允许在 TIME_WAIT 状态下重用端口,tcp_max_tw_buckets 限制系统中 TIME_WAIT 状态的最大数量。
减少短连接的使用:在可能的情况下,尽量减少短连接的使用,改用长连接或连接池技术,以减少 TIME_WAIT 状态的产生;
##常用内核优化参数
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 修改系统默认的 TIMEOUT 时间
net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,(默认是18000). 当TIME_WAIT连接数量达到给定的值时,所有的TIME_WAIT连接会被立刻清除,并打印警告信息。但这种粗暴的清理掉所有的连接,意味着有些连接并没有成功等待2MSL,就会造成通讯异常。一般不建议调整
# 启用 keepalive 时,发送消息的频率。(默认: 7200 秒)
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_timestamps = 1(默认即为1)60s内同一源ip主机的socket connect请求中的timestamp必须是递增的。也就是说服务器打开了 tcp_tw_reccycle了,就会检查时间戳,如果对方发来的包的时间戳是乱跳的或者说时间戳是滞后的,那么服务器就会丢掉不回包,现在很多公司都用LVS做负载均衡,通常是前面一台LVS,后面多台后端服务器,这其实就是NAT,当请求到达LVS后,它修改地址数据后便转发给后端服务器,但不会修改时间戳数据,对于后端服务器来说,请求的源地址就是LVS的地址,加上端口会复用,所以从后端服务器的角度看,原本不同客户端的请求经过LVS的转发,就可能会被认为是同一个连接,加之不同客户端的时间可能不一致,所以就会出现时间戳错乱的现象,于是后面的数据包就被丢弃了,具体的表现通常是是客户端明明发送的SYN,但服务端就是不响应ACK,还可以通过下面命令来确认数据包不断被丢弃的现象,所以根据情况使用
##方式二:调整短链接为长链接
短连接和长连接工作方式的区别:
短连接
连接->传输数据->关闭连接
HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。
长连接
连接->传输数据->保持连接 -> 传输数据-> 。。。->关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
从区别上可以看出,长连接比短连接从根本上减少了关闭连接的次数,减少了TIME_WAIT状态的产生数量,在高并发的系统中,这种方式的改动非常有效果,可以明显减少系统TIME_WAIT的数量。
检查连接数据量
[root@harbor ~]# netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
ESTABLISHED 2
[root@harbor ~]# ss -s
Total: 260
TCP: 11 (estab 2, closed 0, orphaned 0, timewait 0)
Transport Total IP IPv6
RAW 0 0 0
UDP 9 6 3
TCP 11 7 4
INET 20 13 7
FRAG 0 0 0
[root@harbor ~]# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
ESTABLISHED 2
方法三
3、修改系统配置
[root@aaa1 ~]# vim /etc/sysctl.conf
增加以下几行:(请根据实际需要添加)
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
说明:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_tw_buckets = 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。
### 参考资料:
1、https://blog.csdn.net/A642960662/article/details/123030151
2、https://www.cnblogs.com/TankXiao/p/4045439.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异