在 Linux 上搭建/使用 FTP Server 时,如果觉得传输速度慢,可以从 协议选择、系统配置、网络、磁盘、FTP 软件参数 几个方面来优化。下面按实用程度给你一个清单。
如果业务允许,优先用 SFTP / FTPS / rsync,比传统 FTP 快且安全:
scp / sftp / rsync -e ssh老式明文 FTP 在 NAT、防火墙、小包场景下性能很差。
大多数客户端/网络环境都更适合:
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=公网IP
确保防火墙放行这些端口。
# vsftpd
write_enable=YES
local_umask=022
系统层面(见下文 TCP 优化)。
xferlog_std_format=YES
ls_recurse_enable=NO
ascii_upload_enable=NO
ascii_download_enable=NO
ASCII 模式会逐字节处理,非常慢。
listen=YES
避免每次连接都 fork。
编辑 /etc/sysctl.conf:
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_congestion_control = bbr
应用:
sysctl -p
BBR(Linux 4.9+)对高延迟/大带宽网络提升明显。
FTP 慢常常是磁盘瓶颈:
ext4 / xfsnoatime,nodiratime
查看瓶颈:
iostat -x 1
max_clients=200
max_per_ip=10
ulimit -n 65535
/etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
lftp -e "set net:max-rate 0; pget -n 10 file; exit" ftp://server
| 现象 | 原因 |
|---|---|
| 单连接慢 | TCP 窗口小 |
| 大量小文件慢 | FTP 协议开销 |
| 公网慢 | 没开 PASV / BBR |
| CPU 高 | ASCII 模式 / 加密 |
如果你愿意,可以告诉我:
我可以直接给你一套“可复制的配置”。