X



bbs.cgi再開発プロジェクト5

■ このスレッドは過去ログ倉庫に格納されています
04/12/20 07:38:07ID:KYFJjC4V
peko鯖の稼動によりボトルネックの一つである事がより明らかになった
bbs.cgi作り直しプロジェクトです。

【開発環境の工事現場】
また挑戦。@2ch掲示板  http://dso.2ch.net/myanmar/
また挑戦2。@2ch掲示板 http://dso.2ch.net/yangon/

関連スレなどは >>2-5 くらい
235FOX ★
垢版 |
04/12/26 03:24:48ID:???
そでーす
236FOX ★
垢版 |
04/12/26 03:25:08ID:???
$FOX->{BBS} の初期値は 1 で
237FOX ★
垢版 |
04/12/26 03:32:46ID:???
http://stats.2ch.net/tubame.cgi

よさげなので全部にいれよう
238root▲ ★
垢版 |
04/12/26 03:37:22ID:???
BBQへの問い合わせが激減しているような、、、。
原因はBBSと同じ?

http://mumumu.mu/mrtg/mrtg-rrd.cgi/bbqbbx/
239root▲ ★
垢版 |
04/12/26 03:38:28ID:???
例の「不存在」と「タイムアウト」問題っすね。
不存在はBBQ的には「登録なし」ってやつなんで。
240FOX ★
垢版 |
04/12/26 03:38:47ID:???
ぬおっ

BBQ は何返すんですか?
241root▲ ★
垢版 |
04/12/26 03:38:58ID:???
たぶん、BBMも同じかと。
242root▲ ★
垢版 |
04/12/26 03:40:07ID:???
127.0.0.2 登録あり(焼かれてる)
NXDOMAIN 登録なし(焼かれてない)
タイムアウト

の3つですね。BBM/BBXも同じ。
243FOX ★
垢版 |
04/12/26 03:41:46ID:???
改修


sub foxDNSquery2
{
my ($host) = @_;
#$host .= "bbs.timeout.peko.2ch.net.";
use Net::DNS;
my $res = Net::DNS::Resolver->new;
$res->tcp_timeout(1);
$res->udp_timeout(1);
$res->retry(1);
my $query = $res->query($host);

if($query)
{
my @ans = $query->answer;
foreach(@ans)
{
return $_->address;
}
}
if($res->errorstring eq 'query timed out') {return "127.0.0.0";}

return "127.0.0.1";
}
244FOX ★
垢版 |
04/12/26 03:42:47ID:???
if($SPAM eq "127.0.0.0"){$FOX->{BBQ} = 0;}

こんなコード呼び出し側に入っています
245root▲ ★
垢版 |
04/12/26 03:47:15ID:???
>>243
これは、

アドレスがあればそのアドレスを返す
アドレスがなくてタイムアウトなら127.0.0.0を返す
そうでなかったら127.0.0.1を返す

という動き?
246FOX ★
垢版 |
04/12/26 03:48:32ID:???
そーですー

呼び出し側では
127.0.0.2
127.0.0.0
だけしか見ていません
247root▲ ★
垢版 |
04/12/26 03:51:25ID:???
>>246
127.0.0.2 => BB{Q,X,M} 登録済み
127.0.0.0 => 各DNSに異常発生

というかんじですか。

で、BB{Q,X,M}はそれぞれ別のDNSサーバなので、bbs.cgi側では、
例えばBBQの異常を検知したら、BBQ*だけ*10分停止、
というのがよさげです。
248FOX ★
垢版 |
04/12/26 03:52:46ID:???
そのようになっています。

$FOX->{BBM} = 1;
$FOX->{BBQ} = 1;
$FOX->{BBX} = 1;
$FOX->{BBY} = 1;
$FOX->{BBS} = 1;
249root▲ ★
垢版 |
04/12/26 03:55:10ID:???
了解です。

最悪はdnscacheがあぼーんすることですが、
そのときは、、、gethostbyaddr() が詰まっちゃうのか。
250FOX ★
垢版 |
04/12/26 03:55:53ID:???
>>249
そこはもっと練ってからの実装かと、
251root▲ ★
垢版 |
04/12/26 03:56:41ID:???
>>250
そっすね。

でもこれで、そうとうよくなった予感がするですよ。
252FOX ★
垢版 |
04/12/26 03:56:53ID:???
というか、そこは実装しないで
dnscacheをことん強化が本筋かと、
253FOX ★
垢版 |
04/12/26 03:58:54ID:???
       ∩
  ( ゚∀゚)彡 じっけん!じっけん!
    ⊂彡
