2023年7月23日发(作者:)
File: Unsaved Document 2Page 1 of 3Linux网络性能调优2009年8月9日 作者: jean 留言 »
转载本站文章请注明,作者:jean本文连接/
#老外写的文章,看过后觉得非常不错,国内大部分是转载的英文版,我翻译过来造福一下大众吧。
我有两台服务器放在不同的机房.在两台服务器间会有一些大文件需要传输,每当这个时候我的网络性能就变的很差劲.在linux下我将如何通过调节TCP来改善这个问题呢?其实linux默认的网络设置并不适用于大文件在广域网中传递,通常只是为了节省内存资源.现在你可以通过调节Linux的网络协议栈的缓冲区大小,增加网络的高速网络连接的服务器系统,以处理更多的数据包。
linux系统的默认tcp缓冲非常小,这个数值是根据系统内存算出来的.可以通过下面的命令查看一下
$ cat /proc/sys/net/ipv4/tcp_mem
通过下面两个命令可以看到默认和最大的系统套接字缓冲区(收取)
$ cat /proc/sys/net/core/rmem_default $ cat /proc/sys/net/core/rmem_max
通过下面两个命令可以看到默认和最大的系统套接字缓冲区(发送)
$ cat /proc/sys/net/core/wmem_default $ cat /proc/sys/net/core/wmem_max
socket buffer的最大初始化值
$ cat /proc/sys/net/core/optmem_max
调优我将上文提到的(收取)和(发送)缓冲调到12MB,系统套接字缓冲区的调整将会对所有协议有影响.也就是说以后TCP发送或者接收数据时的缓冲都是用这个数值.注意! rmem_max 和 wmem_max的默认大小是128 KB,在大多数情况下并不需要修改,在web或者dns服务器中使用默认值也不错。不过当你感到有明显的延迟时便可以根据以下的参数修改,修改后会增大内存的开销。
增大系统套接字缓冲区
# echo ‘_max=12582912′ >> /etc/ # echo ‘_max=12582912′ >> /etc/
增大TCP接收和发送缓冲区
# echo ‘_rmem= 10240 87380 12582912′ >> /etc/ # echo ‘_wmem= 10240 87380 12582912′ >> /etc/
开启window scaling
# echo ‘_window_scaling = 1′ >> /etc/
时间戳在(请参考RFC 1323)TCP的包头增加12个字节
# echo ‘_timestamps = 1′ >> /etc/
启用有选择的应答
# echo ‘_sack = 1′ >> /etc/
默认情况下一个tcp连接关闭后,把这个连接曾经有的参数比如慢启动门限snd_sthresh,拥塞窗口snd_cwnd 还有srtt等信息保存到dst_entry中, 只要dst_entry 没有失效,下次新建立相同连接的时候就可以使用保存的参数来初始化这个连接.通常情况下是关闭的。
# echo ‘_no_metrics_save = 1′ >> /etc/
每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 File: Unsaved Document 2Page 2 of 3 # echo ‘_max_backlog = 5000′ >> /etc/
好了,现在重新加载配置文件
# sysctl -p
使用tcpdump看看修够后带来的变化
# tcpdump -ni eth0
其他说明:
关于window scaling可以参考/node/6723 ,其实看看tcp/ip详解就啥都明白了。在对_no_metrics_save描述时我没有忠于原文By default, TCP saves various connection metrics in the route cache when the connection closes, so that
connections established in the near future can use these to set initial conditions. Usually, this
increases overall performance, but may sometimes cause performance degradation. If set, TCP will not
cache metrics on closing connections.++++++++++++++++++++++++(以前写的,当时用的RH Linux AS5.)如下网络配置参数调整,主要是针对请求压力大的Linux (2.6 kernel)服务器而言.如果服务器压力不大,那么维持默认即可.
下述内容取材于"Performance Tuning For Linux Server"一书.
$ /proc/sys/net/core/wmem_max最大socket写buffer,可参考的优化值:873200
$ /proc/sys/net/core/rmem_max最大socket读buffer,可参考的优化值:873200
$ /proc/sys/net/ipv4/tcp_wmemTCP写buffer,可参考的优化值: 8192 436600 873200
$ /proc/sys/net/ipv4/tcp_rmemTCP读buffer,可参考的优化值: 32768 436600 873200
$ /proc/sys/net/ipv4/tcp_mem同样有3个值,意思是:_mem[0]:低于此值,TCP没有内存压力._mem[1]:在此值下,进入内存压力阶段._mem[2]:高于此值,TCP拒绝分配socket.上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864
$ /proc/sys/net/core/netdev_max_backlog进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000.
$ /proc/sys/net/core/somaxconnlisten()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.可调整到256.
$ /proc/sys/net/core/optmem_maxsocket buffer的最大初始化值,默认10K.
$ /proc/sys/net/ipv4/tcp_max_syn_backlog进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.可调整到2048.
$ /proc/sys/net/ipv4/tcp_retries2TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,以尽早释放内核资源.
$ /proc/sys/net/ipv4/tcp_keepalive_time$ /proc/sys/net/ipv4/tcp_keepalive_intvl$ /proc/sys/net/ipv4/tcp_keepalive_probes这3个参数与TCP KeepAlive有关.默认值是:File: Unsaved Document 2tcp_keepalive_time = 7200 seconds (2 hours)tcp_keepalive_probes = 9tcp_keepalive_intvl = 75 seconds意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到:/proc/sys/net/ipv4/tcp_keepalive_time 1800/proc/sys/net/ipv4/tcp_keepalive_intvl 30/proc/sys/net/ipv4/tcp_keepalive_probes 3
$ proc/sys/net/ipv4/ip_local_port_range指定端口范围的一个配置,默认是32768 61000,已够大.Page 3 of 3
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690106688a306307.html
评论列表(0条)