注:如需转载,请注明来源,谢谢!

本文基于CENTOS 、DEBIAN/UBUNTU 编写 。

我有两台位于不同数据中心的服务器,都用来处理很多并行的大文件传输。但是处理大文件,网络性能非常差。并且涉及到一个大文件,会导致性能降级。我怎样通过调整Linux下面的 TCP 来解决这个问题?

默认,Linux的stack是没有为广域网之间的大文件高速传输而配置的,这样做是为了节约内存资源。为了使连接的系统服务之间能有更加高速的网络处理更多的网络包,你可以很容易的通过增加网络 buffer size 来调整 Linux 网络 stack 。

默认的 Linux buffer size 的最大值是非常小的,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

最大的内存 buffers 的选项:

$ cat /proc/sys/net/core/optmem_max

调整值

为所有的协议队列设置操作系统层面的最大的发送 buffer size (wmem) 和 接收 buffer size (rmem)为 12 MB。换句话说,设置内存数量,分配给每一个为了传送文件而打开或者是创建的 tcp socket 。

警告!在大多数的 Linux 中 rmem_max 和 wmem_max 被分配的值为 128 k,在一个低延迟的网络环境中,或者是 apps 比如 DNS、Web Server,这或许是足够的。尽管如此,如果延迟太大,默认的值可能就太小了,所以请记录以下在你的服务器上用来提高内存使用方法的设置。

# echo 'net.core.wmem_max=12582912' >> /etc/sysctl.conf

# echo 'net.core.rmem_max=12582912' >> /etc/sysctl.conf

你还需要设置 minimum size, initial size, and maximum size in bytes:

# echo 'net.ipv4.tcp_rmem= 10240 87380 12582912' >> /etc/sysctl.conf

# echo 'net.ipv4.tcp_wmem= 10240 87380 12582912' >> /etc/sysctl.conf

打开 window scaling ,这是一个用来扩展传输窗口的选项:

# echo 'net.ipv4.tcp_window_scaling = 1' >> /etc/sysctl.conf

确保定义在 RFC1323 中的 timestamps 打开:

# echo 'net.ipv4.tcp_timestamps = 1' >> /etc/sysctl.conf

确保 select acknowledgments:

# echo 'net.ipv4.tcp_sack = 1' >> /etc/sysctl.conf

这个 “select acknowledgments” 不知道该如何翻译,翻译为“选择确认?”

当连接关闭的时候,TCP 默认缓存了很多连接指标在 route cache 中,以至于在不久的将来,连接建立的时候,可以用这些值来设置初始化条件。通常,这提升了整体的性能,但是,有时候会引起性能下降, 如果设置的话,TCP 在关闭的时候不缓存这些指标。

# echo 'net.ipv4.tcp_no_metrics_save = 1' >> /etc/sysctl.conf

当 interface 接收到的数据包数量比内核处理速度的快的时候, 设置 input 队列最大的 packets 数量值。

# echo 'net.core.netdev_max_backlog = 5000' >> /etc/sysctl.conf

现在重载这些改变,使其生效:

# sysctl -p

使用 tcpdump 命令查看 通过 eth0 数据包流量的变化:

# tcpdump -ni eth0

推荐阅读:

请查看 sysctl 的 man 手册

备注:

注:如翻译有误的地方,欢迎指正,并且欢迎针对文章里面的内容探讨

