X



トップページ運用情報
1001コメント347KB

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

■ このスレッドは過去ログ倉庫に格納されています
00012chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆yBEncckFOU
垢版 |
04/02/13 19:08ID:o3jHs/Mb
peko鯖の稼動によりボトルネックの一つである事がより明らかになった
bbs.cgi作り直しプロジェクトです。

関連スレ
【Project peko】2ch特化型サーバ構築作戦 Part6
http://qb3.2ch.net/test/read.cgi/operate/1076413123/
◆ 全サーバトリップ統一作戦
http://qb3.2ch.net/test/read.cgi/operate/1067245837/
bby -- スレッド情報一元管理システム構築スレ
http://qb3.2ch.net/test/read.cgi/operate/1073058944/
BBQ システム(公開串リストメンテ)
http://qb3.2ch.net/test/read.cgi/operate/1073061576/
【連投規制】Samba24 情報要望スレ その3
http://qb3.2ch.net/test/read.cgi/operate/1075568934/
【広告】Rock54【自動排除】 3
http://qb3.2ch.net/test/read.cgi/operate/1074735308/
■ 新しいサーバで read.cgi が正しく動かない問題。 (dat落ち)
http://qb.2ch.net/test/read.cgi/operate/1047840578/


前スレ
bbs.cgi 再開発プロジェクト
http://qb3.2ch.net/test/read.cgi/operate/1053067870/
bbs.cgi再開発プロジェクト2
http://qb3.2ch.net/test/read.cgi/operate/1069144193/
0072動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/17 04:58ID:k6b32fPR
yahoo串なんですけどね
すぐ規制されちゃいますよね、で規制される前に使おうと思ったら「スレッド立てすぎです」
先にこの串で立てられたっぽくないんですけどね
0075仕事人 ★
垢版 |
04/02/18 17:18ID:???
後は。。。

携帯&●のスレ立て規制の兼ね合いですなぁ
規制の種を携帯固有番号or●固有文字列にすればいいんだが

また解読の日々か・・・
0080動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/19 12:09ID:6uR1qJHV
っていうか、●の規制抜けの穴埋めは一番最後でいいじゃん・・・
何なら埋めなくても、●で荒らせば●剥奪なんだし。
0081
垢版 |
04/02/19 23:53ID:I8XCxW0P
過去ログが読めるだけなら、●の更新しませんわ……。

保証されてないとは言え、現状でスレッドが立てられるから、
●購入した一人です。
0084鳥取恥丘 ◆Dream/3P/.
垢版 |
04/02/24 15:07ID:PtfxF+tK
●買った瞬間に2chつぶれたりしませんよね?

それが怖くて買えない17の夏
0086 ◆LBZUBURIYM
垢版 |
04/02/24 22:42ID:lM393Id+
1000ストッパー素突破対策はこのスレと見たがどうか。
0092動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 00:00ID:ckGpaSOf
qmail-localのパクリアイデアの続き。

/queue以下
/スレ番号
/スレ番号/cur
/スレ番号/new
/スレ番号/tmp

・投稿用bbs.cgiはtmpにひたすら書く。tai64time.pid.とか重複しないようなファイル名で
 書き込みに失敗したらcurをみて1000から始まるファイルがないかどうかチェック。なかったらウェイトしてはじめに戻る。
・tmpに書き込めたらnewにハードリンクしてtmpをunlinkする(投稿成功)
・dat追記デーモンはnewからひたすらcurに追記する。その際に0000から1000までの番号をファイル名の頭に追加する
 curに追加したファイル名でハードリンクして成功したらcurをunlinkする。
 999を追記した段階でtmpをreadonlyにchmodする。1000を書く
・dat書き出しデーモンがcur以下をcatして*.datとして出力。
・あぼーんするときはcur以下の数字を消してdat書き出しデーモンを呼び出す。

