Shadowsocks服务器TCP优化配置

文章目录

在debian系统的vps上搭建shadowsocks-libev这篇文章中,我介绍了shadowsocks-libev的安装及使用。如果您的vps服务器不是openvz环境的话,可以尝试对Shadowsocks服务器TCP优化配置。

该篇文章不支持openvz环境,bandwagonhost为openvz环境,因此,若vps为bandwagonhost,无需再往下看。

增加打开文件数量

编辑limits.conf

1
vi /etc/security/limits.conf

增加以下两行

1
2
* soft nofile 51200
* hard nofile 51200

开启shadowsocks服务之前,先设置一下ulimit

1
ulimit -n 51200

调整内核参数

首先科普下TCP拥塞控制算法:
中美之间的线路质量不是很好,rtt较长且时常丢包。TCP的设计目的是解决不可靠线路上可靠传输的问题,即为了解决丢包,但丢包却使TCP传输速度大幅下降。HTTP协议在传输层使用的是TCP协议,所以网页下载的速度就取决于TCP单线程下载的速度(因为网页就是单线程下载的)。丢包使得TCP传输速度大幅下降的主要原因是丢包重传机制,控制这一机制的就是TCP拥塞控制算法。

Linux内核中提供了若干套TCP拥塞控制算法,这些算法各自适用于不同的环境。
1)reno是最基本的拥塞控制算法,也是TCP协议的实验原型。
2)bic适用于rtt较高但丢包极为罕见的情况,比如北美和欧洲之间的线路,这是2.6.8到2.6.18之间的Linux内核的默认算法。
3)cubic是修改版的bic,适用环境比bic广泛一点,它是2.6.19之后的linux内核的默认算法。
4)hybla适用于高延时、高丢包率的网络,比如卫星链路——同样适用于中美之间的链路。

我们需要做的工作就是将TCP拥塞控制算法改为hybla算法,并且优化TCP参数。

1、查看可用的算法。
主要看内核是否支持hybla,如果没有,只能用cubic了。

1
sysctl net.ipv4.tcp_available_congestion_control

2、如果没有该算法,则加载hybla算法(不支持OpenVZ)

1
/sbin/modprobe tcp_hybla

3、首先做好备份工作,把sysctl.conf备份到root目录

1
cp /etc/sysctl.conf /root/

4、修改sysctl.conf配置文件,优化TCP参数

1
vi /etc/sysctl.conf

添加以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
fs.file-max = 51200
#提高整个系统的文件限制
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 3240000
 
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
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_fastopen = 3
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla

5、保存生效

1
sysctl -p

小结

经测试,digitaloceanramnode的KVM等内核支持hybla算法。但是linode的内核目前不支持,请参考Linode内核加载hybla模块进行加载。

需要注意的是每次重启需要重新加载hybla算法模块。

参考文章:http://shadowsocks.org/en/config/advanced.html



本文出自 TENNFY WU,转载时请注明出处及相应链接。

本文永久链接: http://www.tennfy.com/1978.html

下一篇文章:

上一篇文章:

