📌 置頂: 請把任何比你弱勢的用路人當作你的至親對待。跟前車保持安全車距 (2秒以上)。

Python socket OSError: [Errno 105] No buffer space available

In

, ,

Tags:



by

今天在處理 netlink 的時候,使用 Python 當作 user-space 承接來自 kernel-space 訊息的工具。我的情況是大約每 10ms 會由 kernel-space 發起一次 netlink multicast 到 user-space。當在運行 user-space script 的時候,過一陣子會出現這個錯誤:

一陣搜尋後, 其中一個方法是調整 sysctl 的參數,沒用。

修改 net.ipv4.xfrm4_gc_thresh=999999,沒用。

來自 netfilter 的說明:

來自 netfilter 說明:這代表 kernel-side 的 netlink socker buffer 沒有空間了。因此 user-space 的程式沒有辦法處理來自 kernel 的資料。

有三種解法,1) 把 buffer size 透過 /proc/sys/net/core, sysctl 加大,或是使用 SO_RCVBUF file descriptor。2) 加快處理端的處理速度。3) 如果不需要太大的 buffer,嘗試把 buffer size 調低。

因為我的 user-space application 是使用 Python 運行,所以猜測改用 pypy 處理的話應該可以加速處理的速度,解決 No space available 的問題。

結局:

使用 pypy3 後,解決問題。


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.