254root▲ ★
垢版 |
04/12/26 03:59:12ID:???
>>252
そですね。例の計画(RAID1で強化+Anycast装備)いきます。
そういえばRAID1カードのインストール、どうなってるのかしら。
255root▲ ★
垢版 |
04/12/26 03:59:53ID:???
>>253

BBxを止める実験ができるようになった、ということでOK?
256FOX ★
垢版 |
04/12/26 04:01:26ID:???
dnscache が timeout だったら書けないという仕様にするです bbs.cgi
qb5&★ だけ書ける様にして
257FOX ★
垢版 |
04/12/26 04:01:48ID:???
>>255
ok ok

自信まんまん
258root▲ ★
垢版 |
04/12/26 04:05:18ID:???
BBQを止める実験、やってみますか。
で、うまくいくなら、続いてBBSを止める実験。

BBYはスレ立てしないといけないので、みゃんまーで。

BBMは携帯で書かないとだめだから、FOXさんに携帯で書いてもらおう。
(私H"とPALDIOしか持ってないです)

BBXは例によって、禁止フレーズをみゃんまーで。

では、順番にいきます。
259root▲ ★
垢版 |
04/12/26 04:07:26ID:???
BBQ止めました。
260root▲ ★
垢版 |
04/12/26 04:07:48ID:???
お、いいかんじ。
261root▲ ★
垢版 |
04/12/26 04:08:51ID:???
BBQ動かして、BBS止めました。
262root▲ ★
垢版 |
04/12/26 04:09:47ID:???
いいかんじ。
これからBBS動かして、BBY止めます。
263root▲ ★
垢版 |
04/12/26 04:11:21ID:???
BBY止めました。みゃんまーに行ってきます。
264FOX ★
垢版 |
04/12/26 04:11:39ID:???
http://ex7.2ch.net/morningcoffee/

各板のindex.html をみると状態がわかるようにした
265root▲ ★
垢版 |
04/12/26 04:13:47ID:???
できました。

BBYを止めてもスレ立てできるのかテスト
http://dso.2ch.net/test/read.cgi/myanmar/1104001957/

これからBBY動かして、BBXとめます。
266root▲ ★
垢版 |
04/12/26 04:19:23ID:???
BBX止めました。
禁止フレーズは、、、。
267root▲ ★
垢版 |
04/12/26 04:28:40ID:???
いいNGワード、何かありますかね。
268root▲ ★
垢版 |
04/12/26 04:30:21ID:???
>>264 みると、BBXが止まっています、って出るから、正常かな。
269root▲ ★
垢版 |
04/12/26 04:30:52ID:???
でもまだBBM止めてないのに、BBMが止まってるってたまに出るなぁ。
270root▲ ★
垢版 |
04/12/26 04:33:59ID:???
BBX確認できました。元に戻します。
271FOX ★
垢版 |
04/12/26 04:34:52ID:???
ほんとに timeout 検出しているとか、、、
272root▲ ★
垢版 |
04/12/26 04:35:45ID:???
うへー。例のバッファフルがいっぱい。
BBSと同じ対策打ってきます。< BBM

%netstat -s -p udp
udp:
15773031 datagrams received
0 with incomplete header
0 with bad data length field
0 with bad checksum
1 with no checksum
50 dropped due to no socket
2 broadcast/multicast datagrams dropped due to no socket
126085 dropped due to full socket buffers
0 not for hashed pcb
15646894 delivered
15647283 datagrams output
273root▲ ★
垢版 |
04/12/26 04:38:43ID:???
対策打ちました(対策後は今日のラッシュ時もBBSのバッファフルなし)。

あとはBBMか。これからとめます。とめたらおしらせします。
274root▲ ★
垢版 |
04/12/26 04:39:41ID:???
BBMとめました。
携帯からどなたかカキコしていただけると。
275FOX ★
垢版 |
04/12/26 04:44:10ID:???
よさげ
276root▲ ★
垢版 |
04/12/26 04:45:58ID:???
dnscacheのログみた。BBMにはqueryはそれなりに出てるみたい。
ブロックしてないかの確認ができれば、OKですが、、、。
277root▲ ★
垢版 |
04/12/26 04:46:16ID:???
>>275
OKです。

では、もとにもどします。
278root▲ ★
垢版 |
04/12/26 04:48:46ID:???
morningcoffeeの板トップ見てると、たまに止まってないのに「止まっています」って出ることがあるですね。
1秒だと、短すぎ?
それともたまにリトライしてる?

でもブロックはしたくないから、もろはの刃なのかな。
279root▲ ★
垢版 |
04/12/26 04:49:11ID:???
で、BBM元に戻しました。
全部元に戻ったはず。
280FOX ★
垢版 |
04/12/26 04:50:06ID:???
>>276
新規に立ち上がったbbs.cgiは一回は聞きにいくですから

>>278
どうでしょうねぇ
281FOX ★
垢版 |
04/12/26 04:51:55ID:???
>>279
時間での切腹機能入れていないから
何時までもだらだら残るのかも(特に暇なサーバは)
282root▲ ★
垢版 |
04/12/26 04:54:20ID:???
ex7のspeedy_backendをいったん全部killした。
そしたら、BBMが止まっています、は消えたです。
283root▲ ★
垢版 |
04/12/26 04:55:33ID:???
これで、BB?系のDNS側の実験は終了しました。
また一歩、進歩したですね。すばらしいっす。
284FOX ★
垢版 |
04/12/26 04:56:03ID:???
#!/usr/local/bin/speedy -- -M32 -b1048576

に -t600 っていれたら 10分?
#!/usr/local/bin/speedy -- -M32 -b1048576 -t600
285root▲ ★
垢版 |
04/12/26 04:57:37ID:???
>>284
10分*全く何も受け取らない*と、自爆しますね。
一番あれなのは、ぽろ、ぽろ、って来る場合かと。
286FOX ★
垢版 |
04/12/26 05:00:06ID:???
また今度実験してミルです < -t option の効果&弊害
287root▲ ★
垢版 |
04/12/26 05:00:07ID:???
デフォルトでは500回リクエストを受け取ると、自爆します。
(-r500)

-tは3600がデフォルトですね。

つまり、
・500回人を乗せた
・1時間誰も乗らなかった

場合に、自爆すると。
288root▲ ★
垢版 |
04/12/26 05:09:37ID:???
もう知っているかもですが、Perl内から自爆命令を出すこともできます。

・shutdown_now
perlインタープリタを即座にシャットダウンします。この関数は戻ってきません。

$sp->shutdown_now

・shutdown_next_time
perlインタープリタを、このリクエストが終了したらすぐにシャットダウンします。

$sp->shutdown_next_time
289FOX ★
垢版 |
04/12/26 06:03:14ID:???
10分で組み込んであります
04/12/26 18:30:34ID:IiSJlBt9
ふと思ったんですが、
今はsubback.htmlを毎回bbs.cgiで作成してるんですよね?

subback.htmlへのリクエストは、subject.txtの更新頻度よりずっと少ないと思うので
もしかしたら、subback.cgiを作成してmod_rewriteを使うとか
あるいはmod_subbackを作成して組み込むとかの方が
鯖に優しいのではないでしょうか。
呼ばれる度にsubject.txtとSETTING.TXT(こちらは後者ならキャッシュも可能)を
読み込む必要がありますが、bbs.cgiでのディスク書き込みを少しは減らせるので。

後者の方法もそんなに難しくないと思いますが、前者なら非常に簡単だと思いますし。
291FOX ★
垢版 |
04/12/27 00:17:23ID:???
特に問題なく動いているようで、、
04/12/27 00:43:54ID:m1ISpYgb
うーむ。

伝説の機能の!preはPC系だけでいいから実装してほしいなあ。
293root▲ ★
垢版 |
04/12/27 00:54:25ID:???
今日のlive8/live16ともえらい軽かった(伸びが良かった)です。
今までは2ブレーメンぐらいでかなりつらそうだったけど、
今は3ブレーメンぐらいでもかなり平気みたい。
04/12/27 01:38:05ID:2pIbrlBO
>>292
転送量対策でread.cgiが余分なスペースを全部削ってしまうからなぁ……。
295FOX ★
垢版 |
04/12/27 01:47:47ID:???
>>294
そうなの?
04/12/27 02:11:32ID:2pIbrlBO
>>295
http://piza2.2ch.net/test/read.cgi/tech/998736516/924

ここらへんでそんなコードが入ってましたよ。
297FOX ★
垢版 |
04/12/27 02:15:48ID:???
dat に書くときに?
04/12/27 02:19:36ID:2pIbrlBO
>>297
いえ、read.cgiがdatを読み出すときに。
datには書きこんだとおりのままスペースが保存されてます。
299FOX ★
垢版 |
04/12/27 02:30:52ID:???
なるほど、、、

今回 read.cgi 書き直すから、その処理はなくなる予定だったりするです
04/12/27 04:20:05ID:Qt6b/Myk
書き直すついでに書きこみ欄をrows=20 cols=80ぐらいに
広げてくれないかなー、、とつぶやいてみる。
たまにIE使ったりすると狭くて、、
04/12/27 08:58:22ID:2kf2cUdF
read.cgi再開発スレ
http://qb5.2ch.net/test/read.cgi/operate/1087199303/
302root▲ ★
垢版 |
04/12/28 01:19:26ID:???
BB? については、連続して3回失敗した時とかにはじめて、
「止まっている」とみなすようにしたほうが、いいのかもしんないですね。
04/12/28 01:35:01ID:l7c8T7V0
スレッドランキングさんのところと比較してると、
BBSが平均的に5〜10%くらいカウントミスってる感じですね、、

初期化時に $FOX->{BBS} = 3; くらいにして、
異常を検知した時は --$$FOX->{BBS} くらいにする、とかって考えたけど、
(これだと連続ではない3回検知で、になるかな、)
04/12/28 01:51:13ID:eAlXGXc9
1bit左にシフトして+1するとか。@== 7 で3回目検知、スルーできたら1bit目をクリアするとか
305FOX ★
垢版 |
04/12/28 14:04:35ID:???
根本的なとこを解決しなくてどうするのかと、
306root▲ ★
垢版 |
04/12/28 17:47:40ID:???
>>305
ふむ。

根本的なところ = 失敗をなくす方向

だとすると、どうするのがいいのか。

やはり、しくみの変更なのか。
でもDNSでやるしくみ+ノンブロッキングでquery、ってのは、
コスト低いし、筋がいい気がするんですけどね。
04/12/28 18:50:33ID:MO8MKKE9
無反応の場合はネガティヴキャッシュで解決しないの?

308root▲ ★
垢版 |
04/12/28 19:23:23ID:???
>>307
それがですね、、、BBSの場合、毎回queryするものが違うんですよ。
つまり、キャッシュは効かない、というか、効かせていないのです。
キャッシュが効いちゃったら、正しいカウントができないんで。

というか、そうか、、、。Net::DNSって、聞きに行くDNSサーバを指定できたような。
だったら、工数のかかる再帰検索かけなくても、ダイレクトにBBSのサーバ指定できるかも。

ちょっと、考えてみます。
DNSキャッシュサーバ側のコストを、下げられるかもしんない。
309FOX ★
垢版 |
04/12/28 21:14:37ID:???
質問 質問

1) BBS の現在の問題点は、コール数が多いために数えられないことがある。
2) そもそもコール数が少なくても数え落しが発生するしくみである。

