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/
0347動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 15:13ID:miDcWYdc
if($lognum > 1000)
{
++$lognum; #←これもいるかも
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
0349root ★
垢版 |
04/02/29 15:14ID:???
ただ、>>344 みたいなアプローチがどのぐらい効果あるかだけど、、、。
それで、1001ストッパーが書かれるような気は、あんまりしないかも。

ちょっとお出かけ。
0350仕事人 ★
垢版 |
04/02/29 15:15ID:???
#MakeWorkFile(KEY-NUMBER)
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(-w $dattemp && $lognum > 999){
#open(OVER, ">>$dattemp");
#print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
#close(OVER);
#chmod(0555, $dattemp);
#$lognum++;   ← コメントにした
0351動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 15:15ID:YkP68lMj
>>330
#ログのカキコ数を取得
から
#1つ目の要素を読み込む
の前までがいらない。
この中の$lognum++;が最終的にsebject.txtに書かれているので
実際より+1された数が入ってしまう。
0352仕事人 ★
垢版 |
04/02/29 15:16ID:???
>>346
おおっ
0353仕事人 ★
垢版 |
04/02/29 15:18ID:???
変更

if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
++$lognum;
if($lognum > 1010)
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
print OUT "$outdat\n";
if($lognum > 999)
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
else
{
close(OUT);
#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);
}
}
0355GlobalService ★
垢版 |
04/02/29 15:23ID:???
解決した?

最終的に subject <= 実際のカウント になればいいような
0356動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 15:23ID:genUmBmg
datの読み込みを2回やってるんですね〜……。
レスの書き込みとレス数の取得を同時にやる(>>353 の処理を >>350 に持ってくる)のがいいかも。

……大手術(汗)。
0357サザン ★
垢版 |
04/02/29 15:24ID:???
>>354
おいらもそう思ったですよ。

chmod 0555 しても、追っかけてきてるプロセスが chmod 0666 しちゃって、
そのプロセスが、chmod 0555 しても。。。

chmod 0666 を消したら解決だったりして。
0359root ★
垢版 |
04/02/29 15:39ID:???
でかける前に見た。
こりゃ、>>354がビンゴな気が。
でなきゃ、いくらひどいじょーきょーでも、4000とかいく原因とは考えにくい。

しばらくオフライン。たまーにPHSでチェックするかも。
0360サザン ★
垢版 |
04/02/29 15:40ID:???
というわけで、live8,9に

chmod(0666, $DATAFILE);

を消したやつを入れてみてくださいですー。
0361 ◆qb.x27/m96
垢版 |
04/02/29 17:18ID:W0afuNnL
>>353
処理の順番が。。
これでどですか。


if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
if($lognum = 1000) #正常処理
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
}
if($lognum > 1000) #非常時処理
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
print OUT "$outdat\n";
chmod(0555, $DATAFILE);
}
else if($lognum < 1000) #1000未満時処理
{
close(OUT);
#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);
}
++$lognum;
}
0362 ◆qb.x27/m96
垢版 |
04/02/29 17:53ID:W0afuNnL
訂正。。


if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
++$lognum;
if($lognum = 1000) #正常処理
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
}
if($lognum > 1000) #非常時処理
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
print OUT "$outdat\n";
chmod(0555, $DATAFILE);
}
else if($lognum < 1000) #1000未満時処理
{
close(OUT);
#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);
}
}
0363動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 18:21ID:VrFyjLpJ
>>351
テレビ朝日実況板より
スクープスペシャルその1 (1001)
http://live8.2ch.net/test/read.cgi/liveanb/1078030448/
1000 名前:名無しステーション 投稿日:04/02/29 14:52 ID:gFLAwWAx
(1001無し)

スクープスペシャル 警察の裏金疑惑第2弾 その2 (1000)
http://live8.2ch.net/test/read.cgi/liveanb/1078030554/
1000 名前:名無しステーション 投稿日:04/02/29 15:20 ID:LyiRwuOt
(1001無し)


この間に加えた修正によって、subject.txtに書かれるレス数と
実際のレス数が一致するようになりました。ありがとう!
0364 ◆qb.x27/m96
垢版 |
04/02/29 18:50ID:W0afuNnL
#ERROR!
#ERROR:このスレッドには書けません!

#修正ここまで。
# "ERROR:このスレッドには書き込めません。緊急緊急緊急!!" が出てこないけど今ソースはどうなってるのだろう。。


if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
++$lognum;
if($lognum = 1000) #正常処理
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
if($lognum > 1000) #非常時処理
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
print OUT "$outdat\n";
}
else if($lognum < 1000) #1000未満時処理
{
close(OUT);
#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);
}
}
0367仕事人 ★
垢版 |
04/02/29 19:27ID:???
なぜ 1,001 が書き込まれないんだ?
0368動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 19:33ID:genUmBmg
1001ストッパーが書き込まれないのは
・プロセスAが >>353 で1000レス目を書き込む
・プロセスBが >>330 で(1000レス以上なので)chmodする
・プロセスAが1001ストッパーを書き込もうとするもEPERM
と予想してみる。

