kariaの日記 @ Alice::Diary

ノリツッコミの鳩子がはてなブログ書いちゃうよ

IRCnetで出たり入ったりを繰り返す症状

よくわかってないけどよくわかってないなりにまとめる。間違ってたらおしえてちょ。

具体的な症状

IRC鯖にjoinする

数十秒〜数分後に「Max SendQ exceeded」で落ちる

クライアントの自動再接続が働いて再接続する

最初に戻る

というわけで数分おきに出たり入ったりを繰り返す症状がたまに見られる。

原因

IRC鯖にはSendQという制限値があって、このSendQが何なのかはよくわからないけど、メンバリストやユーザ情報取得しまくったりチャンネルリスト取得しまくろうとするとこのSendQの制限値を越えてしまうことがある*1。んで、

  • 巨大サーバーや人数の多いチャンネルにいると制限を超えやすい
  • 制限付き接続のユーザはSendQの上限(Max SendQ)が小さめに設定されているらしい

普段大丈夫なのに急にMax SendQ Exceededで落とされるようになった場合、制限付きユーザになっている(元々なっていた/急になった)可能性が高い。

制限付き接続のユーザとは??

ホスト名が.jpじゃないので外人扱いされてるユーザのこと。

海外から接続していたり、マンションのプロバイダとかで末尾が.comだったり、そもそもホスト名逆引きができてなくてIPで表示されてたりする場合に制限ユーザになる。制限値がキツいだけじゃなく、nick変更ができない、なるとをもらえないなどの制限もある。

対策

制限付き接続を解除する

media.kyoto-uのパスワード付きサーバを利用すると、制限付き接続を解除できる。

http://www.ircnet.jp/server-list.html

普段ホスト名なのになぜかIPになってしまう場合は、プロバイダの不具合などが考えられるので直るまで待つか、そんなプロバイダは投げ捨てて他のプロバイダにする。

SendQの制限が緩いサーバを使う

fujisawaは制限が緩いらしい。

http://www.ircnet.jp/news.html

クライアント側で余計な情報を取得しに行かないようにする

LimeChatのユーザ情報の設定を変えるとか、tiarraのcacheモジュールとか使う。未確認。

参考2(10/2追記)

#twitterできいたちょっといい話。

00:29:04 *myu_xeno0 quit (Max SendQ exceeded)
00:29:14 (ilya-out_) ><
00:29:15 *myu_xeno0 join #Twitter@w (-myu_xeno@xxxx.com)
00:29:24 (swirhen) (´ω`)
00:29:27 *myu_xeno0 quit (Max SendQ exceeded)
00:29:50 *myu_xeno0 join #Twitter@w (-myu_xeno@xxxx.com)
00:29:58 (karia) (´・ω・`)
00:29:56 *myu_xeno0 quit (Max SendQ exceeded)
00:30:08 (moriwaka)  (´ω`)
00:30:10 (swirhen) まっくすせんどきゅーえくしーでど
00:30:13 (swirhen) ってなんだっけ
00:30:47 (ilya-out_) まっくすのせんどきゅーをえくしーどしたって事じゃね?
00:30:53 (karia) http://d.hatena.ne.jp/karia/20080930/1222778976
00:30:53 (swirhen) なるほど
00:30:54 (twittan) IRCnetで出たり入ったりを繰り返す症状 - カーリアの日記@Alice::Diary... [text/html; charset=euc-jp]
00:30:59 (karia) 昨日かいたやつ
00:31:01 (moriwaka) 送るためのきゅーがあふれた
00:32:01 (moriwaka) ああ
00:32:16 (moriwaka) blogよんでわけがわかった
00:32:23 (swirhen) もりわかめ
00:32:29 (moriwaka) サーバからクライアントに送りつけるデータを
00:32:34 (swirhen) moriwaka(32)め
00:32:37 (moriwaka) どんどん生成して
00:32:46 (swirhen) find(1) め
00:32:46 (moriwaka) 待チ行列にためていくですよ
00:32:59 (karia) ふむ
00:33:00 (swirhen) この括弧内の数字ってなんなの?
00:33:24 (karia) サーバーがSendするためのキューなのでSendQということですか
00:33:30 (moriwaka) で、一方クライアントと通信する部分は随時おくりつけるんだけど
00:33:43 (moriwaka) そそ
00:34:10 (moriwaka) 通信速度のほうがデータの生成より遅いとどんどんSendQにたまっていって
00:34:14 (moriwaka) あふれる
00:34:21 (swirhen) あふれちゃうっ
00:34:30 (ilya-out_) あふれーてるー
00:34:38 (moriwaka) で、
00:34:38 (karia) んであふれる前に殺しちゃうと
00:34:48 (moriwaka) たくさんクライアントがいるので
00:35:02 (moriwaka) バッファのためのメモリもばかにならない
00:35:07 (swirhen) ならない
00:35:18 (swirhen) IRCのサーバーってどんなのつかってるんだろう
00:35:26 (moriwaka) だからあらかじめSendQに上限を設定しといて
00:35:55 (moriwaka) あんまりデータをげしげしやりとりするような奴は殺す
00:36:04 (karia) 猟奇殺人
00:36:19 *swirhen topic : 00:35 <moriwaka> あんまりデータをげしげしやりとりするような奴は殺す
00:36:25 (karia) トピックww
00:36:26 (swirhen) gkgk
00:36:31 (moriwaka) ふつうにチャットしてるだけならこんだけいかないだろう というmax値を適当に決めているはず
00:36:37 (karia) ふむー
00:36:50 (swirhen) ふまないー
00:37:01 (karia) 制限付き接続の場合SendQがキツめってどっかで見たんですが
00:37:07 (karia) どこで見たんだっけかなぁ
00:37:17 (moriwaka) それはDoS攻撃対策ですな
00:37:54 (karia) 海外からDoS攻撃する人がいるとか?
00:38:05 (moriwaka) いるよー
00:38:10 (swirhen) 俺俺
00:38:12 (swirhen) 俺とか
00:38:27 (karia) 茨城県民め
00:38:38 (moriwaka) IRCとかbotつくってどんどんコネクション貼って通信しまくれば
00:38:49 (moriwaka) あっというまにサーバをサチらせられるので
00:39:11 (moriwaka) サーバ側ではIPごとの接続本数きめたり
00:39:20 (moriwaka) 特定ドメインだと制限きびしくしたり
00:39:55 (moriwaka) 総接続数設定できたり
00:40:08 (moriwaka) まあ攻撃を受けまくってきたサーバとして順当な進化をとげています
00:40:58 (karia) いいお話でした
00:41:26 (swirhen) もりわかさん(32)のちょっといい話
00:41:35 (karia) ---ここまで読んだ---
00:41:37 (twittan) ---ここまで読んだ-: -1 (0++ 1--)

俺様用しおりがまさかのデクリメント。

*1:「Max SendQ Exceeded」とはこのことを言っている。