どっちなんでしょか?
310root▲ ★
垢版 |
04/12/29 01:55:52ID:???
>>309
まさにそれを究明しようってのが、>>308 で浮かんだ試みです。

DNSはご存知のように再帰検索(DNSキャッシュサーバがツリーをたどる)をします。
これは場合により、コストがかかる場合があります。

もちろん、DNSはキャッシュがうまく効くので、かなりの場合はキャッシュサーバに
データが蓄えられ、全部のツリーを再帰検索はしなくてもすむ場合がほとんどです。

でも、BBSやBBYの場合は必ず「ないよ」という応答になるので、
キャッシュサーバ側で、それなりに処理の時間がかかるわけです。
つまり、コストが割と高い。

でもBBSとかの場合は「きめうち」で決まったホストに伝わりさえすればいいので、
いわゆる通常の再帰検索は、しなくていいはずなのです。

具体的には、a.ns.bbs.2ch.net にダイレクトにDNSクエリを出せさえすればよい。
再帰検索要求も、必要ないわけです。

で、Net::DNSでは、これができるはずだと。

少し手がすいたら「こういうふうに組んでいただけますか」というのを
ここに書きますので、それを組み込んで実験をしてみたいなと。
311FOX ★
垢版 |
04/12/29 12:36:59ID:???
なーるほど、

