`

优化Linux下的内核TCP参数以提高系统性能

 
阅读更多

内核的优化跟服务器的优化一样,应本着稳定安全的原则。下面以64位的CentOS 5.5下的Squid服务器为例来说明,待客户端与服务器端建立TCP/IP连接后就会关闭SOCKET,服务器端连接的端口状态也就变为TIME_WAIT了。

  那是不是所有执行主动关闭的SOCKET都会进入TIME_WAIT状态呢?有没有什么情况使主动关闭的SOCKET直接进入CLOSED状态呢?答案是主动关闭的一方在发送最后一个ACK后就会进入TIME_WAIT状态,并停留2MSL(Max Segment LifeTime)时间,这个是TCP/IP必不可少的,也就是“解决”不了的。

  TCP/IP的设计者如此设计,主要原因有两个:

  防止上一次连接中的包迷路后重新出现,影响新的连接(经过2MSL时间后,上一次连接中所有重复的包都会消失)。

  为了可靠地关闭TCP连接。主动关闭方发送的最后一个ACK(FIN)有可能会丢失,如果丢失,被动方会重新发FIN,这时如果主动方处于 CLOSED状态,就会响应RST而不是ACK。所以主动方要处于TIME_WAIT状态,而不能是CLOSED状态。另外,TIME_WAIT并不会占 用很大的资源,除非受到攻击

  在Squid服务器中可输入查看当前连接统计数的命令,如下所示:

  netstat -n| awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' LAST_ACK 14 SYN_RECV 348 ESTABLISHED 70 FIN_WAIT1 229 FIN_WAIT2 30 CLOSING 33 TIME_WAIT 18122

  CLOSED:无连接是活动的或正在进行中的。

  LISTEN:服务器在等待进入呼叫。

  SYN_RECV:一个连接请求已经到达,等待确认。

  SYN_SENT:应用已经开始,打开一个连接。

  ESTABLISHED:正常数据传输状态。

  FIN_WAIT1:应用说它已经完成。

  FIN_WAIT2:另一边已同意释放。

  CLOSING:两边同时尝试关闭。

  TIME_WAIT:另一边已初始化一个释放。

  LAST_ACK:等待所有分组死掉。

  也就是说,这条命令可以把当前系统的网络连接状态分类汇总。

  在Linux下高并发的Squid服务器中,TCP TIME_WAIT套接字数量经常可达两三万,服务器很容易就会被拖死。不过,我们可以通过修改Linux内核参数来减少Squid服务器的TIME_WAIT套接字数量,命令如下所示:

  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等待队列溢出时,启用cookie来处理,可防范少量的SYN攻击。默认为0,表示关闭。

  net.ipv4.tcp_tw_reuse=1表示开启重用。允许将TIME-WAIT套接字重新用于新的TCP连接。默认为0,表示关闭。

  net.ipv4.tcp_tw_recycle=1表示开启TCP连接中TIME-WAIT套接字的快速回收。默认为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套接字拖死。

  执行以下命令使内核配置立即生效:

  /sbin/sysctl -p

  如果是用于Apache或Nginx等的Web服务器,或Nginx的反向代理,则只需要更改以下几项即可:

  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

  执行以下命令使内核配置立即生效:

  /sbin/sysctl -p

  如果是邮件服务器,则建议内核方案如下:

  net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 300 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 5000 65000 kernel.shmmax = 134217728

  执行以下命令使内核配置立即生效:

  /sbin/sysctl -p

  当然这些都只是最基本的更改,大家还可以根据自己的需求来更改内核的设置,同样也要本着稳定的原则,如果服务器不稳定的话,一切工作和努力都会白费。如果以上优化仍无法满足你的要求,有可能你需要定制你的服务器内核或升级服务器硬件。至于服务的配置优化,超出了本章的内容,大家可根据自己的需求有针对性地进行更改。

分享到:
评论

相关推荐

    Linux内核源码剖析:TCP IP实现(上册).pdf

    针对特定应用场景,可以通过调整TCP参数来优化网络性能,例如增加TCP缓冲区大小以减少丢包率,或启用快速重传机制提高传输效率。 #### 2. 安全性考虑 在实现TCP/IP协议栈时还需要考虑安全性问题,例如防止SYN洪水...

    基于Linux内核的网络性能优化.pdf

    基于Linux内核的网络性能优化 Linux操作系统网络性能问题概述 Linux操作系统网络性能主要涉及...基于Linux内核的网络性能优化需要从系统安装、内核参数、文件系统三个方面入手,才能大幅度提升Linux系统的网络性能。

    优化Linux的TCP_IP协议栈性能.pdf

    优化 Linux 的 TCP/IP 协议栈性能 Linux 操作系统作为开源的操作系统,广泛应用于各种领域,包括服务器、嵌入式系统、移动设备等。...通过合理的优化和调整,可以提高 Linux 系统的网络性能,提高系统的整体性能。

    linux 内核参数调优

    通过调整 Linux 内核参数,可以提高系统的性能、安全性和稳定性。本文将详细讲解 Linux 内核参数的调整,包括网络、文件系统、TCP、内存等方面的优化。 一、前言 Linux 内核参数是 Linux 操作系统的核心组件之一,...

    优化Linux的内核参数来提高服务器并发处理能力

    ### 优化Linux内核参数以提高服务器并发处理能力 #### 背景与目标 在IT运维领域,尤其是在处理高并发场景时,如何在现有硬件条件下最大化地利用资源成为了一个重要课题。对于运行Linux操作系统的服务器而言,通过...

    Linux内核参数优化调整

    Linux内核参数优化是提升系统性能的关键步骤,尤其是在运行虚拟化环境或高负载网络服务时。本文主要讨论如何针对Linux内核进行优化,重点关注TCP网络性能和磁盘缓存策略。 首先,关于磁盘缓存策略,KVM虚拟化环境下...

    优化Linux的内核提高服务器并发能力

    1. Linux内核参数优化:Linux内核支持许多参数来控制TCP/IP协议栈的行为,这些参数包括与TCP连接处理、端口分配、套接字缓冲区大小等相关。通过修改这些参数,可以有效地调整Linux系统对网络请求的处理能力。这些...

    Linux内核优化是指通过调整内核的参数和设置,提高Linux系统的性能和效率

    通过对Linux内核进行优化,可以显著提高系统的稳定性、响应速度以及资源利用率,这对于高性能计算、大数据处理等场景尤其重要。 #### 四、sysctl.conf配置文件详解 `/etc/sysctl.conf` 和 `/etc/sysctl.d/` 是用于...

    Linux优化-修改内核参数.rar

    内核参数是控制这些服务行为的关键,正确的设置可以提高系统的响应速度,减少资源浪费,甚至解决特定问题,如内存泄漏或网络延迟。 在Linux中,内核参数可以通过两种主要方式来修改:直接编辑`/etc/sysctl.conf`...

    教案之优化Linux的内核参数来提高服务器并发处理能力.pdf

    总结来说,优化Linux内核参数是提高服务器并发处理能力的有效手段,特别是针对TCP连接管理进行微调,可以有效地解决TIME_WAIT状态的连接占用资源的问题,并增强服务器的防御能力。同时,合理调整端口范围和连接队列...

    Linux内核配置与文件系统的优化方法研究

    2. **挂载参数调整**:在挂载文件系统时,可以设置noatime、nodiratime来减少更新访问时间的开销,或者启用barrier=0以提高写入性能,但可能牺牲数据一致性。 3. **文件系统维护**:定期进行fsck检查和碎片整理,...

    Linux内核TCP-IP协议栈分析.rar

    Linux内核中的TCP/IP协议栈...这份"Linux内核TCP/IP协议栈分析"资料,对于理解Linux系统中的网络通信机制、优化网络性能或进行网络编程都极具价值。通过深入学习,开发者可以更好地理解和调试网络问题,提升系统效率。

    Linux 内核网络参数配置资料

    通过对上述Linux内核网络参数的深入理解与配置,我们可以根据不同的网络环境和应用需求来优化系统性能,同时也能提高系统的安全性和稳定性。需要注意的是,在实际操作过程中,应当根据具体的网络状况和业务需求来...

    Linux内核视频教程(70G百度网盘资源)

    Linux内核是操作系统的核心部分,负责管理系统的硬件资源,提供基础服务给各种应用程序。这个70G的视频教程集合很可能是深入讲解Linux内核的详细课程,覆盖了从基础概念到高级技术的各种主题。以下是一些可能涵盖的...

    生产环境Linux系统优化方法.pdf

    * 用户可以根据需要修改参数,以提高系统性能和稳定性。 本文档提供了生产环境Linux系统优化方法的详细介绍,涵盖文件系统、内核参数和服务组件三个方面的优化方法,旨在帮助读者朋友们更好地应用于自己的生产系统...

    linux-Linux性能优化实战案例

    在《Linux性能优化实战》案例中,我们深入探讨了如何利用Linux系统工具和技术来提升系统的运行效率和性能。Linux作为一款开源操作系统,其强大的可定制性和丰富的工具集使其成为性能优化的理想平台。以下是一些核心...

    linux 内核精髓-精通linux内核必会的75个绝技

    3. **内存管理**:探讨Linux内核如何分配、释放和管理物理及虚拟内存,包括页面缓存、内存映射、交换机制等,这对优化系统性能至关重要。 4. **文件系统**:详述Linux下的VFS(虚拟文件系统)和具体文件系统的实现...

    提高 Linux 上 socket 性能 加速网络应用程序的 4 种方法

    Linux 内核提供了许多可调整的 TCP/IP 参数,用于优化特定应用场景。例如,可以通过修改 `/proc/sys/net/ipv4/tcp_congestion_control` 来选择不同的拥塞控制算法,如 cubic 或 bbr。此外,可以调整 `/proc/sys/...

    Linux之TCPIP内核参数优化1

    综上所述,优化Linux的TCP/IP内核参数是提升网络服务性能的关键步骤。根据系统需求和网络环境,适当地调整这些参数可以改善连接速度、数据传输效率以及网络的稳定性。然而,调整参数需要谨慎,因为错误的配置可能会...

    linux内核参数

    Linux内核参数调优是优化服务器性能的关键环节,特别是在硬件资源有限的情况下,通过调整内核参数可以有效地提高服务器的并发处理能力。对于Web服务器,如Nginx和Apache,它们的并发模型对于处理高负载至关重要。...

Global site tag (gtag.js) - Google Analytics