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/
0420動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 21:33ID:Oky00rr1
いっそのこと1001ストッパー廃止でいいじゃん。
0424 ◆Nm5090363w
垢版 |
04/02/29 21:46ID:ESMdxJrR
>>416
>>404を確かめるために
試験的に >>353 の if($lognum > 1010) を if($lognum > 300) とかにして
300を超えたスレッドに書き込んでみて
「緊急緊急緊急!!」が出るかどうかを見てみるのはどうでしょか。
0426 ◆Nm5090363w
垢版 |
04/02/29 21:49ID:ESMdxJrR
>>425
いや、いきなり全鯖に配るわけじゃなくて、(金) でテストするだけでも、と……。
0428動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 21:50ID:Oky00rr1
>>426
(金)ではやり辛いでしょ。
いっそのことN速で実験しましょ。
0431動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 21:52ID:kaI5hUlb
いろんなとこにフラグ立てまくって出力させてみてほしいです
どこが実行できていて、どこができてないのかよく分かんない
0433仕事人 ★
垢版 |
04/02/29 22:19ID:???
ん?

もう解ったんでないのか?

違うところで戦っていたということが、
0434動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 22:23ID:kaI5hUlb
>>433
その言葉の意味が分かんねっす・・
0435 ◆Nm5090363w
垢版 |
04/02/29 22:26ID:ESMdxJrR
ひょっとしたら my @logdat = <OUT>; の前に seek(OUT, 0, 0); を入れるといいかも(←自信なし)。
0436動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 22:27ID:P807886c
うちのwindowsだと、

if (open(OUT, "+>>$DATAFILE"))
{
#この時点でファイル末尾にseekされてる
my @logdat = <OUT>;
my $lognum = @logdat;

これだと@logdatは空になっちゃうんだけど、、、

if (open(OUT, "+<$DATAFILE"))
my @logdat = <OUT>;
my $lognum = @logdat;

じゃないすかね
0438 ◆Nm5090363w
垢版 |
04/02/29 22:30ID:ESMdxJrR
>>436
うちのcygwinだと"+>>"でopenした時点でファイル先頭にseekされてました。
あと、追記モードじゃないと書き込みがぶつかったときにヤバいです。
0440 ◆qb.x27/m96
垢版 |
04/02/29 22:34ID:W0afuNnL
>>433

ええと>>330に手を加えていたものが>>350
その後>>353でテストして>>330あたりに戻ったということなのかな。。
どのソースを元にやればいいのか、、
ちょっとゆっくりやってほしい、、
0445動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 22:55ID:VMV/4FdL
思ったんだけど
bbs.cgiを置き換えちゃうと不具合が出たときに面倒だし
変数を表示しようとしてもなかなか難しい。

そこで、bbs_test.cgiにして実験する。
で、こいつにPOSTするのも面倒だから
POST先だけを変えたread_test.cgiを作り
テスト用の鯖に入れる。
で、書き込みテストはそっちでやって、内部の変数や状態をずらずらと表示する。
ただ、1000到達時のテストは難しいかな。
0446仕事人 ★
垢版 |
04/02/29 23:00ID:???
open(OUT, ">>$DATAFILE");
print OUT "$outdat\n";
close(OUT);

dat 追記部分は元にもどす。
0447仕事人 ★
垢版 |
04/02/29 23:01ID:???
そして、
ここに持ってくる

sub MakeWorkFile{
my $key = @_[0];
my $workfile = $TEMPPATH . $key . ".html";
my $dattemp = $DATPATH . $key . ".dat";
my (@messx,@content,@logdat);
my ($lognum,$mailto,$time,$brmax,$topnum,$firstlog,$name,$mail,$subject,$message);

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

#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
open(OUT,"<$dattemp");
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
0448仕事人 ★
垢版 |
04/02/29 23:01ID:???
これを ニュー速に入れてみよう
0452仕事人 ★
垢版 |
04/02/29 23:05ID:???
>>450
1,000 取ってみてくだせー
0453 ◆Nm5090363w
垢版 |
04/02/29 23:05ID:ESMdxJrR
>>447 を見て気づいたこと。
・「緊急緊急緊急!!」が書き込み終わった後になる
・1001ストッパー書き込み時のオープンモードが読み込みモード
0455動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 23:07ID:JvRnpXfA
ニュー速1000きっちりで終わったよ
0457仕事人 ★
垢版 |
04/02/29 23:08ID:???
>>453
ども 、
直してみた


if($lognum > 1010) # ここはこないと予想
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
open(OUT,">>$dattemp");
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
0458仕事人 ★
垢版 |
04/02/29 23:09ID:???
>>456
微妙
0459未承諾広告※ ◆TWARamEjuA
垢版 |
04/02/29 23:10ID:47xPabMI
>>447
open(OUT,"<$dattemp");
print OUT "1001<><>Over 1000 Thread<>この

鰓がでるよね?
もっと餅付いてくだちい。。。
0460動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 23:22ID:fKbOd8s3
chmod(0666, $dattemp);がchmod(0555, $dattemp);よりあとに実行されるとは考えにくいけど、
念のため、
if($lognum > 1010)
{
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR〜");
}
としてもいいかも。
0461動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 23:24ID:Jf+5mxoZ
ウスターの一部しか開示されないので
処理の流れがわからない。。。

あと、別のところで問題がある場合も
思い込んでる場所のみを開示&思考なので発見が遅れる。。。

な予感('-')
0464 ◆qb.x27/m96
垢版 |
04/02/29 23:26ID:W0afuNnL
if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
----

この部分ですけど実際にファイルをopenしているのはどこなんだろう、、
そして$outdat には何が入っているのだろう、、

こんな風に変更したら、どですか。>>330

と思ったらまたやり直し、、、
0470 ◆Nm5090363w
垢版 |
04/02/29 23:30ID:ESMdxJrR
>>468
あー、1001ストッパー書き込み時に++$lognum;が必要ですね……。
0472仕事人 ★
垢版 |
04/02/29 23:33ID:???
>>470
おおっ

入れてみます
0473仕事人 ★
垢版 |
04/02/29 23:34ID:???
open(RDAT,"<$dattemp");
@logdat=<RDAT>;#ログを配列に読み込む
close(RDAT);

#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
open(OUT,">>$dattemp");
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $dattemp);
$lognum++;
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
0475仕事人 ★
垢版 |
04/02/29 23:35ID:???
$SUBLINE = $subject . " (" . $lognum . ")\n";

$SUBLINE がグローバルになっていて
あとで subject.txt を更新するのに使うと予想。
0476仕事人 ★
垢版 |
04/02/29 23:35ID:???
>>474
しらない
0477動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 23:35ID:tbK47Xxd
仕事人ほかいろいろな人お疲れさんです
0478仕事人 ★
垢版 |
04/02/29 23:37ID:???
配ってみる
0480仕事人 ★
垢版 |
04/02/29 23:48ID:???
全部にくばった
0493▲ 某ソレ511
垢版 |
04/02/29 23:58ID:3Ckm5k37
たぶんバイナリ化せずにソースを入れてるんじゃないかと。
バイナリ化するのはroot ★さんの仕事。
0495動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 00:00ID:vlCZckrZ
悪いことは言わん。
1000チェックだけでも、別ロックファイルとして*.dat以外にしないとchmodヘルになると思う。
ファイルI/Oを嫌って1ファイルでゴニョゴニョしているほうがパフォーマンスが悪くなると思う。
0496 ◆qb.x27/m96
垢版 |
04/03/01 00:03ID:OvElWHnn
ERROR!
ERROR:このスレッドには書けません!

---
>>491のスレは1000のチェックではなくてパーミッションチェックで弾かれている予感。
あとは高負荷がかかった時でも大丈夫ならOKなのかな、、
0497 ◆qb.x27/m96
垢版 |
04/03/01 00:08ID:OvElWHnn
  ↑
1000行ってしまった後にあらため書き込もうとした時の話です。
なんかあまり役に立てなかった悪寒 _| ̄|○
0500 ◆Nm5090363w
垢版 |
04/03/01 00:17ID:GH4N2w1a
>>498
subject.txtではレス数が1002になっている……。
ミナカッタコトニシヨウ
0501動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 00:19ID:KZO/IjMi
age
0502 ◆LBZUBURIYM
垢版 |
04/03/01 00:20ID:JrtqeRJZ
1000越え判定の時の$lognumに直接1001を叩き込んじゃだめですか?>判るひと
0504 ◆Nm5090363w
垢版 |
04/03/01 00:23ID:GH4N2w1a
if($lognum > 999)
{
if (open(OUT,">>$dattemp")) {
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
これでどうでしょ。

>>502
レス数がきっかり1000で止まる保証がないので、直接1001をいれるとマズいです。
0506仕事人 ★
垢版 |
04/03/01 00:36ID:???
>>504

そね

#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}

0507仕事人 ★
垢版 |
04/03/01 00:44ID:???
まとめ(メモメモ)

処理の流れは

1) とにかく色々チェック。
2) dat に追記。
3) MakeWorkFile で html/xxxxxx.html を作る
  この時に 1,000 超えを判定、 1,001 を書き 0555 にする。
  この関数内で $SUBLINE = $subject . " (" . $lognum . ")\n";
  を作りあとで subject.txt の書き換えに使う。
