Transmissionの送受信バッファ不足エラー

Debianサーバーに入れてあるTransmission Daemonが突然全く送受信をしなくなった。PCに入れてあるBitTorrentクライアントでちゃんとダウンロードできることを確認したTorrentファイルを食わせてもPeerすら見つけられない。これは何かおかしいことが起きてそもそもDaemonが動いていないのだろうと思ったら、Daemon自体は起動している。しょうがないのでログをさらってみると謎のエラーが/var/log/daemon.log(と重複してsyslogにも)に記録されているのを発見。

UDP Failed to set receive buffer: requested 4194304, got 425984
UDP Failed to set send buffer: requested 1048576, got 425984

どうやらUDPの送受信でTransmissionが要求するバッファサイズに対してシステムが許可するバッファサイズが小さすぎるということで文句を言ってるようだ。なぜ突然このエラーが起きるようになったのかはよくわからないが、とにもかくにも最近何かのアップデートでUDP送受信バッファのサイズ制限がTransmissionの要求に合わなくなったことは間違いないようだ。確かに要求サイズに対してこれだけ可能サイズが小さければ拗ねてサボタージュされてもしょうがない。

で、これを解消するにはsysctl経由でkernelに送受信バッファサイズを大きくするように指示をしてあげればよい様なので、/etc/sysctl.dにTransmission用の設定ファイルを置くことにする。

/etc/sysctl.d/transmission.conf

net.core.rmem_max = 16777216
net.core.wmem_max = 4194304

これで再起動すれば自動的にこの設定がsysctlによって読み込まれてkernelの許可するバッファサイズが拡張されるはずだ。拡張されるバッファの数値はネットでこのエラーが出たときのおすすめサイズに合わせた。Transmissionが実際に要求しているサイズよりはでかいのでまあ問題はないだろう。

再起動後にはエラーは記録されていなかったが、あいかわらずPeerを見つけてくれない状態は続いている。稼働しない原因はほかにもあるようだ。引き続き調査を継続する。