FastDFS性能调优

本篇文章转载于FastDFS作者 余庆 大佬的 FastDFS分享与交流 公众号。

众所周知,软件性能调优不是一撮而就的事情,它是一个反复磨合的过程。下面介绍FastDFS 几个性能调优相关的重要参数,供大家参考。

1. 最大并发连接数

配置文件:tracker.confstorage.conf

配置参数 配置描述
max_connections 缺省值:256,默认配置:1024

FastDFS 为一个连接分配一个 task buffer,为了提升分配效率,FastDFS 采用内存池的做法。FastDFS 老版本直接事先分配 max_connectionsbuffer,这个做法显然不是太合理,在 max_connections 设置过大的情况下太浪费内存。v5.04 对预分配采用增量方式,tracker 一次预分配 1024 个,storage 一次预分配 256 个。

task buffer 实际内存占用情况测算如下:

  • 改进前: max_connections * buffer_size
  • 改进后: 预分配buffer数 * buffer_size

使用 v5.04 及后续版本,可以根据实际需要将 max_connections 设置为一个较大的数值,比如 1024065535 甚至更大。

友情提示: 此时需要将一个进程允许打开的最大文件数调大到超过max_connections,否则 FastDFS server 启动会报错。

2. 工作线程数

配置文件:tracker.confstorage.conf

配置参数 配置描述
work_threads 缺省值:4

work threads 主要负责网络 IO 处理,一个线程通过 epoll 这样的机制处理若干个网络连接。work threads 理论上不会消耗太多 CPU,不建议配置得过大。

为了减少 CPU上下文切换的开销,以及不必要的资源消耗,不建议将本参数设置得过大。为了充分发挥出多个 CPU 的效能,系统中的线程数总和,建议不要超过 CPU 总数的 2 倍。

对于tracker server,公式为:

work_threads + 2 <= 2 * CPU总数

对于storage server,公式为:

work_threads + 1 + 本组storage server数 + (disk_reader_threads  + disk_writer_threads) * store_path_count  <= 2 * CPU总数

3. storage磁盘读写线程数

配置文件:storage.conf

配置参数 配置描述
disk_rw_separated 磁盘读写是否分离,缺省值为 true
disk_reader_threads 单个磁盘文件读取线程数,缺省值为 1
disk_writer_threads 单个磁盘文件写入线程数,缺省值为 1

注: 单个(或一个)磁盘对应storage server的一个store path。

如果磁盘读写混合,单个磁盘读写线程总数为读取线程数 与 写入线程数之和。

对于单盘挂载方式,磁盘读写线程分别设置为 1 即可。

如果磁盘做了 RAID,比如 RAID5RAID10,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘 IO 能力。

4. storage同步延迟相关设置

配置文件:storage.conf

配置参数 配置描述
sync_binlog_buff_interval binlog buffer 写入磁盘的时间间隔,单位为 ,取值大于 0,缺省值为 60建议设置为 1
sync_wait_msec 如果没有需要同步的文件,对 binlog 进行轮询的时间间隔,单位为 毫秒,取值大于 0,缺省值为 200建议设置为 50
sync_interval 同步完一个文件后,休眠的毫秒数,缺省值为 0,通常设置为0 即可。

为了尽快完成文件同步,将上述3个参数适当调小即可。

友情提示: 上面给出的 建议值 基本就是最佳实践了。

总结

通常 FastDFS 自带配置文件 tracker.confstorage.conf 中的默认配置就可以满足你的实际需求。如果你希望 FastDFS server 达到更好的运行效果,那就动手调整你的配置吧。