`
san_yun
  • 浏览: 2655624 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

优化Linux下的内核TCP参数来提高服务器负载能力

 
阅读更多

原文:http://blog.renhao.org/2010/07/setup-linux-kernel-tcp-settings/

提高服务器的负载能力,是一个永恒的话题。在一台服务器CPU和内存资源额定有限的情况下,最大的压榨服务器的性能,是最终的目的。要提高Linux系统下的负载能力,可以先启用Apache的Worker模式(参考我写的《Ubuntu下配置Apache的Worker模式》一文),来提高单位时间内的并发量。但是即使这么做了,当网站发展起来之后,连接数过多的问题就会日益明显。在节省成本的情况下,可以考虑修改Linux的内核TCP/IP参数,来最大的压榨服务器的性能。当然,如果通过修改内核参数也无法解决的负载问题,也只能考虑升级服务器了,这是硬件所限,没有办法的事。

Linux系统下,TCP/IP连接断开后,会以TIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接,无法及时断开的话,会占用大量的端口资源和服务器资源(因为关闭后进程才会退出)。这个时候我们可以考虑优化TCP/IP的内核参数,来及时将TIME_WAIT状态的端口清理掉。

本文介绍的方法只对拥有大量TIME_WAIT状态的连接导致系统资源消耗有效,不是这个原因的情况下,效果可能不明显。那么,到哪儿去查TIME_WAIT状态的连接呢?那就是使用netstat命令。我们可以输入一个复核命令,去查看当前TCP/IP连接的状态和对应的个数:

#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

我们只用关心TIME_WAIT的个数,在这里可以看到,有18000多个TIME_WAIT,这样就占用了18000多个端口。要知道端口的数量只有65535个,占用一个少一个,会严重的影响到后继的新连接。这种情况下,我们就有必要调整下Linux的TCP/IP内核参数,让系统更快的释放TIME_WAIT连接。

我们用vim打开配置文件:

#vim /etc/sysctl.conf

然后,在这个文件中,加入下面的几行内容:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

最后输入下面的命令,让内核参数生效:

#/sbin/sysctl -p

简单的说明下,上面的参数的含义:

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 修改系統默认的 TIMEOUT 时间。

在经过这样的调整之后,除了会进一步提升服务器的负载能力之外,还能够防御一定程度的DDoS、CC和SYN攻击,是个一举两得的做法。

此外,如果你的连接数本身就很多,我们可以再优化一下TCP/IP的可使用端口范围,进一步提升服务器的并发能力。依然是往上面的参数文件中,加入下面这些配置:

net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000

这几个参数,建议只在流量非常大的服务器上开启,会有显著的效果。一般的流量小的服务器上,没有必要去设置这几个参数。这几个参数的含义如下:

net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。
net.ipv4.ip_local_port_range = 10000 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到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拖死。

经过这样的配置之后,你的服务器的TCP/IP并发能力又会上一个新台阶。

分享到:
评论

相关推荐

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

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

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

    Linux的内核优化是一个复杂且效果显著的方法,尤其在硬件资源有限的情况下,通过调整内核参数来提高并发处理能力,能够有效提高服务器性能。服务器并发能力的提高不仅能够优化网络服务的响应时间,还能在一定程度上...

    linux内核参数

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

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

    首先,我们要理解Linux内核参数的重要性。内核是操作系统的核心,它管理硬件资源,提供服务给用户空间的应用程序。内核参数是控制这些服务行为的关键,正确的设置可以提高系统的响应速度,减少资源浪费,甚至解决...

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

    在 GNU/Linux 环境中,可以通过调整参数或改变默认算法来优化 TCP/IP 协议栈的性能。例如,可以通过设置禁用 Nagle 算法、调整 TCP 窗口和 Socket 缓冲区大小等方法来提高性能。此外,还可以使用 GNU/Linux 环境中的...

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

    下面是一些常见的优化参数及其含义: - `fs.file-max`: 控制系统所能打开的最大文件数量。建议设置为较高的值以满足大规模服务的需求。 - `vm.swappiness`: 设定系统倾向于使用内存还是磁盘交换空间的程度。数值越...

    基于Linux虚拟服务器的负载均衡

    Linux虚拟服务器(LVS)是Linux内核中集成的一种负载均衡解决方案,由章文湘博士在1998年开发。LVS通过IP层和TCP层的策略路由,实现对后端真实服务器的负载分发,从而提高服务的稳定性和响应速度。 ### LVS的工作...

    Linux 下tcp 连接迁移技术

    Linux 下 TCP 连接迁移技术是一种基于 TCP 连接迁移的负载均衡方法,它可以将一个 TCP 连接的一个端点迁移到另一个节点,而整个迁移过程对于连接的另一端点来说是透明的。这种技术可以大大减轻前端服务器的负担,...

    Linux高性能服务器编程电子版

    5. **进程调度**:了解Linux的调度算法,如CFS(Completely Fair Scheduler),理解如何调整调度参数以适应不同的服务器负载。 6. **性能分析与调优**:掌握工具如strace、gprof、perf等,用于定位系统瓶颈,通过...

    Linux调优,对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。

    例如,在高负载的 Web 服务器中,需要降低 tcp_syn_retries、tcp_retries1、tcp_retries2 等参数的值以提高连接建立的速度。在 NAT 服务中,需要降低 tcp_orphan_retries、tcp_fin_timeout 等参数的值以提高连接的...

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

    在深入探讨Linux内核配置与文件系统的优化方法之前,我们首先要理解这两个概念的基本含义。Linux内核是操作系统的核心部分,负责管理硬件资源、进程调度、内存管理、设备驱动以及网络协议等关键功能。文件系统则是...

    牛客网Linux高并发服务器开发.zip

    优化包括系统级优化(如调整内核参数、优化I/O调度算法)、网络优化(如TCP缓冲区大小、超时设置)以及应用级优化(如减少数据库查询、缓存策略)。性能分析工具(如strace、gprof、perf)帮助定位瓶颈。 7. **...

    TCP连接迁移在Linux环境中的实现.pdf

    TCP连接迁移是解决网络服务器负载问题的关键技术之一,尤其在Linux环境中,通过对TCP/IP协议栈的定制和内核级别的操作,可以实现连接的透明迁移。这种技术提高了网络服务的可伸缩性和可靠性,对于服务器集群的负载...

    Linux下TCP连接迁移技术-TCPCP详解.pdf

    Linux 下 TCP 连接迁移技术 - TCPCP 详解 ...TCPCP 是一种基于 TCP 连接迁移的技术,能够将一个 TCP 连接的一个端点从一台 Linux 主机迁移到另一台 Linux 主机上,实现负载均衡和提高服务器的性能和可靠性。

    linux server服务器性能优化

    在IT领域,Linux服务器性能...总的来说,Linux服务器性能优化是一个综合性的工程,涉及到硬件选型、系统配置、服务优化等多个环节,需要根据实际需求和资源状况进行权衡和调整,确保服务器在高效率、高可用性下运行。

    Linux高性能服务器编程,linux高性能服务器编程 pdf,C,C++

    1. **Linux操作系统基础**:了解Linux内核的工作原理,包括进程管理、内存管理、文件系统以及网络协议栈,这些都是服务器编程的基础。 2. **多线程与并发处理**:在Linux环境中,如何通过多线程技术来提高服务器...

    linux服务器性能调整

    2. **内核参数调整**:讨论如何根据服务器的工作负载调整内核参数,比如调度器设置、内存管理策略、网络堆栈参数等,以实现更高效的系统响应。 3. **存储优化**:涵盖磁盘I/O性能的提升,包括RAID配置、文件系统...

    suse linux内核

    【SUSE Linux内核详解】 SUSE Linux是全球知名的开源操作系统之一,以其高度稳定性和安全性闻名于业界。作为Linux世界中的重要成员,SUSE Linux的内核是其核心组件,负责管理和调度系统的硬件资源,为上层应用提供...

Global site tag (gtag.js) - Google Analytics