OSError 105:没有缓冲区 Space - Zeroconf
OSError 105 : No buffer Space - Zeroconf
我正在使用 NanoPi M1(Allwinner H3 开发板)和 运行基于 Yocto 的 OS。第一次接触 ZeroConf-python,
>>> from zeroconf import Zeroconf, ServiceBrowser
>>> zero = Zeroconf()
我遇到错误:
File "/usr/lib/python3.5/site-packages/zeroconf.py", line 1523, in __init__
socket.inet_aton(_MDNS_ADDR) + socket.inet_aton(i))
OSError: [Errno 105] No buffer space available
当我在 Raspbian(在 RPI 上)运行 时,不会出现此错误。
我试图在 homeassistant 中搜索此类错误的修复程序,但 none 提供了对实际问题的良好概述,将解决方案放在一边。
将 sysctl
的 net/ipv4/igmp_max_memberships
值更新为大于零。
在终端执行以下命令:
$ systctl -w net.ipv4.igmp_max_memberships=20
(或任何其他大于零的值)
&
$ sysctl -w net.ipv4.igmp_max_msf=10
然后,重启 avahi-daemon
systemctl restart avahi-daemon
您可以使用以下方法验证上述键的现有值
'sysctl net.ipv4.igmp_max_memberships'.
Neelotpal 回答的补充:
这个 post 包含一个很好的解决方案建议,其中包含检查此问题的所有选项:
# Bigger buffers (to make 40Gb more practical). These are maximums, but the default is unaffected.
net.core.wmem_max=268435456
net.core.rmem_max=268435456
net.core.netdev_max_backlog=10000
# Avoids problems with multicast traffic arriving on non-default interfaces
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
# Force IGMP v2 (required by CBF switch)
net.ipv4.conf.all.force_igmp_version=2
net.ipv4.conf.default.force_igmp_version=2
# Increase the ARP cache table
net.ipv4.neigh.default.gc_thresh3=4096
net.ipv4.neigh.default.gc_thresh2=2048
net.ipv4.neigh.default.gc_thresh1=1024
# Increase number of multicast groups permitted
net.ipv4.igmp_max_memberships=1024
我不建议只是盲目地复制这些值,而是系统地测试是哪一个限制了您的资源:
- 使用
sysctl <property>
获取当前设置值
- 通过检查系统统计数据
验证属性当前是否运行达到极限
- 按照 Neelotpal 的描述更改配置
sysctl -w
或直接更改 /etc/sysctl.conf
并通过 sysctl -p
重新加载
在我的例子中,增加 net.ipv4.igmp_max_memberships
就成功了:
- 我用
sysctl net.ipv4.igmp_max_memberships
检查了当前值是20
- 我检查了
netstat -gn
有多少会员,意识到我的众多 docker 容器占用了大部分
- 最后我增加了 syctl.conf 中的值,它起作用了
当然,阅读这些属性以了解它们的实际作用也是很好的,例如 sysctl-explorer.net。
我正在使用 NanoPi M1(Allwinner H3 开发板)和 运行基于 Yocto 的 OS。第一次接触 ZeroConf-python,
>>> from zeroconf import Zeroconf, ServiceBrowser
>>> zero = Zeroconf()
我遇到错误:
File "/usr/lib/python3.5/site-packages/zeroconf.py", line 1523, in __init__
socket.inet_aton(_MDNS_ADDR) + socket.inet_aton(i))
OSError: [Errno 105] No buffer space available
当我在 Raspbian(在 RPI 上)运行 时,不会出现此错误。 我试图在 homeassistant 中搜索此类错误的修复程序,但 none 提供了对实际问题的良好概述,将解决方案放在一边。
将 sysctl
的 net/ipv4/igmp_max_memberships
值更新为大于零。
在终端执行以下命令:
$ systctl -w net.ipv4.igmp_max_memberships=20
(或任何其他大于零的值)
&
$ sysctl -w net.ipv4.igmp_max_msf=10
然后,重启 avahi-daemon
systemctl restart avahi-daemon
您可以使用以下方法验证上述键的现有值 'sysctl net.ipv4.igmp_max_memberships'.
Neelotpal 回答的补充:
这个 post 包含一个很好的解决方案建议,其中包含检查此问题的所有选项:
# Bigger buffers (to make 40Gb more practical). These are maximums, but the default is unaffected.
net.core.wmem_max=268435456
net.core.rmem_max=268435456
net.core.netdev_max_backlog=10000
# Avoids problems with multicast traffic arriving on non-default interfaces
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
# Force IGMP v2 (required by CBF switch)
net.ipv4.conf.all.force_igmp_version=2
net.ipv4.conf.default.force_igmp_version=2
# Increase the ARP cache table
net.ipv4.neigh.default.gc_thresh3=4096
net.ipv4.neigh.default.gc_thresh2=2048
net.ipv4.neigh.default.gc_thresh1=1024
# Increase number of multicast groups permitted
net.ipv4.igmp_max_memberships=1024
我不建议只是盲目地复制这些值,而是系统地测试是哪一个限制了您的资源:
- 使用
sysctl <property>
获取当前设置值 - 通过检查系统统计数据 验证属性当前是否运行达到极限
- 按照 Neelotpal 的描述更改配置
sysctl -w
或直接更改/etc/sysctl.conf
并通过sysctl -p
重新加载
在我的例子中,增加 net.ipv4.igmp_max_memberships
就成功了:
- 我用
sysctl net.ipv4.igmp_max_memberships
检查了当前值是20 - 我检查了
netstat -gn
有多少会员,意识到我的众多 docker 容器占用了大部分 - 最后我增加了 syctl.conf 中的值,它起作用了
当然,阅读这些属性以了解它们的实际作用也是很好的,例如 sysctl-explorer.net。