FastDFS性能调优know how

Stella981
• 阅读 1022

众所周知,软件性能调优不是一撮而就的事情,它是一个反复磨合的过程。下面介绍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源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
JVM性能调优详解
前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。性能调优性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。性能调优基本上按照以下
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Easter79 Easter79
3年前
Tomcat和JVM的性能调优总结
<divclass"cmarkdownJarticleContent"<pTomcat性能调优:</p<p找到Tomcat根目录下的conf目录,修改server.xml文件的内容。对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建的线程数的设置,当然还有其他一些性能调优的设置,下图是我根
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这