FastDfs异常处理

1  receive conent error java.net.SocketTimeoutException: Read timed out/com.github.tobato.fastdfs.domain.conn.ConnectionManager - execute fdfs command error
com.github.tobato.fastdfs.exception.FdfsIOException: 客户端连接服务端出现了io异常:socket io exception occured while receive content

客户端报如下错误(客户端每分钟4000个请求上传文件100K)

2020-01-10 16:29:02.782 [Thread-23] ERROR com.github.tobato.fastdfs.domain.proto.AbstractFdfsCommand - receive conent error
java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.net.SocketInputStream.read(SocketInputStream.java:127)
    at com.github.tobato.fastdfs.domain.proto.ProtoHead.createFromInputStream(ProtoHead.java:103)
    at com.github.tobato.fastdfs.domain.proto.AbstractFdfsCommand.receive(AbstractFdfsCommand.java:103)
    at com.github.tobato.fastdfs.domain.proto.AbstractFdfsCommand.execute(AbstractFdfsCommand.java:50)
    at com.github.tobato.fastdfs.domain.conn.ConnectionManager.execute(ConnectionManager.java:81)
    at com.github.tobato.fastdfs.domain.conn.ConnectionManager.executeFdfsCmd(ConnectionManager.java:65)
    at com.github.tobato.fastdfs.service.DefaultFastFileStorageClient.uploadFileAndMetaData(DefaultFastFileStorageClient.java:223)
    at com.github.tobato.fastdfs.service.DefaultFastFileStorageClient.uploadFile(DefaultFastFileStorageClient.java:112)
    at com.github.tobato.fastdfs.service.DefaultFastFileStorageClient.uploadFile(DefaultFastFileStorageClient.java:68)
    at com.cf.viias.config.fastdfs.FastDFSClientWrapper.uploadFile(FastDFSClientWrapper.java:44)
    at com.cf.viias.service.PushFaceService$1.run(PushFaceService.java:138)
    at java.lang.Thread.run(Thread.java:748)
2020-01-10 16:29:02.782 [Thread-18] ERROR com.github.tobato.fastdfs.domain.conn.ConnectionManager - execute fdfs command error
com.github.tobato.fastdfs.exception.FdfsIOException: 客户端连接服务端出现了io异常:socket io exception occured while receive content
    at com.github.tobato.fastdfs.domain.proto.AbstractFdfsCommand.execute(AbstractFdfsCommand.java:53)
    at com.github.tobato.fastdfs.domain.conn.ConnectionManager.execute(ConnectionManager.java:81)
    at com.github.tobato.fastdfs.domain.conn.ConnectionManager.executeFdfsCmd(ConnectionManager.java:65)
    at com.github.tobato.fastdfs.service.DefaultFastFileStorageClient.uploadFileAndMetaData(DefaultFastFileStorageClient.java:223)
    at com.github.tobato.fastdfs.service.DefaultFastFileStorageClient.uploadFile(DefaultFastFileStorageClient.java:112)
    at com.github.tobato.fastdfs.service.DefaultFastFileStorageClient.uploadFile(DefaultFastFileStorageClient.java:68)
    at com.cf.viias.config.fastdfs.FastDFSClientWrapper.uploadFile(FastDFSClientWrapper.java:44)
    at com.cf.viias.service.PushFaceService$1.run(PushFaceService.java:138)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.net.SocketInputStream.read(SocketInputStream.java:127)
    at com.github.tobato.fastdfs.domain.proto.ProtoHead.createFromInputStream(ProtoHead.java:103)
    at com.github.tobato.fastdfs.domain.proto.AbstractFdfsCommand.receive(AbstractFdfsCommand.java:103)
    at com.github.tobato.fastdfs.domain.proto.AbstractFdfsCommand.execute(AbstractFdfsCommand.java:50)
    ... 8 common frames omitted

解决方案:

出现此错误的本质是服务端处理不过来了客户端的请求,核心是需要调高服务端的处理能力,也可以增加客户端超时时长 ,让客户端等待服务端处理。

客户端优化

springboot 将 fdfs.so-timeout=1500 增大 fdfs.so-timeout=5000(其实质是调整了  socket.setSoTimeout(soTimeout))

 

服务端优化 

可以增加服务端节点数量,如果没有条件 可以调整如下参数

优化Storage的配置参数

1、accept_threads 该参数决定接收客户端连接的线程数,默认值为1,适当放大该参数可改善Storage处理连接的能力,改成     2
2、work_threads 工作线程用来处理网络IO,默认值为4,该参数影响Stroage可以同时处理的连接数,适当的调整这里改为20.
3、disk_reader_threads 读取磁盘数据的线程数,对应到每个存储路径,线上环境Storage只有一个路径,默认为1,这里改为4、disk_writer_threads 写磁盘的线程数量,也是对应一个存储路径,默认为1这里修改为5 ,提高读取磁盘的线程数.
5  如果有条件增加磁盘 ,可以调整

# path(disk or mount point) count, default value is 1
store_path_count=1
# 存放文件时storage server支持多个路径(例如磁盘)。这里配置存放文件的基路径数目,通常只配一个目录。

# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/home/yuqing/fastdfs
#store_path1=/home/yuqing/fastdfs2
# 逐一配置store_path个路径,索引号基于0。注意配置方法后面有0,1,2 ......,需要配置0到store_path - 1。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows下使用FastDFS需要进行以下步骤: 1. 安装FastDFS依赖的软件: - 安装C语言编译器,如MinGW、Cygwin或者Visual Studio等。 - 安装libevent库,可以从官网下载源码编译安装,也可以从第三方网站下载预编译的版本。 - 安装libfastcommon库,可以从GitHub上下载源码编译安装。 2. 下载FastDFS源码: - 从FastDFS官方网站下载最新版本的源码压缩包,解压到本地。 3. 编译FastDFS: - 打开命令行界面(如cmd),进入FastDFS源码目录。 - 执行命令`make`编译FastDFS。 - 执行命令`make install`安装FastDFS。 4. 配置FastDFS: - 进入FastDFS安装目录,编辑`tracker.conf`和`storage.conf`配置文件。 - 根据实际需求修改配置参数,如Tracker服务器IP、端口等。 - 配置存储节点的IP、端口、存储路径等信息。 - 保存配置文件并退出。 5. 启动FastDFS: - 执行命令`trackerd start`启动Tracker服务器。 - 执行命令`storaged start`启动存储服务器。 6. 测试FastDFS: - 使用FastDFS提供的命令行工具或者API进行文件上传、下载等操作,验证FastDFS是否正常运行。 请注意,FastDFS是一个基于Linux的分布式文件系统,官方并没有提供Windows下的官方支持。上述步骤是通过在Windows环境下安装依赖库以及编译源码来实现的。在Windows环境下使用FastDFS可能会遇到一些兼容性或者功能限制的问题,建议在Linux环境下部署和使用FastDFS以获得更好的稳定性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值