【新機能】作り忘れたまとめはありませんか?31日前まで期間指定してまとめが作れる高度な検索ができました。有料APIだからツイートの漏れはありません!

Fluentd が終了しないことがある - その2

まとめました。01/31: 再発したので追記しました。
fluentd
4181view 0コメント
このまとめをお気に入りにして応援しよう!
1
ログインして広告を非表示にする
そのっつ (Naotoshi Seo) @sonots 2014-01-29 18:12:02
fluentd がちゃんと死なない問題いい加減ちゃんと調べようと思って、https://t.co/oClScvtrVy ここでブロックしていることがわかったのだが、さてさてどう直したものか #今ココ
そのっつ (Naotoshi Seo) @sonots 2014-01-29 18:16:11
# FIXME @thread.join blocks without this line で一体なにがあったのかがわからないから、どう直したらいいのか不明だ #fluentd
SKSの申し子 @repeatedly 2014-01-29 18:16:52
@sonots そこは @frsyuki に聴いてくだしあ.in / out_forwardのコアは初期からほとんど変わってないので,その辺のアドホックな問題は大抵frsyuki案件
Sadayuki Furuhashi @frsyuki 2014-01-30 06:40:19
@sonots それはイベント駆動IOライブラリではループを正しく止めるのが難しいという良くある問題で、そこではlistenしているソケットにconnectして中断させる方法をとっています。 @repeatedly
Sadayuki Furuhashi @frsyuki 2014-01-30 06:41:29
@sonots 良くある解決策は、a)pipeを事前に食わせておいて終了時に1バイト書き込んで中断させる方法 b)イベントループは1秒ごとに自動的に中断して終了フラグを読み出すようにしておく方法です。 @repeatedly
Sadayuki Furuhashi @frsyuki 2014-01-30 06:42:54
@sonots それぞれ一長一短があり、a)ではファイルディスクリプタ数が無駄に増える、b)では止まるまでに時間がかかる。特にFluentdの場合イベント駆動IOループを使うプラグインの数(actorのインスタンス数)が多くなるので問題が大きめです。 @repeatedly
Sadayuki Furuhashi @frsyuki 2014-01-30 06:46:11
@sonots しかしそこが問題だったとなると困りますね…Coolioを使っていると既存のAPI的にb)はできないので、a)でひとまず直せるでしょうか? @repeatedly
Sadayuki Furuhashi @frsyuki 2014-01-30 06:48:44
@sonots 根本的な解決策としては、1)Coolio::Loop#run_onceがtimeout引数を取れるようにしb)を実装する、2) timeout間隔を0.5秒ぐらいにしておく、というのでどうでしょう?>@repeatedly
Sadayuki Furuhashi @frsyuki 2014-01-30 06:50:08
@sonots Loop#runは、while true; run_once; break if stopped? に置き換える必要があります。蛇足ですがActorを入れたい理由の一つのは、その問題をプラグインがいちいち考えるべきでは無いからです。@repeatedly
そのっつ (Naotoshi Seo) @sonots 2014-01-31 15:59:54
fluentd が死なない問題また起こったけど、今度は out_yohoushi というか httpclient の TCPSocket.new の行で固まってる。まえは in_forward の TCPSocket.new https://t.co/G8Y1ex4SrE
Sadayuki Furuhashi @frsyuki 2014-01-31 16:00:01
@sonots なるほど。これですね:https://t.co/TAjoiBUAov sigdump便利ですね
そのっつ (Naotoshi Seo) @sonots 2014-01-31 16:02:18
とりあえず今は timeout(5) { TCPSocket.new .... } とかやっちゃえばいいのかな
Sadayuki Furuhashi @frsyuki 2014-01-31 16:03:34
@sonots それは微妙なんで、SocketUtil.create_tcp_socket(host, port, options={}) みたいなのを実装して、そこのチケットにある Errno::EINPROGRESS を使う方法を実装できないですかね?
Sadayuki Furuhashi @frsyuki 2014-01-31 16:04:21
@sonots SocketUtil自体が微妙という話があるので、ゆくゆくはActorを入れる感じで。
そのっつ (Naotoshi Seo) @sonots 2014-02-04 12:29:30
くっそ、timeout 実装した SocketUtil#create_tcp_socket でも結局固まった > https://t.co/UiSV5hm3aV
Sadayuki Furuhashi @frsyuki 2014-02-04 12:32:50
@sonots pack_sockaddr_inは名前解決ぽいですねぇ。タイムアウトつきの名前解決はこの辺りにあるかも:http://t.co/0KF8YyrY0M
komamitsu @komamitsu_tw 2014-02-04 12:43:26
@frsyuki @sonots in_forwardのheartbeatでも名前解決で固まってた事例ありませんでしたっけ(再現率極小)?straceの結果からするとUDPのreceiveで固まっていたような記憶がありますが、@repeatedly先生が詳しくしっているかも。
Sadayuki Furuhashi @frsyuki 2014-02-04 12:44:23
@komamitsu_tw @sonots @repeatedly UDPのreceiveでは名前解決しないようにオプションがセットしてあったような。これ:https://t.co/3qzxDPRx0W
残りを読む(8)
ツイートなら1万ツイートまでまとめられる。 イベントや実況を残しませんか?

ブックマークしたタグ

あなたの好きなタグをブックマークしておこう!話題のまとめを見逃さなくなります。
ログインして広告を非表示にする
ログインして広告を非表示にする