FastDFS性能调优know how

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

  1. 最大并发连接数

配置文件: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源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )