Ipfs: 添加大于 50MB 的文件时,ipfs 0.4.10 崩溃

创建于 2017-07-13  ·  9评论  ·  资料来源: ipfs/ipfs

操作系统:Arch Linux 和 MacOS

~ % ipfs version
ipfs version 0.4.10
~ % ipfs init
initializing IPFS node at /Users/user/.ipfs
generating 2048-bit RSA keypair...done
peer identity: Qme3fGyQWP4mf3J9Ln3EjofWyYhiGgVCZZ41jgVA9o78u7
to get started, enter:

    ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readme

~ % ipfs daemon
Initializing daemon...
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/192.168.0.102/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

让我们尝试添加一个视频:

ipfs add raw_video.mkv
added Qmf6vier2j9rtG7hjA8Bf8ohzT5VYNmGfRntSc4zXsQyPL raw_video.mkv

大约 15-20 秒后,ipfs 将崩溃:
https://gist.github.com/Netherdrake/4da51b24da82fe25ae476cffeb09cc31

这个问题是间歇性的 - 有时添加会成功,我可以毫无问题地访问localhost:8080/ipfs/HASH/raw_video.mkv上的文件,但大多数时候,守护程序会崩溃。

最有用的评论

好的,所以这是添加文件导致 DHT 提供程序子系统连接到太多对等点的情况。 如果您删除--routing=none标志,并使用ipfs add --local东西也应该可以正常工作。

我正在努力解决这个问题,我们希望在下一个版本中有一些东西。

所有9条评论

您可以通过ipfs daemon 2>stderr.log重定向

我也无法重现它,我尝试了大约 10x60MiB 文件。

事实证明,ipfs 在添加任何大文件时都会崩溃。

例如,官方 Ubuntu ISO。

在 MacOS 上它会崩溃:

ipfs add ubuntu-16.04.2-desktop-amd64.iso
 488.00 MB / 1.45 GB [=============================>------------------------------------------------------------]  32.92% 20s17:54:27.509 ERROR commands/h: unexpected EOF client.go:247
Error: unexpected EOF

在 Linux 上它会出错,但守护进程似乎继续运行:

~/Downloads % ipfs add ubuntu-16.04.2-desktop-amd64.iso 
 32.00 MB / 1.45 GB [=>----------------------------------------------------------------------------]   2.16% 30s17:53:01.534 ERROR commands/h: open /home/user/.ipfs/blocks/SF/put-579906520: too many open files client.go:247
Error: open /home/user/.ipfs/blocks/SF/put-579906520: too many open files
% ipfs daemon
Initializing daemon...
Adjusting current ulimit to 2048...
Successfully raised file descriptor limit to 2048.
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/172.17.0.1/tcp/4001
Swarm listening on /ip4/172.18.0.1/tcp/4001
Swarm listening on /ip4/172.19.0.1/tcp/4001
Swarm listening on /ip4/172.20.0.1/tcp/4001
Swarm listening on /ip4/172.21.0.1/tcp/4001
Swarm listening on /ip4/172.22.0.1/tcp/4001
Swarm listening on /ip4/172.23.0.1/tcp/4001
Swarm listening on /ip4/172.24.0.1/tcp/4001
Swarm listening on /ip4/192.168.1.107/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready
17:53:01.534 ERROR commands/h: err: open /home/user/.ipfs/blocks/SF/put-579906520: too many open files handler.go:285

我曾尝试降级到以前的版本,唯一不会崩溃的版本是0.4.6

~/Downloads % ipfs add ubuntu-16.04.2-desktop-amd64.iso 
added QmTc9mzzoEChP2Wyc4uGWGkkifC99y8o4KmxwVyg18MP76 ubuntu-16.04.2-desktop-amd64.iso
~/Downloads % ipfs version
ipfs version 0.4.6
~/Downloads % pacman -Q go-ipfs
go-ipfs 0.4.6-1

我无法使用 ipfs 0.4.10 在 macOS 10.12.5 和 Ubuntu 16.04 上重现此问题。

$ truncate -s 500M testfile
added QmV7q5aTmvZtGWja4wpodiUTEpBVWYFkQGRQ8PmJMDPG62 testfile
$

你的 ipfs 是来自源代码、包管理器还是来自网络的二进制文件? 也许用干净的~/.ipfs目录尝试一下,看看问题是否仍然存在。

他们都来自包管理器。 上述消息中的每个输出都以rm -rf ~/.ipfs && ipfs init开头。

@Netherdrake如果您使用--routing=none选项运行守护程序,它仍然会以同样的方式失败吗?

使用--routing=none可以正常工作。

好的,所以这是添加文件导致 DHT 提供程序子系统连接到太多对等点的情况。 如果您删除--routing=none标志,并使用ipfs add --local东西也应该可以正常工作。

我正在努力解决这个问题,我们希望在下一个版本中有一些东西。

哦,我也意识到这个问题是在错误的回购中。 将来,请使用 ipfs/go-ipfs 报告此类问题。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

randomshinichi picture randomshinichi  ·  5评论

daviddias picture daviddias  ·  29评论

PayasR picture PayasR  ·  10评论

jbenet picture jbenet  ·  34评论

Miserlou picture Miserlou  ·  6评论