ねたー、ねまくったー
04/12/29 14:04:31ID:A1+OBBP1
ふーん

FOXも寝ることあるんだ
313FOX ★
垢版 |
04/12/29 15:25:39ID:???
http://www.net-dns.org/docs/Net/DNS/Resolver.html

nameservers
@nameservers = $res->nameservers;
$res->nameservers('192.168.1.1', '192.168.2.2', '192.168.3.3');


Gets or sets the nameservers to be queried.

これを指定すればいいのか?
314FOX ★
垢版 |
04/12/29 15:28:31ID:???
recurse
print 'recursion flag: ', $res->recurse, "\n";
$res->recurse(0);


Get or set the recursion flag. If this is true, nameservers will be requested to perform a recursive query. The default is true.

これも関係ある?
315root▲ ★
垢版 |
04/12/29 15:58:37ID:???
>>313-314
まさにそれっすね。

再帰止めて(>>314)、BB?の用途に応じてそのサーバに直接query出すと。
316root▲ ★
垢版 |
04/12/29 16:03:54ID:???
こんなかんじでいいみたい。

#! /usr/bin/perl

use Net::DNS;

my $res = Net::DNS::Resolver->new;

# specify bbs.2ch.net server
$res->nameservers('206.223.147.35');

# turn off recurse query
$res->recurse(0);