※もし出来るならqueueをファイルシステムじゃなくてMySQlとかにするほうが性能がいいかもしれない
0093動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 00:04ID:ckGpaSOf
curをcatする方法だと、スレ番号/l50とかスレ番号/1-100とかも別途書き出すのが楽。
まぁ*.datを直接読んでくれる専用ブラウザには関係ない話だけど。
IE対策にはなりそげ。
0094動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 00:07ID:fQT1CoFa
読み出す側で1001以上出力しないようにして、
レス数1000超えてたら自動的に1001のレスを付加してやったらええんでないの?
見た目1001超えなければ、書き込みも減る=妙な鯖負荷も減るだろうし。
で、状況見て書き込み側を改良していけばいいような。
0097/ノ、゚ ヮ゚ノ、,ヽ ◆HEHARUKAoo
垢版 |
04/02/25 00:43ID:jxRad/Uw
「絶対に上がらないスレ」ってできませんかね?
bbs.cgiで>>1のメール欄を見て「sagesage」だったら
書き込みのメール欄の先頭に「sage」を追加する、とか。
重くなるだけで利用価値ないかな。
0098▲ 某ソレ511
垢版 |
04/02/25 00:43ID:saa3Iepe
それに何の意味があるのか分からない。
0100▲ 某ソレ511
垢版 |
04/02/25 00:49ID:saa3Iepe
ていうか、そんなことを2ちゃんねるでやる必要性が感じられないな。
sageだかageだか知らないけど、2ちゃんねるはスレッドフロート式なんだから、
0102▲ 某ソレ511
垢版 |
04/02/25 00:58ID:saa3Iepe
sage進行信仰に対する一つの答えを出すことに意味があるのですか?
0103/ノ、゚ ヮ゚ノ、,ヽ ◆HEHARUKAoo
垢版 |
04/02/25 01:00ID:jxRad/Uw
さあ?意味なんて考えてもみませんでした。
やったら、できたら、そうなったら面白さの幅が広がるかな、と思っただけですよ。
0104▲ 某ソレ511
垢版 |
04/02/25 01:03ID:saa3Iepe
それがおもしろそうな機能には見えなかったんでね。
わざわざcgiを改造してまで追加する価値があるような
おもしろい機能とは思えないですよ。ageらないスレなんて。
0106▲ 某ソレ511
垢版 |
04/02/25 01:08ID:saa3Iepe
ただ、おもしろいかどうかは個人の主観なので、
おれは全然おもしろくない機能だと思うのですが、
ひろゆきがおもしろいと思えばありだとは思うんですけどね。
あと、sageっぱなしだと他の人が入ってこないのでどうしても馴れ合いが
進んでしまう、と考えられる点もマイナスポイントかも。
0107/ノ、゚ ヮ゚ノ、,ヽ ◆HEHARUKAoo
垢版 |
04/02/25 01:15ID:jxRad/Uw
ああ、馴れ合いの問題はありますね。

適用してみたいと思ったのは次のようなスレです。
・+系板の雑談スレ
・AA系の板のスレ
・自己紹介板のスレ
・bbspinkの一部スレ
・ネタスレ

ひ(ryは面白がらないっぽいなあ。
なんかそんな気がしてきますた。
0109動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 01:46ID:snkhENhU
1.スレッド立てる人はスレが荒れてほしくないと思い強制sage進行スレに指定
2.70%のスレが強制sage進行スレとなる
3.スレはだいたい立てた順番にならぶ
4.sageの価値そのものが低くなる

こうなっちゃうんじゃない?
0110動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 02:53ID:q+SvPxKC
むかしむかし、スレタイに「(10000)」と入れると上げられないスレにできたけど
「バグ」として修正されたことを考えると望み薄では
0112動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 21:53ID:6mZyPruH
一応こちらで。

2chの動作報告はここで。 パート10
http://qb3.2ch.net/test/read.cgi/operate/1076174286/528
528 :FOX ★:04/02/25 21:44 ID:???
問題は処理の順番というか・・・
1) bbs.cgi の中盤で dat に追記
2) bbs.cgi の後半で subject.txt を書き換え
3) この時 dat 内のレス数カウント
4) ついでに 1,000 超え判定 → 1,001 書き込んでパーミッション変更
5) しかし既にこのときには次のbbs.cgiが目前までせまっているらしい。

1)の前に3)4)を入れられないのかと。
それだけでover 1000の書き込みははねられ、
それだけDisk I/Oの負荷が減ると思われ。

