不知道有多少公司的内部打印及文件服务器是用的Linux,我想肯定不会太多,因为Windows实现起来更方便,更快速,当然,Windows也 是更Danger。 因为Windows有太多不确定性的东西,Virus,木马,等等。

但Linux也不见得太安全,不过因为我对Linux非常熟了,而且在Windows下面不了解,所以公司的文件服务器和打印服务器都是在一台机器 上面实现的, 同时这台服务器还管理公司网络的DHCP和DNS服务。

年初的时候,因为binutils的新版本的一些Optimize,所以把服务器的Linux重新做了,也换成了selinux,不过Gentoo 下的selinux真是想让人死。。 x86下面没什么问题,amd64下面,如果你是用multilib的,那我不清楚,我只用amd64的ABI,没有multilib, 在这种情况下,Gentoo的selinux会有不少问题。根本不可能用enforce模式。

就这样用了近半年,网络性能一直很差,从服务器上Copy文件或者反过来,性能都很差, 看看Windows的Task Manager里面的Networking,LAN的使用率最多也只能在40%左右,这个也太低了点吧?想办法解决一下。

先google了一下,发现IPv4可以有一些调整. 主要是下面几个参数:(以centos7.3为例取默认值)

/proc/sys/net/core/rmem_default 定义默认的接收窗口大小;对于更大的 BDP 来说,这个大小也应该更大。
  /proc/sys/net/core/rmem_default=
/proc/sys/net/core/rmem_max 定义接收窗口的最大大小;对于更大的 BDP 来说,这个大小也应该更大。
  /proc/sys/net/core/rmem_max=212992
/proc/sys/net/core/wmem_default 定义默认的发送窗口大小;对于更大的 BDP 来说,这个大小也应该更大。
  /proc/sys/net/core/wmem_default=212992
/proc/sys/net/core/wmem_max 定义发送窗口的最大大小;对于更大的 BDP 来说,这个大小也应该更大。
  /proc/sys/net/core/wmem_max=212992
/proc/sys/net/ipv4/tcp_window_scaling 启用 RFC 定义的 window scaling;要支持超过 64KB 的窗口,必须启用该值。
  /proc/sys/net/ipv4/tcp_window_scaling=1
/proc/sys/net/ipv4/tcp_sack 启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这 个选项应该启用,但是这会增加对 CPU 的占用。
  /proc/sys/net/ipv4/tcp_sack=1
/proc/sys/net/ipv4/tcp_fack 启用转发应答(Forward Acknowledgment),这可以进行有选择应答(SACK)从而减少拥塞情况的发生;这个选项也应该启用。
  /proc/sys/net/ipv4/tcp_fack=1
/proc/sys/net/ipv4/tcp_timestamps 以一种比重发超时更精确的方法(请参阅 RFC )来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。
  /proc/sys/net/ipv4/tcp_timestamps=1
/proc/sys/net/ipv4/tcp_mem 确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减 少对内存的使用。对于较大的 BDP 可以增大这些值(但是要记住,其单位是内存页,而不是字节)。
  /proc/sys/net/ipv4/tcp_mem=46392 61856 92784
/proc/sys/net/ipv4/tcp_wmem 为自动调优定义每个 socket 使用的内存。第一个值是为 socket 的发送缓冲区分配的最少字节数。第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值。第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。
  /proc/sys/net/ipv4/tcp_wmem=4096 16384 4194304
/proc/sys/net/ipv4/tcp_rmem 与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值。
  /proc/sys/net/ipv4/tcp_rmem=4096 87380 6291456
/proc/sys/net/ipv4/tcp_low_latency 允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况;这个选项应该禁用。
  /proc/sys/net/ipv4/tcp_low_latency=0
/proc/sys/net/ipv4/tcp_westwood 启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽的整体利用情况进行优化;对于 WAN 通信来说应该启用这个选项。
  /proc/sys/net/ipv4/tcp_westwood: No such file or directory
/proc/sys/net/ipv4/tcp_bic 为快速长距离网络启用 Binary Increase Congestion;这样可以更好地利用以 GB 速度进行操作的链接;对于 WAN 通信应该启用这个选项。
  /proc/sys/net/ipv4/tcp_bic: No such file or directory

