rtmp module max_message too big message: 1048576

nginx rtmp-moduleでtoo big message: 1048576 このエラー何だろう。

max_message

syntax: max_queue value
context: rtmp, server

Maximum size of input data message. All input data comes split into messages (and further in chunks). A partial message is kept in memory while waiting for it to complete. In theory incoming message can be very large which can be a problem for server stability. Default value 1M is enough for many cases.

全てのインプットされるデータはmessageに分割されてくる。(さらにchunkに分割される)。分割されたメッセージはそれが完了するまでメモリーに保持される。セオリー的には、messageがとても大きくなるとサーバの安定性の問題につながる。デフォルトは1Mで、だいたいどんなケースでも十分。

max_message 1M;

こんなエラーが出た。

2017/06/04 12:59:31 [info] 17659#0: *31736 too big message: 1048576, client: 192.168.200.73, server: 0.0.0.0:1935
※大きすぎるメッセージ1048576を受信した

映像配信がこのおかげで止まってしまった。

https://obsproject.com/forum/threads/two-streams-from-1-obs-any-ideas.19708/page-2

こちらを参考にして、

max_messageディレクティブを変更してみる

まずは、too big message: 1048576がどんな時にでるのかを確認するため、max_messageサイズをすごく小さくしてみる。

max_message 500;

するとエラーが出た。
2017/06/05 14:34:07 [info] 18688#0: *33 too big message: 500, client: 192.168.200.72, server: 0.0.0.0:1935

思った通り、500以上の大きさのmessageが届くとエラーを吐いて止まるようだ。

なので、

max_message 2500000;

として大きなmessageも受け取れるようにしてみた。特に問題なく、映像配信できているが、ただこのエラーがでるのは頻度がめちゃくちゃ小さい。どのくらいの頻度で起こる問題なのか分からない。

安定の問題につながるとマニュアルに書いてあるので、受け取れるmessageサイズを大きくすることでメモリ量などリソースを消費してしまうのではないか気になった。

top - 14:44:59 up 8 days, 21 min, 2 users, load average: 2.24, 1.37, 0.63
Tasks: 137 total, 2 running, 135 sleeping, 0 stopped, 0 zombie
%Cpu(s): 19.7 us, 0.5 sy, 10.9 ni, 68.4 id, 0.4 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 4016292 total, 2920708 used, 1095584 free, 237308 buffers
KiB Swap: 8301564 total, 66616 used, 8234948 free. 2190592 cached Mem

 

まだメモリには1GBの空きがあるため、特に問題にはならなそうだ。