何でこんな処理になっていたんでしょ。
理由が知りたい。
0114動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:06ID:6mZyPruH
>>112
529 :FOX ★:04/02/25 21:47 ID:???
dat のopen , close で行くと、

1) 512 超え判定、超えていたらDispError();
2) 追記のために open -> write -> close
3) subject.txt 書き換えのために res数取得 open -> read -> close
4) 超えていたら 1,001 書き込み open -> write -> close ->chmod

これなら、
open(+<);# 読み書き(追記用)両用フラグを与える
write;
read;
if(over 1000){ white; close; chmod};
else close;
endif;

とすればopenの手間は一発(=1/3)ですむ。
0116サザン ★
垢版 |
04/02/25 22:10ID:???
4) のところで、

A) 999以上で書き込めるの?
B) んじゃdatに1000ストッパー追記しよう
C) んでもって、パーミッション切っちゃおう
D) おしまい

となってます。

B) に詰まっちゃって、A) をすり抜けてきちゃうのがたくさんできる予感。
0117仕事人 ★
垢版 |
04/02/25 22:11ID:???
>>114

まさしく dat 追記する瞬間だけど

open(OUT, ">>$DATAFILE");
print OUT "$outdat\n";
close(OUT);


ここで dat 数を数えて DispError() するってこと?

そのあとで subject.txt を書き換えるときに
また dat数数えるってこと ?
0118サザン ★
垢版 |
04/02/25 22:12ID:???
>>116
あ、A) は

A) 1000以上で書き込めるの?

だ。
0119▲ 某ソレ511
垢版 |
04/02/25 22:12ID:XARNcXSJ
でも、実際の1000大幅超えスレでは、1000ストッパーが何回も書き込まれているのに
その後から書き込みしたレスも書き込めちゃってるんだよね。
だから、Bに詰まっちゃってるのはないんじゃないかな。。
0120サザン ★
垢版 |
04/02/25 22:15ID:???
>>119
datへの書き込み後に1000越え判定するんで、有り得ないこともないですね、
0121仕事人 ★
垢版 |
04/02/25 22:15ID:???
512kB 超えの判定は bbs.cgi のかなり序盤
ここだとうまく行くから ここで dat数も数える?
んで数を保持しておいて、、、

後半の subject.txt 書き換え部分でその数使う?
すでにずれている予感もするのだが、、

ピーク時 bbs.cgi は 20回/sec くらい呼ばれているぞ
それも同じ subject.txt に対して
0122動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:18ID:HY3kIJLP
>>117
こういうことでは?

open(OUT, $DATAFILE, "a+");
print OUT "$outdat\n";
@logdat = <OUT>;
if (scalar @logdat > 999) {
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
} else {
close(OUT);
}
0126動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:32ID:6mZyPruH
そういえばbbs.cgiのcputimeってどのくらいです?

それ如何によってはある程度のdat(レス)数(の意でいいのだろうか)で
filelockかけるっていうことも視野に入れてもいいかなと。
まちがいなく1000近くになれば重たくなりますが、
over 1000の膨大なdisk I/Oでリソースを食うよりはましかと。

# peko級でcputimeが50ms程度でおさまっていればいいのですが・・・。
0127動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:42ID:HY3kIJLP
前にも書いたけど、1000レス制限は本当に必要なんだろうか……。
サイズ制限だけでも間に合うんじゃないだろうか……。
0128動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:58ID:1YZTD+xC
>>127
いつ書き込みできなるのか分からないし、
次スレを作るタイミングも分からないし、
とにかくユーザにとって使いづらいというかイライラすることは間違いない。
0129動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 23:05ID:HY3kIJLP
>>128
いつ書き込みできなくなるかについては、レス数のかわりにスレサイズを見るようになり、それがあたりまえになるんでは?
AA系なんかだと「450K超えたからそろそろ次スレ」なんてのはあたりまえだし。
0130動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 23:20ID:ZuAN1eHT
レス番号は左に確実に表示されているからどんなバカでも一目瞭然だけど。
datサイズは分からない人がたくさんいる。
0131動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 23:24ID:HY3kIJLP
はて。「サイズがxxxKBを超えています。512KBを超えると表示できなくなるよ。 」というメッセージは大きく表示されるけど。
0133動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 23:46ID:ZuAN1eHT
だから1レスごとに「133 : xxxkb/512kb:動け動けウゴウゴ2ちゃんねる 」
とか表示されていればアホでも理解できるだろうけど。
そうでなければ不親切極まりない。