linux配置内存buffer,调整Linux的网络栈(Buffer Size)来提升网络性能相关推荐

  1. 网络营销外包期间如何提升网络营销外包外链优化效果?

    在网络营销推广过程中,网站外链建设的作用不言而喻,不仅可以从多方面为网站提升曝光度,还能促进搜索引擎蜘蛛爬虫对网站内容迅速抓取,那么在网络营销外包期间是如何做好网站外链建设优化的呢?下面就针对该问题进 ...

  2. linux配置内存buffer,Linux中内存buffer和cache的区别

    Linux中内存buffer和cache的区别 发布时间:2007-08-31 09:52:55来源:红联作者:ivepace free free 命令相对于top 提供了更简洁的查看系统内存使用情况 ...

  3. linux常用命令、linux系统、linux属于什么操作系统、linux系统安装、linux怎么读、linux和windows的区别、linux配置ip地址、linux系统一般用来,在线查询工具

    linux vi编辑器常用命令 linux 查看ip linux find -name 查找文件名 linux shell linux 查看端口占用 linux 删除文件命令 linux cp命令复制 ...

  4. linux 进程内存分析工具,Linux内存使用情况以及内存泄露分析之工具与方法

    1. 内存使用情况分析 1.1 系统总内存分析 通过cat /proc/meminfo,可用的物理内存=MemFree+Buffers+Cached. MemTotal:        5933132 ...

  5. linux配置nfs的命令,Linux下的NFS快速配置教程与安全策略

    [51CTO专稿]在Linux下实现文件共享有多种方式,NFS就是其中之一.网络文件系统(NFS)协议是由Sun MicroSystem在20世纪80年代为了提供对共享文件的远程访问而设计和实现的.该 ...

  6. 配置 sql server linux,配置SQL Server on Linux(2)

    1. 前言 前一篇配置SQL Server on Linux(1),地址:http://www.cnblogs.com/fishparadise/p/8125203.html ,是关于更改数据库排序规 ...

  7. linux ps内存占用率,linux ps命令,查看某进程cpu和内存占用率情况, linux ps命令,查看进程cpu和内存占用率排序。 不指定...

    背景:有时需要单看某个进程的CPU及占用情况,有时需要看整体进程的一个占用情况. 一. linux ps命令,查看某进程cpu和内存占用率情况 [root@test vhost]# ps aux US ...

  8. 【Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )

    文章目录 一.Linux 系统 动态分配堆内存 方式 二.brk 系统调用 动态分配堆内存 一.Linux 系统 动态分配堆内存 方式 Linux 系统中 , 提供了 222 种方式 进行 " ...

  9. 【Linux 内核 内存管理】Linux 内核堆内存管理 ① ( 堆内存管理 | 内存描述符 mm_struct 结构体 | mm_struct 结构体中的 start_brk、brk 成员 )

    文章目录 一.堆内存管理 二.内存描述符 mm_struct 结构体 三.mm_struct 结构体中的 start_brk.brk 成员 一.堆内存管理 Linux 操作系统中的 " 堆内 ...

最新文章

  1. xml 和android脚本之家,Android利用Document实现xml读取和写入操作
  2. shell下function报错
  3. SDUT_2122 数据结构实验之链表七:单链表中重复元素的删除
  4. c语言使用未初始化的内存怎么解决_C语言快速入门——数组与调试进阶
  5. 使用SonarCloud对.NET Core项目进行静态代码分析
  6. 有关 php __autoload 自动加载类函数的用法
  7. python支付系统_GitHub - zhuf/alipay_python: 支付宝 alipay python接口,支持担保交易,即时到帐和自动发货接口...
  8. 第一类边界条件,三角单元剖分,线性插值的位场延拓,LDLT高效求解
  9. asp.net MVC中form提交和控制器接受form提交过来的数据(转)
  10. HeadFirstJava学习心得——javaGUI编程
  11. NB-IOT+GPS模组
  12. pmv计算c语言软件,晨光暖通计算工具
  13. em html字号,使用 em 来设置字体大小
  14. 工程下有一个红叉,但是可以照常运行
  15. c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序
  16. 安卓手机如何把PDF文件转换为JPG图片
  17. 15分钟内制作自己的文本编辑器:Yandex的实践
  18. matlab产生单音信号的时域、频域图
  19. 2021年化工自动化控制仪表考试试题及化工自动化控制仪表操作证考试
  20. 获取当前登录QQ号码

热门文章

  1. python爬虫中for循环无法每一段输出_Python入门到掌握只需要这3大,4类,5大,6种,即可,附教程...
  2. ES6数组的扩展~超详细、超好理解哦
  3. 解决浏览器中点击input输入框时,placeholder的值不消失的方法
  4. java的Apollo的功能_Apollo配置中心
  5. java中的数组增删查改操作,java数组实现增删改查
  6. biee12c连接hive_BIEE 12c Linux下连接Hadoop Hive
  7. 服务器常规维修与判断方法,服务器常规维修与判断方法88119.doc
  8. c语言实验 正弦csdn,实验2 正弦波振荡器(LC振荡器和晶体振荡器)
  9. confluence 4.2 升级至 6.10.x 记录
  10. Eclipse发布Web项目