sysctl TCP优化

内核参数优化

1
2
3
4
5
6
7
8
9
10
11
echo 2048 > /proc/sys/net/core/somaxconn 每一个端口最大的监听队列的长度
echo never > /sys/kernel/mm/transparent_hugepage/enabled 关闭透明页功能
vm.max_map_count=655350 限制一个进程可以拥有的VMA(虚拟内存区域)的数量
fs.file-max = 65536
同时修改vim /etc/security/limits.conf
*  soft  nofile  65536
*  hard  nofile  65536
* soft nproc 65535
* hard nproc 65535
* soft memlock unlimited
* hard memlock unlimited

每保持一个TCP连接,进程就要创建一个文件对象,约占内存3.3KB,4GB内存可以维持长达100万条长连接,客户端发送数据的话,还得为TCP对象开启接收缓冲区,这就增大了内存开销, Linux系统里,系统级、用户级、进程级都有最大打开文件数限制

  • 系统级: 当前系统可以打开的文件数,通过fs.file-max参数修改
  • 用户级: 指定用 户可以打开的数量,通过/etc/security/limits.conf
  • 进程级: 单个进程可以打开的数量,通过fs.nr_open参数修改
1
2
3
4
为每一个TCP连接Socket分配的最少字节数或说是接收缓冲区,默认4K,最大可设8MB
net.ipv4.tcp_rmem = 4096(为TCP连接分配的最少字节数) 87380 8388608
net.core.rmem_default = 2129922
net.core.rmem_max = 8388608
1
2
3
net.ipv4.tcp_wmem= 4096(发送缓存区最小值,默认4K) 65536  8388608
net.core.wmem_default = 212992
net.core.wmem_max = 8388608
1
ss -n | grep ESTAB |wc -l TCP活动连接数统计
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@node03 ~]# slabtop 关注dentry/filp/TCP/sock_node_cache指标
Active / Total Objects (% used) : 3721737 / 4145714 (89.8%)
Active / Total Slabs (% used) : 125168 / 125168 (100.0%)
Active / Total Caches (% used) : 95 / 131 (72.5%)
Active / Total Size (% used) : 821348.16K / 878889.63K (93.5%)
Minimum / Average / Maximum Object : 0.01K / 0.21K / 8.00K

OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
1928862 1578283 81% 0.10K 49458 39 197832K buffer_head
448077 447905 99% 0.19K 21337 21 85348K dentry (指标1)
298544 297412 99% 1.00K 18659 16 298544K filp(指标2)
288966 288966 100% 0.04K 2833 102 11332K TCP(指标3)
233070 233070 100% 0.12K 6855 34 27420K sock_node_cache(指标4)

总结

慢慢积累吧