(以上内容引自http://www.ibm.com/developerworks/cn/linux/l-hisock.html )

看了上面的内容,我对自己的服务器调整了一下,加了下面几个参数到sysctl.conf里面

net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.ipv4.tcp_rmem = 8192 4194304 8388608
net.ipv4.tcp_wmem = 4096 2097152 8388608

再去试了一下Copy文件,速度果然有5%-8%的提高,那么,下面的问题,就是samba的性能了。去samba的网站看看它的howto, 里面提高几个问题,一个是samba如何log,这个会对性能有一定的影响,但不大,最多也就是百分之几的差别。仔细看了howto以后,我设了如下几个 参数:

# Some other performace tuning options
# disable links and symbol links
    follow symlinks = no
    wide links = no
# enable some read/write tuning
    use sendfile = yes
    read raw = yes
    write raw = yes
    aio read size = 16384
    aio write size = 16384
    write cache size = 262144
    max xmit = 65536
    large readwrite = yes
    getwd cache = yes
# disable locking, because only 2 share can be written.
    strict locking = no
    fake oplocks = yes
    oplocks = no

来说明一下,

  • follow symlinks ,对我来说不需要,Windows好象不支持这种符号连接,我也不需要在共享里有这个东西,所以关闭
  • wide links,同上,不需要
  • aio read/write size,是和异步读写有关的,设大一点比较好
  • oplocks和locking这两个决定samba是否对文件进行lock测试,如果一个用户以write方式打开了这个文件,那么其它用户就 不能再以write打开,这两个东西很费内存,也同样会降低samba的性能。 另外,我有很多个share,其中只有两个是所有人都可以写的,其它的都只有一个用户能写,对于后者,不需要打开这个,因为共享设计就是别人无法写。 那么就在global里面把这几个和lock有关的参数关掉,在那两个所有人可以写的share再打开。
  • 所有基它的参数,都是samba里面提到的performance tunning的参数我就不一个一个的说了,要了解它的可以去 http://us1.samba.org/samba/docs/man/Samba-HOWTO-Collection/  看 看

好了,samba也调整了,再试一下copy文件。WOW~~ 网络占用率达到了80%,提高了一倍!! 当然,所有的有数值的参数,都是需要对应实际应用来调整的,我在这里只是简单的设了一下,性能就提高一倍多,相信仔细调整后网络占用率应该能达到与 Windows相当的水平,也就是80%~90%

samba性能调优的更多相关文章

  1. samba性能调优,调优后,性能增加30%

    global中增加下面内容. [global]    use sendfile = yes    write raw = yes    read raw = yes    max xmit = 655 ...

  2. linux概念之性能调优

    目前,对系统进行性能调试的工具有很多,这些可以两大类:一类是标准的分析工具,即所有的UNIX都会带的分析工具: 另一类是不同厂商的UNIX所特有的性能分析工具,比如HP-UX就有自己的增值性能分析工具 ...

  3. web前端性能调优

    最近2个月一直在做手机端和电视端开发,开发的过程遇到过各种坑.弄到快元旦了,终于把上线了.2个月干下来满满的的辛苦,没有那么忙了自己准备把前端的性能调优总结以下,以方便以后自己再次使用到的时候得于得心 ...

  4. [网站性能2]Asp.net平台下网站性能调优的实战方案

    文章来源:http://www.cnblogs.com/dingjie08/archive/2009/11/10/1599929.html 前言    最近帮朋友运营的平台进行了性能调优,效果还不错, ...

  5. Asp.net平台下网站性能调优的实战方案(转)

    转载地址:http://www.cnblogs.com/chenkai/archive/2009/11/07/1597795.html 前言 最近帮朋友运营的平台进行了性能调优,效果还不错,所以写出来 ...

  6. 第0/24周 SQL Server 性能调优培训引言

    大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于 ...

  7. sqlserver性能调优第一步

    相信不少的朋友,无论是做开发.架构的,还是DBA等,都经常听说“调优”这个词.说起“调优”,可能会让很多技术人员心头激情澎湃,也可能会让很多人感觉苦恼,不知道如何入手.当然,也有很多人对此不屑一顾,因 ...

  8. JavaScript:内存泄露、性能调优

    1.在进行JS内存泄露检查之前,先要了解JS的内存管理: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Manageme ...

  9. hadoop 性能调优与运维

    hadoop 性能调优与运维 . 硬件选择 . 操作系统调优与jvm调优 . hadoop运维 硬件选择 1) hadoop运行环境 2)  原则一: 主节点可靠性要好于从节点 原则二:多路多核,高频 ...

随机推荐

  1. TCP协议和UDP协议区别

    tcp协议:可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TCP的应用:Web浏览器:文件传输程序 udp协议:不可靠的.无连接的服务,传 ...

  2. lua劈分字符串方法及实例

    由于工作项目需要,最近需要用lua来写一些脚本.然而lua并不想java那样有很多的好用的api,很多方法得我们自己来编写和封装,就比如今天碰到的劈分字符串,查找资料后只能自己写了一个. 代码如下 - ...

  3. Linux命令详解-man

    man 命令提供有关主题的参考信息,例如命令.子例程和文件.man 命令提供由名称指定的对命令的单行描述.man 命令也提供所有命令的信息,这些命令的描述包含用户指定的关键字集合. 1.命令格式: m ...

  4. UVA-1605 Building for UN (构造)

    题目大意:n个国家的人要在一栋大厦里办公,要求任意两个国家的办公室要相邻(同层同边或邻层同面),设计一个满足要求的方案. 题目分析:题目限制较少,任意构造出一个解即可. 代码如下: # include ...

  5. UI测试_错题解析

    解析:因为jQuery easyUI是基于jQuery框架在使用之前应该先引入jquery框架否则jQuery easyUI将失效,故D错误 解析:考Link标签和script标签的区别,Link引入 ...

  6. Spring的注解@Qualifier(二十五)

    转载:https://www.cnblogs.com/smileLuckBoy/p/5801678.html 近期在捯饬spring的注解,现将遇到的问题记录下来,以供遇到同样问题的童鞋解决~ 先说明 ...

  7. Chrome插件(Extensions)开发实践

    内容摘自:http://www.cnblogs.com/mfryf/p/3701801.html

  8. 控制反转(IOC)模式

    控制反转(Inversion of Control):提倡实现松耦合层.组件和类的设计原则,颠倒程序的控制流程.IoC使用分离执行特定问题处理代码的概念: IoC意味着将你设计好的对象交给容器控制,而 ...

  9. 身份证&银行卡识别方案

    一.  调用第三方服务 腾讯云OCR识别: 实现方法:Post图片 URL到腾讯云服务器.Post图片文件 到腾讯云服务器 b.    报价: 月接口调用总量 0<调用量≤1000 1000&l ...

  10. [Tomcat无法启动]'Starting Tomcat v8.0 Server at localhost' has encountered a problem.

    运行一个index.jsp,运行提示如下错误:点击服务器 解决办法1: 点击Tomcat服务器,将服务器里的web工程删除掉,再重新运行index.jsp. 解决办法2: 关闭Tomcat,最简单的方 ...