3、操作系统选型与安装:Linux发行版对比(Ubuntu/CentOS/RHEL)、最小化安装、内核参数调优、用户权限管理

做量化交易系统,操作系统是地基。地基没打好,上层策略再牛也白搭。我见过太多团队,策略回测跑得飞起,一上实盘就各种卡顿、延迟爆炸。查到最后,往往是操作系统层面出了问题。

今天咱们就聊聊,怎么选一个靠谱的Linux发行版,怎么装得干净利落,怎么把内核调得服服帖帖。

3.1 发行版怎么选?Ubuntu、CentOS还是RHEL?

这个问题,几乎每个刚入行的朋友都会问我。我的回答是:看你的场景和团队能力

先看一张对比表,心里有个底:

特性 Ubuntu CentOS RHEL
包管理 apt(deb包) yum/dnf(rpm包) yum/dnf(rpm包)
稳定性 中高(LTS版本) 极高
软件新度 较新 保守 保守
商业支持 社区为主 社区为主(已停止维护) 官方付费支持
适合场景 开发环境、中小团队 生产环境(历史原因) 大型机构、合规要求高

我个人习惯:开发机用Ubuntu LTS,生产环境用RHEL或Rocky Linux(CentOS的替代品)。为什么?

  • Ubuntu:社区活跃,软件包新。你装个Python 3.11、GCC 12,apt一下就行。对量化开发来说,省心。我在项目中遇到过,用Ubuntu装一些最新的机器学习库,几乎没遇到依赖冲突。
  • CentOS:曾经是生产环境的首选。但2021年底CentOS 8停止维护,CentOS 7也快到头了。现在再用它,有点「49年入国军」的意思。不推荐。
  • RHEL:贵,但稳。如果你在券商、银行做量化,合规要求严,必须买商业支持。RHEL的内核经过红帽深度定制,对内存管理、网络栈的优化很到位。说白了,花钱买安心。
我的建议:个人学习或小团队起步,直接上Ubuntu 22.04 LTS。别纠结。等业务做大了,再考虑迁移到RHEL。

3.2 最小化安装:少即是多

很多新手装系统,喜欢「全选」。桌面环境、办公套件、游戏组件……一股脑全装上。结果呢?系统臃肿,后台服务一堆,安全漏洞也多。

做量化交易,尤其是高频场景,系统越干净越好。你想想看,一个没用的进程,可能就抢了你几微秒的CPU时间。在纳秒级竞争里,这差距就大了。

最小化安装的原则就一条:只装你需要的

具体怎么做?

  1. 安装时选择「Server」或「Minimal」:Ubuntu Server版默认就不带桌面。CentOS/RHEL安装时选「Minimal Install」。
  2. 装完后,检查并清理无用包
# Ubuntu/Debian
sudo apt list --installed | grep -E 'snap|thunderbird|libreoffice'
sudo apt remove --purge 包名

# CentOS/RHEL/Rocky
sudo dnf groupremove "GNOME Desktop" "X Window System"
sudo dnf remove cups* postfix*

我曾经帮一个团队排查延迟问题。他们的交易服务器上,竟然跑着cups打印服务。一问,是当初装系统时默认勾上的。关了之后,平均延迟降了5%。嗯,细节决定成败。

注意:清理包时要小心。别把系统依赖给删了。不确定的包,先查一下再动手。

3.3 内核参数调优:让系统为交易而生

Linux内核默认配置,是为了通用场景设计的。做量化交易,我们需要它更「激进」一些。说白了,就是牺牲一些公平性,换取低延迟

核心调优参数,我列几个最关键的:

参数 默认值 推荐值 说明
net.core.rmem_max 212992 134217728 增大接收缓冲区,防止丢包
net.core.wmem_max 212992 134217728 增大发送缓冲区
net.ipv4.tcp_rmem 4096 87380 6291456 4096 87380 134217728 TCP接收窗口调大
net.ipv4.tcp_wmem 4096 16384 4194304 4096 87380 134217728 TCP发送窗口调大
vm.swappiness 60 10 减少内存交换,优先使用物理内存
kernel.sched_migration_cost_ns 500000 5000000 减少进程迁移,提高CPU亲和性

怎么应用?直接改 /etc/sysctl.conf 文件:

# 备份原文件
sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak

# 追加以下内容
cat >> /etc/sysctl.conf << EOF
# 网络优化
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 87380 134217728
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1

# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10

# 调度优化
kernel.sched_migration_cost_ns = 5000000
kernel.sched_autogroup_enabled = 0
EOF

# 立即生效
sudo sysctl -p
核心思路:网络参数往大了调,内存参数往稳了调,调度参数往「粘」了调。让进程尽量留在同一个CPU核心上,减少上下文切换。

这里有个坑。我曾经把 vm.swappiness 直接设成0,结果系统内存吃紧时,直接OOM杀进程。后来改成10,既减少了交换,又留了缓冲。嗯,别走极端

3.4 用户权限管理:安全第一

量化交易系统里,跑的是真金白银。权限管理搞不好,一个误操作就能让你亏到哭。

基本原则:最小权限原则。每个用户、每个进程,只给够用的权限。

我一般这样划分:

  • root:只用于系统安装和维护。日常操作禁用root登录。
  • trade:交易策略运行用户。权限最小化,只能访问策略目录和日志。
  • data:数据采集和存储用户。只能读写数据目录。
  • admin:运维人员。可以通过sudo执行特定命令。

创建用户的命令:

# 创建交易用户,没有家目录,不能登录
sudo useradd -r -s /sbin/nologin -M trade

# 创建数据用户
sudo useradd -r -s /sbin/nologin -M data

# 创建管理员用户
sudo useradd -m -G wheel admin
sudo passwd admin

然后,用 sudoers 文件精细控制权限:

# 允许admin用户重启交易服务,无需密码
admin ALL=(trade) NOPASSWD: /usr/bin/systemctl restart trade.service

# 允许admin用户查看系统日志
admin ALL=(root) /usr/bin/journalctl
千万别:给交易用户sudo权限。我见过有人图省事,直接用root跑策略。结果一次误操作,把整个系统配置删了。恢复花了两天,损失惨重。

另外,SSH安全配置也很重要:

# 编辑 /etc/ssh/sshd_config
PermitRootLogin no          # 禁止root登录
PasswordAuthentication no   # 禁止密码登录,只用密钥
Port 2222                   # 改掉默认22端口,减少扫描
AllowUsers admin            # 只允许特定用户登录

# 重启服务
sudo systemctl restart sshd

这样做的好处是,即使有人扫到了你的服务器,也基本进不来。我有个朋友,服务器天天被扫,改了端口和密钥登录后,再也没被成功登录过。

3.5 本章知识体系

下面这张图,帮你理清本章的核心逻辑:

操作系统选型与安装 - 知识体系 Linux发行版选型 发行版对比 Ubuntu CentOS RHEL 最小化安装 Server版 Minimal 清理无用包 内核参数调优 网络参数 内存参数 调度参数 用户权限管理 用户划分 sudoers SSH安全 四个核心步骤:选型 → 安装 → 调优 → 加固

好了,操作系统这块地基,咱们算是打好了。下一章,咱们聊聊网络环境怎么搭。毕竟,交易系统最怕的就是网络延迟。


专注资料整理