Shadowsocks CentOS 服务器优化

服务器明明不限制带宽,访问网站页面却出奇的慢?看了 VPS 的监控也只能达到几百kb的带宽,实在忍受不了这样的龟速,开启这次针对Shadowsoks的服务器优化之路。

系统说明

本次只针对 CentOS 7 系统,其他发行方的系统或者7以外版本的系统均没有实际操作,不能保证按照这次操作流程可以成功操作。本次涉及操作系统内核升级,请操作前备份重要数据以防止升级失败造成的数据丢失问题。

检查系统内核版本,是否为3.5版本以上

1
2
# uname -sr
> Linux 3.10.0-957.27.2.el7.x86_64

升级 CentOS 7.× 内核,启用 ELRepo

大多数现代发行版提供了一种使用 yum 等包管理系统和官方支持的仓库升级内核的方法。

但是,这只会升级内核到仓库中可用的最新版本,而不是在 The Linux Kernel Archives 中可用的最新主线稳定内核.不幸的是, Red Hat 只允许使用 yum 升级内核.与 Red Hat 不同,CentOS 允许使用 ELRepo,这是一个第三方仓库,可以将内核升级到最新主线稳定内核.

要在 CentOS 7.× 上启用 ELRepo 仓库,请运行:

1
2
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

仓库启用后,你可以使用下面的命令列出可用的系统内核相关包:

1
# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

接下来,安装最新的主线稳定内核:

1
# yum --enablerepo=elrepo-kernel install kernel-ml

由于网络原因,以上操作可能需要不少时间.

重启机器,检查当前 CentOS 系统内核版本

1
2
# uname -sr
> Linux 5.3.10-1.el7.elrepo.x86_64

可以看到系统内核已经升级到最新的主线稳定内核.

设置 GRUB 默认的内核版本

为了让新安装的内核成为默认启动选项,你需要如下修改 GRUB 配置,打开并编辑 /etc/default/grub 并设置 GRUB_DEFAULT=0.意思是 GRUB 初始化页面的第一个内核将作为默认内核.

1
2
3
4
5
6
7
8
9
# vim /etc/default/grub

> 1 GRUB_TIMEOUT=5
> 2 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
> 3 GRUB_DEFAULT=0
> 4 GRUB_DISABLE_SUBMENU=true
> 5 GRUB_TERMINAL_OUTPUT="console"
> 6 GRUB_CMDLINE_LINUX="consoleblank=0 crashkernel=auto rhgb quiet"
> 7 GRUB_DISABLE_RECOVERY="true"

接下来运行下面的命令来重新创建内核配置.

1
# grub2-mkconfig -o /boot/grub2/grub.cfg

重启机器,查看系统当前内核版本,验证最新的内核已作为默认内核

删除 CentOS 更新后的旧内核

查看系统中全部的内核 RPM 包:

1
2
3
4
5
6
7
# rpm -qa | grep kernel

> kernel-tools-libs-3.10.0-957.27.2.el7.x86_64
> kernel-tools-3.10.0-957.27.2.el7.x86_64
> kernel-3.10.0-957.27.2.el7.x86_64
> kernel-ml-5.3.10-1.el7.elrepo.x86_64
> kernel-3.10.0-957.el7.x86_64

删除旧内核的 RPM 包:

1
# yum remove kernel-tools-libs-3.10.0-957.27.2.el7.x86_64 kernel-tools-3.10.0-957.27.2.el7.x86_64 kernel-3.10.0-957.27.2.el7.x86_64 kernel-3.10.0-957.el7.x86_64

重启系统

1
# reboot

内核参数优化

第一步,增加系统文件描述符的最大限数

编辑文件 limits.conf

1
# vim /etc/security/limits.conf

增加以下两行

1
2
* soft nofile 51200
* hard nofile 51200

启动shadowsocks服务器之前,设置以下参数

1
# ulimit -n 51200

第二步,调整内核参数

修改配置文件 /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 = 4096

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

修改后执行 sysctl -p 使配置生效

重启Shadowsocks 服务