ということで、>>353
if ($lognum > 1010) {
close(OUT);
chmod(0555, $DATFILE);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
にして、>>330 の chmod(0555, $dattemp); を削除する、というのはどうでしょ。
0370仕事人 ★
垢版 |
04/02/29 19:48ID:???
これ全部いらないのか?

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

if(-w $dattemp){
my $datdat = $DATPATH . $key;
my $tmpdat = $DATPATH . $key . ".tmp";
my $success;
open(COPY, "cp $dattemp $datdat |");
close(COPY);
$success = 0;
until($success){ $success = rename($datdat, $dattemp); }
chmod(0555, $dattemp);
unlink($tmpdat);
}
}
0371仕事人 ★
垢版 |
04/02/29 19:49ID:???
いったい何をしているルーチンなんだろぅ
0372動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 20:11ID:aErj63/K
ファイルロックの名残?
総帥に事情聴取してからにしてください。
こないだのiスクリプト消滅騒ぎのような事態は避けないと。
0373動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 20:12ID:2mqLuO2T
あらためて
・複数のプロセスが999レス目のつもりで書き込む→1000オーバー(ただしストッパーは書かれない)
・1000オーバーなので >>330 でchmod
と予想してみる。

ってことで、>>330 の1001ストッパー書き込みも復活すれば……。
……泥縄だなぁ。
0375 ◆qb.x27/m96
垢版 |
04/02/29 20:17ID:W0afuNnL
ええとこれとまったく同じメッセージが書いてある部分のソースがないのですがどの部分でしょうか
 ↓
ERROR:このスレッドには書けません!


あと $outdat っての値が代入されている部分のソースもないし。。
0377 ◆qb.x27/m96
垢版 |
04/02/29 20:24ID:W0afuNnL
ええとこういう風になっているはずなのですけど。

DispError("ERROR!","ERROR:このスレッドには書き込めません!");


----
ERROR!
ERROR:このスレッドには書けません!
0378サザン ★
垢版 |
04/02/29 20:26ID:???
>>377
なんか重複してるけど、一緒です。

#.datが存在してないか書けないならばいばい
unless(-w $DATAFILE){
DispError("ERROR!","ERROR:このスレッドには書けません!");
}
#my $datsizeis =(stat("$DATAFILE"))[7];
#unless( $datsizeis <= 512000){
#DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
#}
unless( -w $DATAFILE){
DispError("ERROR!","ERROR:このスレッドには書き込めません。");
}
unless( -s $DATAFILE <= 512000){
DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
}
0379 ◆qb.x27/m96
垢版 |
04/02/29 20:26ID:W0afuNnL
あ間違えたました、、こうです

DispError("ERROR!","ERROR:このスレッドには書けません!");
0381サザン ★
垢版 |
04/02/29 20:29ID:???
>>370
chmod 0555 が失敗したときか、
chmod 0555 の後に書き込めるようになっちゃったときの処理ですかねー、
あんまり意味がないような気もする、、
0384仕事人 ★
垢版 |
04/02/29 20:52ID:???
謎がなぞ呼ぶ殺人事件〜
0386仕事人 ★
垢版 |
04/02/29 20:56ID:???
>>383
作っていないような気がする。。。
0388仕事人 ★
垢版 |
04/02/29 20:58ID:???
ようし、外してみよう。


#if(-w $dattemp && $lognum > 999){
##open(OVER, ">>$dattemp");
##print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
##close(OVER);
##chmod(0555, $dattemp);
##$lognum++;
#
#if(-w $dattemp){
#my $datdat = $DATPATH . $key;
#my $tmpdat = $DATPATH . $key . ".tmp";
#my $success;
#open(COPY, "cp $dattemp $datdat |");
#close(COPY);
#$success = 0;
#until($success){ $success = rename($datdat, $dattemp); }
#chmod(0555, $dattemp);
#unlink($tmpdat);
#}
#}
0392仕事人 ★
垢版 |
04/02/29 21:02ID:???
>>391
何人の人がそう思いチャレンジしてきたことか・・・
いまだ勝者は一人としていない、暗黒の世界から生還したものはいない。
0393動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 21:03ID:ESMdxJrR
>>390
たぶん
/dat/key.dat に書き込んで
/dat/key.dat を /dat/key にコピーして ←たぶん無駄
/dat/key を /dat/key.dat にリネームして ←たぶん無駄
/dat/key.dat を書込み禁止にして
/dat/key.tmp をあぼーんしている ←たぶん無駄
かと……。
0398Vsw ◆OoVswP.T/I
垢版 |
04/02/29 21:20ID:qAGI7Tit
芸スポなんですけどいいですか?
【サッカー】日本代表選手7人が合宿中に規則違反で飲酒★2
http://news6.2ch.net/test/read.cgi/mnewsplus/1077996750/

1001ストッパーが壊れてるのか
ストップしないんですか。
0400仕事人 ★
垢版 |
04/02/29 21:21ID:???
うーむ

別の土俵で戦っていたのか。。。
0402Vsw ◆OoVswP.T/I
垢版 |
04/02/29 21:25ID:qAGI7Tit
各板、片っ端から1000overしてるようです。
0404仕事人 ★
垢版 |
04/02/29 21:25ID:???
これが期待通りの動作をしていないってことっすね

if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
0407仕事人 ★
垢版 |
04/02/29 21:26ID:???
>>338 以前まで rewind 中。。。
0408動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 21:26ID:kaI5hUlb
テストとしてだけど1000を超えたらあらゆる変数を出力しまくってみては
0409動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 21:26ID:JvRnpXfA
1001復活きぼんぬ
0410 ◆LBZUBURIYM
垢版 |
04/02/29 21:29ID:jysovvLt
1010のやつを生かしておいて,変数を色々出力して検証してみてはどうでしょ?
0412動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 21:30ID:CtJQij/n
うはwwwwwwwwwww
0415Vsw ◆OoVswP.T/I
垢版 |
04/02/29 21:31ID:qAGI7Tit
現状>>403が一番凄い。
3000突破してる・・・

でもどうやら止まったみたいですね。
0416仕事人 ★
垢版 |
04/02/29 21:32ID:???
thinking time.....

どぞ↓
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 追記部分は元にもどす。
■ このスレッドは過去ログ倉庫に格納されています

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