my $ans = $res->send('a.b.c.bbs.2ch.net');
317root▲ ★
垢版 |
04/12/29 16:10:41ID:???
これで、DNSキャッシュサーバを経由せずに、
直接データを持っているDNSコンテンツサーバにDNS問い合わせをするようになります。

BBSとBBYは戻りの結果を利用しないし、
ローカル側でデータのキャッシュが効く必要がまったくない(というか邪魔)ので、
この形にするのがよいですね。

その分レスポンスがよくなるし、DNSキャッシュサーバの負荷も減少します。

BBQ/BBX/BBMは通常通りにキャッシュが効いたほうがいいので、
これまで通りのパターンの方がよさげです。
318root▲ ★
垢版 |
04/12/29 16:15:08ID:???
ホスト名書いても許されるみたい。

BBS
$res->nameservers('a.ns.bbs.2ch.net');

BBY
$res->nameservers('a.ns.bby.2ch.net');

で、いけそう。
319root▲ ★
垢版 |
04/12/29 16:16:57ID:???
IPアドレスで指定するなら、これかな。

BBS
206.223.147.35

BBY
206.223.147.36
320root▲ ★
垢版 |
04/12/29 19:39:31ID:???
しばしば暴走しているのは、どうもsubbbs.cgiの模様。
04/12/29 21:28:51ID:DLx+j9cw
subbbs.cgiってもう使われてないですよね?
322FOX ★
垢版 |
04/12/29 22:25:08ID:???
subbbs.cgi って良く知らないんです。
詳しい人いないかな?
04/12/29 22:36:09ID:GPE5aLXX
昔は投稿確認に使われていた。
今は全てbbs.cgiでやっている。

ってんじゃなかったか。
04/12/29 22:42:55ID:JJHQio8E
subbbs.cgiを書き替えて見るとか

「subbbs.cgiは使用できなくなりました。」

とか
325FOX ★
垢版 |
04/12/29 22:45:20ID:???
いいんだろか?

暴走するって、たとえばどうなる出素か? >>320
326FOX ★
垢版 |
04/12/29 22:45:55ID:???
BBY/BBS 用のらっぱ

sub foxDNSquery
{
my ($host,$nameserver) = @_;
#$host .= "bbs.timeout.peko.2ch.net.";
use Net::DNS;
my $res = Net::DNS::Resolver->new;
$res->tcp_timeout(1);
$res->udp_timeout(1);
$res->retry(1);
$res->recurse(0);# turn off recurse query
$res->nameservers($nameserver);

my $query = $res->query($host);

if($res->errorstring eq 'query timed out') {return 0;}

return 1;
}
327FOX ★
垢版 |
04/12/29 22:47:18ID:???
>>326 版をex7に入れてみた。
328FOX ★
垢版 |
04/12/29 22:52:48ID:???
特に問題ないようなので
全サーバに配布。
329FOX ★
垢版 |
04/12/29 22:57:45ID:???
http://stats.2ch.net/suzume.cgi を見る限りカウントはされているようだ < BBS
果たして数え落しがなくなるか、 果てしなく0に近づくか、、、
04/12/29 23:02:06ID:GPE5aLXX
いや、
SUBBBS_CGI_ON=1 だと、スレ立て時に確認画面(bbs.cgi)が出て、
ボタン押すともう一回確認画面(subbbs.cgi)が出て、
ボタン押すともう一回確認画面(bbs.cgi)が出て、
ボタン押すとスレ立てできる。
331FOX ★
垢版 |
04/12/29 23:03:12ID:???
>>330
そうなる必要性ってもうないですよね?
04/12/29 23:06:25ID:GPE5aLXX
確認はするとしても一回で良いだろうし、bbs.cgiで足りてるね。
333FOX ★
垢版 |
04/12/29 23:11:51ID:???
subbbs.cgi へ飛ばないようにしてみた
04/12/29 23:15:02ID:GPE5aLXX
お、SUBBBS_CGI_ONを完全無視な感じ?
335FOX ★
垢版 |
04/12/29 23:17:00ID:???
そんな感じ、、

どうなることやら
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況