1. #查看了TIME_WAIT状态的tcp端口
  2. $netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  3. 修改系统内核的tcp参数:
  4. #vi /etc/sysctl.conf

系统参数

  1. 查看所有的系统参数
  2. /sbin/sysctl -a
  3. 获取操作系统参数
  4. /sbin/sysctl -a|awk -F "." '{print $1}'|sort -k1|uniq
  5. 获取net类型下的子类型
  6. /sbin/sysctl -a|grep "^net."|awk -F "[.| ]" '{print $2}'|sort -k1|uniq

优化套接字缓冲区

  1. 获取有关服务器套接字缓冲区的信息
  2. /sbin/sysctl -a|grep "^net."|grep "[r|w|_]mem[_| ]"
  3. net.core.rmem_default = 699040
  4. net.core.rmem_max = 50331648
  5. net.core.wmem_default = 131072
  6. net.core.wmem_max = 33554432
  7. sysctl: reading key "net.ipv6.conf.all.stable_secret"
  8. net.ipv4.tcp_mem = 94500000 915000000 927000000
  9. net.ipv4.tcp_rmem = 32768 699040 50331648
  10. net.ipv4.tcp_wmem = 32768 131072 33554432
  11. net.ipv4.udp_mem = 768417 1024556 1536834
  12. net.ipv4.udp_rmem_min = 4096
  13. net.ipv4.udp_wmem_min = 4096
  14. sysctl: reading key "net.ipv6.conf.cali2732ff3a8ce.stable_secret"
  15. sysctl: reading key "net.ipv6.conf.cali8c496c2b930.stable_secret"
  16. sysctl: reading key "net.ipv6.conf.calidc4518c1f2c.stable_secret"
  17. sysctl: reading key "net.ipv6.conf.default.stable_secret"
  18. sysctl: reading key "net.ipv6.conf.docker0.stable_secret"
  19. sysctl: reading key "net.ipv6.conf.dummy0.stable_secret"
  20. sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
  21. sysctl: reading key "net.ipv6.conf.kube-ipvs0.stable_secret"
  22. sysctl: reading key "net.ipv6.conf.lo.stable_secret"
  23. sysctl: reading key "net.ipv6.conf.tunl0.stable_secret"
  24. 其中,带有maxdefaultmin关键字的为分别代表:最大值、默认值和最小值;带有memrmemwmem关键字的分别为:总内存、接收缓冲区内存、发送缓冲区内存。
  25. 这里需要注意的是:带有rmem wmem关键字的单位都是“字节”,而带有mem关键字的单位是“页”。“页”是操作系统管理内存的最小单位,在 Linux 系统里,默认一页是 4KB 大小。
  26. net.core.wmem_default
  27. net.core.wmem_max
  28. net.ipv4.tcp_mem
  29. net.ipv4.tcp_rmem
  30. net.ipv4.tcp_wmem

优化TCP连接

(1)关闭粘包算法
如果用户对于请求的耗时很敏感,我们就需要在TCP套接字上添加tcp_nodelay参数来关闭粘包算法,以便数据包能够立刻发送出去。此时,我们也可以设置net.ipv4.tcp_syncookies的参数值为1。
(2)避免频繁的创建和回收连接资源
网络连接的创建和回收是非常消耗性能的,我们可以通过关闭空闲的连接、重复利用已经分配的连接资源来优化服务器的性能。重复利用已经分配的连接资源大家其实并不陌生,像:线程池、数据库连接池就是复用了线程和数据库连接。
我们可以通过如下参数来关闭服务器的空闲连接和复用已分配的连接资源。
我们可以通过如下参数来关闭服务器的空闲连接和复用已分配的连接资源。

  1. net.ipv4.tcp_tw_reuse = 1
  2. net.ipv4.tcp_tw_recycle = 1
  3. net.ipv4.tcp_fin_timeout = 30
  4. net.ipv4.tcp_keepalive_time=1800

(3)避免重复发送数据包
TCP支持超时重传机制。如果发送方将数据包已经发送给接收方,但发送方并未收到反馈,此时,如果达到设置的时间间隔,就会触发TCP的超时重传机制。为了避免发送成功的数据包再次发送,我们需要将服务器的net.ipv4.tcp_sack参数设置为1。
(4)增大服务器文件描述符数量
在Linux操作系统中,一个网络连接也会占用一个文件描述符,连接越多,占用的文件描述符也就越多。如果文件描述符设置的比较小,也会影响我们服务器的性能。此时,我们就需要增大服务器文件描述符的数量。
例如:fs.file-max = 10240000,表示服务器最多可以打开10240000个文件。