というかユーザー無視のプログラマ親切なダメ設計だと思う。
0137動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/26 00:09ID:86AS2b63
read.cgiは
「1000を超えると書き込めないよ」と同じように
「512Kを超えると書き込めないよ」と警告が出るし

「レス番号が表示される」のと同じように
「サイズが表示される」もんね。

ただ、その事(>>133が知らない)と1000レス制限は撤廃してよいか、ってのは
別の話だとは思うけどね。
0139root ★
垢版 |
04/02/26 00:33ID:???
さて、やっとここに書く時間がとれた。

chmod()を使うからいけないんだと思うですよ。
fchmod()を使って、アトミックにすべきかと。

6.10. 競合状態を避ける
http://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/avoid-race.html
より引用。

他の例として、ファイルのメタ情報をいろいろ操作する作業を行う場合(オーナーの変更、
ファイルの状態確認、パーミッションビットの変更等)、まずファイルを開いて、開いたファイルに
対して操作してください。つまりこれは、chown()や chgrp()、chmod()のようなファイル名を
受けとる関数ではなく、fchown()や fstat()、fchmod()システムコールを使うことを意味して
います。こうすることで、プログラムが動作している間にファイルの置き換わりを防げます
(おそらく競合状態も)。たとえば、あるファイルを閉じてから、chmod()を使ってパーミッションを
変更すると、攻撃者はその 2 ステップ間にそのファイルを移動もしくは削除し、別のファイルに
対してシンボリックリンクを張ってしまえるかもしれません(たとえば、 /etc/passwd に対して)。
0140root ★
垢版 |
04/02/26 00:42ID:???
つまり、ロックじゃなくてrename()を使うというのと、意味合いは同じです。
(rename()はアトミックだから)

というわけで今の処理、
http://qb3.2ch.net/test/read.cgi/operate/1076174286/490 の、
490 名前:FOX ★[] 投稿日:04/02/24 22:13 ID:???
bbs.cgi のもっとも後半部分にこんなのがあるですよ。

open(RDAT,"<$dattemp");
@logdat=<RDAT>;#ログを配列に読み込む
close(RDAT);

#ログのカキコ数を取得
$lognum = @logdat;
if(-w $dattemp && $lognum > 999){
open(OVER, ">>$dattemp");
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OVER);
chmod(0555, $dattemp);
$lognum++;

を、

print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
fchmod(0555, OVER);
close(OVER);
$lognum++;

にすればいいんではないかなと。

# Perlよくしらないから、0555とOVERの順番は逆かも。
つかCのchmod()と引数の順番反対な気が。< Perl
0142root ★
垢版 |
04/02/26 00:50ID:???
うん。それも一理ある。>>141
visudoとかcrontab -eとか、いろんなところに使われているですね。
こういう新機軸のかずかずを最初に実装した4BSDは、
いろんな意味で偉大だったと再認識するわけで。

ただ、こういうのって、負荷が超高くなるとか、きびしー条件じゃないと、
なかなか不具合が露見しにくいとこだから、いい実験なのかもしれんですね。< live8
0146動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/26 06:13ID:sDGfENPy
flock って、ここだけでも使っちゃダメ?

