seafile服务器下载大文件卡死【已解决】


#1

找到原因了,是nginx设置的问题,在服务器手册中讲了,

如果要上传大于 4GB 的文件,默认情况下 Nginx 会把整个文件存在一个临时文件中,然后发给上游服务器 (seaf-server),这样容易出错。
使用 1.8.0 以上版本同时在 Nginx 配置文件中设置以下内容能解决这个问题:
    location /seafhttp {        ... ...        proxy_request_buffering off;    }

查了一下nginx的配置,里面讲buffer除了request_buffer,还有一个proxy_buffer

proxy_buffer_size 用来接受后端服务器 response 的第一部分,小的response header 通常位于这部分响应内容里边。默认proxy_buffer_size 被设置成 proxy_buffers 里一个buffer 的大小,当然可以设置更小些。
① 如果 proxy_buffers 关闭
Nginx不会尝试获取到后端服务器所有响应数据之后才返回给客户端,Nginx 会尽快把数据传给客户端,在数据传完之前,Nginx 接收到的最大缓存大小不能超过 proxy_buffer_size 。
② 如果 proxy_buffers 打开
Nginx将会尽可能的读取后端服务器的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF),此时Nginx开始向客户端传输数据,会同时传输这一整串buffer们。如果数据很大的话,Nginx会接收并把他们写入到temp_file里去,大小由proxy_max_temp_file_size 控制。「当数据没有完全读完的时候」,Nginx同时向客户端传送的buffer 大小 不能超过 proxy_busy_buffers_size 「此句可能理解有误」。

参照这段描述,推测原因,在没有配置proxy_buffer选项时,nginx使用了默认的选项,是启用了这个buffer的,而由于文件太大,导致将buffer写满后,向temp_file中写,但是由于蜗牛的主硬盘读写性能差,且空间不足,使得IO一直等待,系统就卡死了。


seafile建在ubuntu16.04上,机子是蜗牛矿机,现在软件版本是7.0.7专业版,3用户免费的。
正常使用时都没问题,但是下载大文件,一个9G的iso镜像,就发现下载时断时续,top查看主机进程,发现top中wa数值很高,不只是下载变慢,ssh连接也变得极慢无比,下载小文件没有这个问题。
内存4G,在机械硬盘上开了4g的swap。
请教一下,这是个bug,还是我哪里设置的有问题。

用客户端不存在这个问题。
用IDM下载,就会这样,就算用单线程下载,也一样。


seafile 客户端下载大文件有问题
#2

wa慢代表磁盘性能不足吧


#3

如果用客户端也出现这种情况,那肯定是硬盘原因了,但是用客户端,一点毛病没有,客户端同步时,可以跑到网络上限,局域网同步时,可以跑到硬盘上限,用下载工具下,一小会儿,就挂了。

补充,测试,webdav挂载,复制到本地,也没出现那个wa高占用的问题。


#4

你用的什么下载工具


#5

internet download manager
uc 浏览器的下载(集成迅雷)

这两个之前都会出那个问题。


#6

不建议使用这种集成了所谓加速器的浏览器上传下载文件,传输机制不同,这些加速器只会捣乱,无法加速的