优化 Linux FTP 服务器性能,通常从 系统层、网络层、FTP 服务配置、磁盘 IO、并发与安全策略 几个方面入手。下面以 vsftpd(最常见) 为主,同时给出通用优化建议。
FTP 高并发时会消耗大量 fd。
# 查看当前限制
ulimit -n
# 临时修改
ulimit -n 65535
# 永久修改
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
编辑 /etc/sysctl.conf:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.netdev_max_backlog = 65535
生效:
sysctl -p
编辑 /etc/vsftpd/vsftpd.conf:
# 关闭 DNS 反向解析(非常重要)
reverse_lookup_enable=NO
# 最大连接数
max_clients=5000
# 每 IP 最大连接数
max_per_ip=50
# 最大传输速率(字节/秒)
local_max_rate=0 # 0 表示不限速,可按需设置
anon_max_rate=0
# 空闲超时
idle_session_timeout=300
data_connection_timeout=120
# 使用独立模式(性能更好)
listen=YES
被动模式对高并发和 NAT 环境更友好。
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
防火墙放行端口:
firewall-cmd --add-port=30000-31000/tcp --permanent
firewall-cmd --reload
# 关闭匿名访问
anonymous_enable=NO
# 关闭写日志(如不需要)
xferlog_enable=NO
# 关闭 chroot 若不需要
chroot_local_user=NO
mount -o noatime,nodiratime,data=writeback /dev/sdb /data
永久生效 /etc/fstab:
/dev/sdb /data xfs noatime,nodiratime 0 0
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
| 功能 | 性能影响 | 建议 |
|---|---|---|
| SSL/TLS | 高 | 非必要关闭 |
| 日志 | 中 | 关闭或异步 |
| 反向 DNS | 高 | 必须关闭 |
| chroot | 中 | 按需开启 |
# 并发测试
ftp -n 127.0.0.1 21
或使用工具:
lftp -e "mirror --parallel=10" ftp://user:pass@host
| 场景 | 更好选择 |
|---|---|
| 大规模文件分发 | HTTP / CDN |
| 同步/增量 | rsync |
| 高安全 | SFTP(SSH) |
| 云环境 | 对象存储 |
✅ 关闭 DNS 反向解析
✅ 提高 fd 限制
✅ 使用被动模式
✅ 调整内核参数
✅ 关闭不必要功能
✅ 使用 SSD + XFS
✅ 合理限速与并发控制
如果你愿意,可以告诉我:
我可以给你一套 针对你环境的精准优化方案。