#ログのカキコ数を取得
$lognum = @logdat;
if(-w $dattemp && $lognum > 999){
open(OVER, ">>$dattemp");
flock(OVER,2);
seek(OVER,0,2);
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
chmod(0555, $dattemp);
close(OVER);
$lognum++;
0148root ★
垢版 |
04/02/26 15:41ID:???
fchmod()って、ひょっとして標準のPerlにはついてないのかしら。
0150root ★
垢版 |
04/02/26 17:38ID:???
とりあえず、状況を管理人に通報しておきましたです。
原因も明確なので、あとは様子見しか正直やることがないかと。
0151root ★
垢版 |
04/02/26 17:39ID:???
おぉ、>>150 はごばーく。無視してくださいです。
0152root ★
垢版 |
04/02/26 21:48ID:???
以下のプログラムで、ちょっとテスト。いちおう動いた。
でも、ちょっと強引。

で、h2phしてsyscall.phを作っておく必要ありの模様。
これ入れれば、ほぼ間違いなく3000とか4000いくのはなくなると思われ。

うまく動くようなら、麻原判決の前に、live8でテストしてみるか。

#! /usr/local/bin/perl
#
# fchmod test via syscall
#

# may be needed 'h2ph'
require 'syscall.ph';

open(TTT,"A");
syscall(&SYS_fchmod, fileno(TTT), 0555);
close(TTT);

exit;
0154root ★
垢版 |
04/02/26 22:08ID:???
あとは、rename()の助けを借りて、コピーして元datの複製を作っといて、
複製をchmod()してrename()するぐらいかなぁ。
でも、こんなことすると効率悪い気がするなぁ。

if (まだ書き込める) {
元ファイルの複製を作る;
chmod(555,複製);
rename(複製, 元ファイル);
}
0155root ★
垢版 |
04/02/26 22:28ID:???
>>154はいかにも筋悪だなぁ。
複製を作っている間に、どんどん書き込まれる予感。

やっぱ、>>152 しかない気がする。

で、いちおう、make(perlcc)は通った模様。
ひ(りゃ的にOKなら、ちょっとやってみっか。

# なんだか、びんぼーくじを引いてるような気もする、する。
0156サザン ★
垢版 |
04/02/26 22:29ID:???
そしてずるずる引き込まれていくというのは内緒です。
0158未承諾広告※ ◆aiY4htt2.2
垢版 |
04/02/26 22:30ID:8HiAq5jU
sysopen はダメなのかな?
sysopen FH, $filename, O_RDONLY, 0555 or die;
みたいな。。。

♪open Systemcall がよく判ってなかったりして(汗)
0159root ★
垢版 |
04/02/26 22:32ID:???
私としては、こーゆーのはぜひとも次世代を担う若者にやってほしいわけですよ、よ、よ。やっぱ。
0160▲ 某ソレ511
垢版 |
04/02/26 22:32ID:VH9VksUc
わたしがperlの文法を覚えたのは
旧実験室のやつがきっかけだというのは、ないしょです。
0161root ★
垢版 |
04/02/26 22:33ID:???
>>158
sysopen使うなら、syscall使うのと50歩100歩かも。
つか、プログラマじゃない人にPerlをいじらしたらいけません(素)。
0162サザン ★
垢版 |
04/02/26 22:38ID:???
おじさんはダメだよ、おじさんは。

あれですね、一回 bbs.cgi を整理しないといけないのかも。
継ぎ足し継ぎ足しでやってますからねー、

処理を変えずにうまいこと順番を変えていく。
色々試してみる。
いつかは Best Choice が見つかるかも。
(見つからないかも)
0163root ★
垢版 |
04/02/26 22:41ID:???
>>162 には、激しく同意。同意だが、、、。

どなたか、柱になってすすめていただける人がいれば、
ちょっぴり支えるぐらいはできるかも。
細い杖だけどね。

わたしゃ、お守り関係で正直もうお腹いっぱい、PIEおっぱい。
0165root ★
垢版 |
04/02/26 22:43ID:???
早速1000超えかぁ。
0167サザン ★
垢版 |
04/02/26 22:44ID:???
>>163
(;´Д`)

ちょっとやってみよう。
とりあえず、現在の大まかな処理を書いてみよう。
0169root ★
垢版 |
04/02/26 22:47ID:???
今なんとなくぼーと観察してたけど、
なんだか、何らかのシステム資源が足りなくなった瞬間にこの現象が始まる気がする。

つまり、fchmodにしても解決しない問題なのかも。かも。
0170root ★
垢版 |
04/02/26 22:49ID:???
で、ある速度を超えると、どうも資源が足りなくなってるような。
今回のだと、なんだか「セックルキター」ってのがどばどばっと書かれて、
該当datの読み込み数が50回/secを超えたあたりか。
■ このスレッドは過去ログ倉庫に格納されています

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