暑い。土曜は雨降るのかと思ったらむしろ午後から晴れたのでふとんを干しといた。 日曜も暑かったが涼しい風が吹いてたのでつらくもなく、天気も悪いので眠くなって寝てしまった。もっと雨降ると寝易くてうれしい。
リファラスパムがうざかったのでリファラを表示しないようにしておきました。スパマー死ね。滅べ。絶滅しろ。
ドキュメントスキャナと裁断器が欲しい。本を電子化して捨てちゃいたいというのもあるんだが、TRPGをオンラインでやる時に電子化されてると表とかそういうのを見せるのに楽というのが主な理由。単に電子化して処分したいというだけだとめんどくなってやらなくなりそうだ。
ドキュメントスキャナはたぶんSnapScan iX500というのを買っておけばよさそうだ。けっこう高いが、Acrobatとかもついてるのでまあいいか。裁断器はセットで売ってる200DXというのがよさそうなんだがこれまた高い。スキャナと同じくらいする。一度にいっぱい裁断できて(めんどくささが減るのは大事だ)、収納も比較的しやすい(片付けておく場所は大事だ)ので確かによさそうだなぁ。軽く調べた感じだと高いけど長く使うならいいよねぇという感じなようなので、これでいいんだろう。高いといっても買えない程じゃないしな……。
あとはいつ買うかだな。作業場所を作るにも部屋を片付けたいところだが……。
以前からたまにすごくCPU食う時があるというのを言われてたんだが、俺のところでは再現できないし、起きるのもたまにという話なのでわからないままになっていた。
最近また言われるようになったので調べてみたんだけど、さっぱりわからん。CPUをとても食うということなので待たずに無限ループしてるようなところがあるはずなんだけど、何度も見ただけあってさすがにそんな場所見当たらないなぁ。
ありがたいことに発生した時のスクリーンショットを見せてもらったりログを取ってもらえたので調べてみるが、ログを見る限りではそんなにおかしなことになってる気配はない。スクリーンショットを見てるとずっと接続先の検索中になっていて3つ程視聴接続が残ってるようだ。それ自体もそんなに変じゃないな。ずっとSEARCHになってるのがおかしいけど。
ログを見た感じでは視聴の再接続が頻繁に来てるようなので、再接続に対して溜まってるパケットを送信するというのを頻繁に繰り返すとCPU使用率が上がりまくるのかな?ただ普通に通信してる分にはI/O待ちが入るからそんなにCPU食うはずはないんだけど、試しにやってみるか。
1クライアントで切れたチャンネルに接続に行ってる限りでは特に問題ないな。一瞬で終わるしCPU使用率もそれほど上がらない。念のため10クライアントくらい同時接続してみるか。って10クライアントで同時に視聴リクエストしたら再現した!やった!!
手元で再現さえできればもう直ったようなものだ。ゆっくり状況を見てみると、確かに変な状況だな。既にクライアントは終了しているにもかかわらず3つくらい視聴接続スレッドが生き残ってやがる。こいつらどこに接続してるんだよ。
デバッガで見てみると、接続が生きている体で動いていた。送信する物は既にないので送信処理は行なわれていないが、受信処理では受信した瞬間に0バイトを正常に受信して(そしてなぜか接続は切れていないものと判断されていて)、0バイト受信した場合は無視するので普通に動いて無限ループしていたようだ。通常なら受信待ちでCPUを離すのでCPU使用率がそんなに高くなることはないんだが、即座に0バイト受信してしまうため受信待ち無しに動いてたようだ。どうしよっかこれ……。
普通のsocketだったら0バイト受信した時は切れてる時だろJKと言いたいところなんだけど、0バイト受信時に切ったらなんか問題あったから切れないようにしといた気がするんだよな。しかし他に判断方法が思いつかん。とりあえず0バイトを受信した場合は切れた物として扱うように変更して様子を見ることにした。ちょっと動かしてる感じでは問題ないのでこれでいいのかもしれない。0バイト受信で切ったら問題出たのは気のせいかテスト時だけだったのかも?
CPUを食いまくる問題はたぶんこれで解決するんじゃないかと思う。ただこれと他にもう一つ、チャンネル接続ができないはずなのにチャンネルがずっとSEARCHになる問題がある。本来なら接続できないチャンネルはERRORになって視聴接続も終了するので、上記のCPU食う問題があってもそんなに継続しないはずなんだが。
ずっとSEARCHになってる状態で上流への接続スレッドが何やってるのか調べてみると……あれ、ない?接続スレッド自体がありませんなぁ。どこいった。
これ以上はまだちゃんと調べてないんだけど、おそらく上流への接続が終了すると同時に視聴リクエストが来て再接続がかかってしまうというスレッド競合バグなんじゃないかなぁと予想した。これ自体はそんなに大きな問題にはならなそうな気がするのでおいといて、CPU食いまくる方が大丈夫そうなら一回リリースした方がいいかもな。