众所周知,软件性能调优不是一撮而就的事情,它是一个反复磨合的过程。下面介绍FastDFS几个性能调优相关的重要参数,供大家参考。
- 最大并发连接数
配置文件:tracker.conf 和 storage.conf
参数名:max_connections
缺省值:256,默认配置:1024
FastDFS为一个连接分配一个task buffer,为了提升分配效率,FastDFS采用内存池的做法。FastDFS老版本直接事先分配 max_connections 个buffer,这个做法显然不是太合理,在max_connections 设置过大的情况下太浪费内存。v5.04对预分配采用增量方式,tracker一次预分配1024个,storage一次预分配256个。task buffer实际内存占用情况测算如下:
改进前:max_connections * buffer_size
改进后:预分配buffer数 * buffer_size
使用v5.04及后续版本,可以根据实际需要将 max_connections 设置为一个较大的数值,比如 10240 或65535 甚至更大。
友情提示:此时需要将一个进程允许打开的最大文件数调大到超过max_connections,否则FastDFS server启动会报错。
2. 工作线程数
配置文件:tracker.conf 和 storage.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
1)disk_rw_separated:磁盘读写是否分离,缺省值为 true
2)disk_reader_threads:单个磁盘文件读取线程数,缺省值为 1
3)disk_writer_threads:单个磁盘文件写入线程数,缺省值为 1
注:单个(或一个)磁盘对应storage server的一个store path。
如果磁盘读写混合,单个磁盘读写线程总数为读取线程数 与 写入线程数之和。
对于单盘挂载方式,磁盘读写线程分别设置为 1 即可。
如果磁盘做了RAID,比如RAID5或RAID10,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘IO能力。
4. storage同步延迟相关设置
配置文件:storage.conf
1)sync_binlog_buff_interval:将binlog buffer写入磁盘的时间间隔,单位为秒,取值大于0,缺省值为60,建议设置为1。
2)sync_wait_msec:如果没有需要同步的文件,对binlog进行轮询的时间间隔,单位为毫秒,取值大于0,缺省值为200,建议设置为50。
3)sync_interval:同步完一个文件后,休眠的毫秒数,缺省值为0,通常设置为0即可。
为了尽快完成文件同步,将上述3个参数适当调小即可。
友情提示:上面给出的建议值基本就是最佳实践了。
通常FastDFS自带配置文件tracker.conf 和 storage.conf中的默认配置就可以满足你的实际需求。如果你希望FastDFS server达到更好的运行效果,那就动手调整你的配置吧。
本文分享自微信公众号 - FastDFS分享与交流(fastdfs100)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。