4) subjext.txt 書き換え
5) ふぅ終了。
0508仕事人 ★
垢版 |
04/03/01 00:46ID:???
問題は 2) で追記したあと 0666 にしていたので
せっかく 0555 で書き込めなくしたのに書き込めていた。

あと bbs.cgi の最初のほうで
unless( -w $DATAFILE){
DispError("ERROR!","ERROR:このスレッドには書き込めません。");
}
を行い、なるべく負荷をさげようと。
0509仕事人 ★
垢版 |
04/03/01 00:53ID:???
大幅なオーバーランはなくなったか → たぶん
前よりも処理は軽くなったか? → たぶん

要観察ですなぁ
0510動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 01:18ID:BnaSe/vj
なんか、あまり変わってない気がするのは気のせいに違いない。

#dat追記部分
if (open(OUT, ">>$DATAFILE"))
print OUT "$outdat\n";
close(OUT);
} else {
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}

#ログのカキコ数を取得
if($lognum > 1010)
{
chmod(0555, $dattemp);#念のため
}
elsif($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}

にしたほうがいいかも。
0511動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 01:28ID:xl24PgZ6
最大書き込み数がてんでばらばらなのはなんとか
ならないのか?
全レス取得できたのかどうか,すっきりしないんだが。
0513動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 01:34ID:vlCZckrZ
>>484
>オープンソースは荒らしに利用されるから
誤解されるようなことを振りまかないでー。
ApacheやFreeBSDはオープンソースですが荒らしに利用されていますか?
0515仕事人 ★
垢版 |
04/03/01 02:18ID:???
こうしたらどうなる?

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

#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
#$lognum++;
open(RDAT,"<$dattemp");
@logdat=<RDAT>;#ログを配列に読み込む
close(RDAT);
$lognum = @logdat;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
0516 ◆Nm5090363w
垢版 |
04/03/01 02:43ID:GH4N2w1a
>>515
レス数のカウントがより確実になって、ちょっと重くなる?
■ このスレッドは過去ログ倉庫に格納されています

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