31人参与了讨论

  1. 屠龙 说:

    还是第一次听过这个算法呢 :razz:

  2. shenbin 说:

    搬瓦工搭建的SS服务器端可以用这个优化吗?

  3. newbie 说:

    我按以上代码改好后 执行 sysctl -p 结果出现
    这些新加的代码都显示error:permission denied

    我用的是 帮瓦工 的 openvz

    请问如何解决呀 :?:

  4. Anson 说:

    bandwagonhost 改TCP 数量 这个有用吗

    谢谢

  5. Anson 说:

    E325: ATTENTION
    Found a swap file by the name “/etc/security/.limits.conf.swp”
    owned by: root dated: Mon Aug 4 00:49:38 2014
    file name: /etc/security/limits.conf
    modified: YES
    user name: root host name: default
    process ID: 1442
    While opening file “/etc/security/limits.conf”
    dated: Mon Oct 17 13:03:14 2011

    (1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

    (2) An edit session for this file crashed.
    If this is the case, use “:recover” or “vim -r /etc/security/limits.conf”
    to recover the changes (see “:help recovery”).
    If you did this already, delete the swap file “/etc/security/.limits.conf.swp”
    to avoid this message.

    Swap file “/etc/security/.limits.conf.swp” already exists!
    [O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

  6. wangsmile 说:

    请问下修改成较小的端口,这个怎么修改?

  7. 追梦 说:

    windows的怎么优化?

  8. DickChen 说:

    1
    /sbin/modprobe tcp_hybla
    查看可用的算法。主要看hybla是否有hybla,如果没有,只能用cubic了。

    1
    sysctl net.ipv4.tcp_available_congestion_control
    这两汉代码是不是说第一行不起作用(出错)时再运行第二行的?

  9. tennfy 说:

    上面一行是启用hybla算法,下面是查看有没有启用成功

  10. neverever 说:

    请问楼主sysctl.conf里面原来的文本是不是全部删除?然后复制上面的进去?

      • neverever 说:

        谢谢!
        * soft nofile 51200
        * hard nofile 51200
        这两行加到limits.conf哪个位置,前在要不要加#号?我打开里面是这样的?不会Linux,看不懂!

        # /etc/security/limits.conf
        #
        #Each line describes a limit for a user in the form:
        #
        #
        #
        #Where:
        # can be:
        # – an user name
        # – a group name, with @group syntax
        # – the wildcard *, for default entry
        # – the wildcard %, can be also used with %group syntax,
        # for maxlogin limit
        # – NOTE: group and wildcard limits are not applied to root.
        # To apply a limit to the root user, must be
        # the literal username root.
        #
        # can have the two values:
        # – “soft” for enforcing the soft limits
        # – “hard” for enforcing hard limits
        #
        # can be one of the following:
        # – core – limits the core file size (KB)
        # – data – max data size (KB)
        # – fsize – maximum filesize (KB)
        # – memlock – max locked-in-memory address space (KB)
        # – nofile – max number of open files
        # – rss – max resident set size (KB)
        # – stack – max stack size (KB)
        # – cpu – max CPU time (MIN)
        # – nproc – max number of processes
        # – as – address space limit (KB)
        # – maxlogins – max number of logins for this user
        # – maxsyslogins – max number of logins on the system
        # – priority – the priority to run user process with
        # – locks – max number of file locks the user can hold
        # – sigpending – max number of pending signals
        # – msgqueue – max memory used by POSIX message queues (bytes)
        # – nice – max nice priority allowed to raise to values: [-20, 19]
        # – rtprio – max realtime priority
        # – chroot – change root to directory (Debian-specific)
        #
        #
        #

        #* soft core 0
        #root hard core 100000
        #* hard rss 10000
        #@student hard nproc 20
        #@faculty soft nproc 20
        #@faculty hard nproc 50
        #ftp hard nproc 0
        #ftp – chroot /ftp
        #@student – maxlogins 4

        # End of file

  11. amdme 说:

    请问博主,用的是你写的shadowsocks一键安装脚本,已经添加了自启动,那要怎么样才能在shadowsocks启动前设置ulimit呢?

    或者说博主可以考虑下有空的时候也写一个TCP优化脚本?把这个和shadowsocks一键脚本整合到一起? :mrgreen:

    • tennfy 说:

      这个没必要写脚本,就是修改一个文件。这个优化方式也仅仅是针对xen或kvm环境的,对于搬瓦工之类的OPENVZ环境没有意义。不具备普遍适用性,不合适放在ss脚本里

  12. amdme 说:

    在DO上

    sysctl: setting key “net.core.somaxconn”: Invalid argument

    这段会报无效参数,貌似是值太大了。换成4096可用

  13. 绵羊 说:

    :shock: 报无法解析,脚本地址挂了么?

  14. 屠夫9441 说:

    请问那些net.ipv4开头的代码,能否直接把ipv4改成ipv6从而应用在ipv6上呢?谢谢!

  15. Kjian 说:

    调整内核参数也就是更改TCP方案这块,是添加代码还是把sysctl.conf清空只写入那些内容?

  16. Poby 说:

    这个和锐速加速有区别吗?可以两个都加进去吗?

  17. 胡歌网摘 说:

    服务端如何设置可以支持ss的tcp头混淆?

  18. hana 说:

    首先非常感谢博主的教程 其次是想问下 用过博主的shadowsocks-libev一键安装之后 还需要进行优化么 谢谢

  19. 小明 说:

    我是在linode的东京centos6.5 64位,安装ss使用一段时间后,ss就中断了,到服务器上看ss状态是正常的,重启ss服务都不行,必须重启服务器后ss才能恢复正常,请问何解?
    服务器上只安装了一键安装包,没有其他任何服务

  20. 柒安 说:

    很好用啊,搬瓦工的KVM架构也可以适用,感谢感谢!

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

6 + 3 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部