bbs.cgi再開発プロジェクト 3
■ このスレッドは過去ログ倉庫に格納されています
ギコナビでレスを2325まで確認。
WinXP+IE6SP1では1001 :1001 :Over 1000 Threadが出て終わり。
山本寛斎の制服でPC自作できたよ〜♪
http://pc3.2ch.net/test/read.cgi/jisaku/1055561893/l50
ためしになつかしドラマ板の1000近いスレをいくつか埋めてみたんだけど
どれも1000突破した。もしかして板、というか鯖によって突破したり突破しなかったりするのか? 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 > 1020)#最後の手段
{
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);
}
DispError("ERROR!", "ERROR:このスレッドには書き込めません。最後の手段!!");
}
if($lognum > 1010)#念のため暴走ストッパー
{
umask(0);
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
umask(0);
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
>>626
これのこと?
http://qb3.2ch.net/test/read.cgi/operate/1069525567/
479 名前:動け動けウゴウゴ2ちゃんねる[] 投稿日:04/03/05 18:09 ID:Oh96gKaq
1000を超えても延々と書き込めるようです
http://bubble.2ch.net/test/read.cgi/natsudora/1040055595/
481 名前:サザン ★[sage] 投稿日:04/03/05 18:37 ID:???
>>479
とめましたー 何故か bubble サーバは、
昔立てられたスレッドの所有者が nobody になっているもより。
ということは・・・
↓ この↓あたりも変更直後くらいからパーミッションが変わって書き込めなくなっているもよん
【TBS】うちの子にかぎって・・・【田村正和】
http://bubble.2ch.net/test/read.cgi/natsudora/1047211834/
【チュー】マウススレ【チュー】
http://pc.2ch.net/test/read.cgi/mac/1057421491/
----
ERROR!
ERROR:このスレッドには書けません!
>>628
chmodは一切効いてなかったってことね… 引越し時に chmod で 777 にするんじゃなく
chown(でしたっけ?) 後 666 にすべきなのか?
ということは、引越し後の正しい呪文は
↓ chown("ch2あぼんあぼん");
chmod($filename,0666); 一般ユーザ(にsuexecされたCGI)がchownなんてできないと思うなぁ。 1000越えて書き込めていたのは確認した範囲では
去年以前に建立てられたスレのようだったし
今年に入ってから立てられたもので、1000ストッパーが
効いていないものってなかったような、、
サザンさんの>>628あたりに謎の答えがありそう、、、 古いスレを中心に、オーナーがおかしいやつがあるから、そいつら修正すればいいってこと?
(ストッパーが効かない原因のひとつ)
ディレクトリの持ち主がその人であれば「消す」ことはできるから、
例えばnobodyとかが持ち主のファイルを探して、一斉にこんなかんじにすればいいのかな。
(1000000000.dat のオーナーがおかしいとする)
cp -p 1000000000.dat tmp1000000000.dat
rm -f 1000000000.dat
mv tmp1000000000.dat 1000000000.dat
2行目でいきなりmv -fしてもいいけど、なんだかいやな予感がするんで。
find -user nobody とかして、該当のファイルについて一斉にやればよさそうな気がする。 FreeBSDでは、
cp -p 1000000000.dat tmp1000000000.dat
mv -f tmp1000000000.dat 1000000000.dat
でOKでした。Linuxでもやってみるか。 あ、そっか。Linuxでsuできる環境もってないや。
どなたか、実験きぼんぬ。
% mkdir test
% cd test
% sudo touch A
% cp -p A A.tmp
% mv -f A.tmp A
で、そのユーザのAになれば無問題。 >>637
古いスレでオーナーがおかしいやつの中で
1000間近なスレのURIがいくつか分かりますか? >>641
例えばbubbleサーバのnatsumeloj板なら、
find ./public_html/natsumeloj -user nobody -name \*.dat -print
なんてのを流せば、すぐわかるかと。
これをサーバの数分、板の数分やればいいかな。
ひまをみて、_service/を見て板名とってきてfindかけて、
オーナーをfixするためのshell scriptでも書いてみましょ。
できたら、各マシンで手分けして流していただくということで。 止まらなかった原因は単にchmodが効いてなかったってだけなのかー。 >>644
引っ越しのときにdatをchownするだけではダメですか? 移転の時は普通にファイルを移動してるだけなので、chownしなくてもいいはずです。>>647
というか、普通はこんなこと起きない気がしますね。< オーナが違う
途中でsuexec環境に変わった場合にのみ、起こるはず。
あるいはsuexecがバグっていて、「httpdのオーナーが抜けてきちゃった」場合とか。
# 経験したことあります。 移転しても移転しても書き込めるもよう。
>>645
これは「調子の悪い」とは違うと思うが。 >>648 補足。
> 移転の時は普通にファイルを移動してるだけなので、chownしなくてもいいはずです。>>647
理由: マシンをまたいだファイル移動の時に、オーナーが変わるから。 >649>651
ここで同じような報告を繰り返されてもご迷惑になるだけかと
>>639
drwxr-xr-x 2 (・∀・)ニヤニヤ users 4096 Mar 5 21:13 ./
drwxrwxrwx 15 root root 4096 Mar 5 21:11 ../
-rw-r--r-- 1 root root 0 Mar 5 21:12 A
-rw-r--r-- 1 (・∀・)ニヤニヤ users 0 Mar 5 21:12 A.tmp
[(・∀・)ニヤニヤ test]$ mv -f A.tmp A
[(・∀・)ニヤニヤ test]$ ls -la
合計 8
drwxr-xr-x 2 (・∀・)ニヤニヤ users 4096 Mar 5 21:14 ./
drwxrwxrwx 15 root root 4096 Mar 5 21:11 ../
-rw-r--r-- 1 (・∀・)ニヤニヤ users 0 Mar 5 21:12 A
[(・∀・)ニヤニヤ test]$
>>644
色々と考えられる事はあるのですが順番にやっていかないと
どれが原因か分からなくなりそうなので、まずこれから。。
見つかったスレに1000番目を書き込んだ時にこれ↓が表示されるかどうかが知りたかったんですよ。
>"ERROR!", "ERROR:このスレッドには書き込めません。最後の手段!!"
で、おそらく表示されるだろうとは思うのですが
1000 over を判定しているのはこれ↓を書き込む為にしているような、、
>"1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"
cgiの最初の方でこれ↓しか見ていないのは負荷軽減の為だと思うのですが
1000を越えているかどうかを最初に見ればパーミッションがどうなっていようと
1000を越えているスレには書き込めないと思うのですけど、既出の問題なのかしら、、
>#.datが存在してないか書けないならばいばい >>653
drwxr-x--- 24 root root 4096 Mar 5 21:09 ./
drwxrwxrwx 21 root root 4096 Feb 25 12:56 ../
[(・∀・)ニヤニヤ root]$ mkdir test
mkdir: ディレクトリ `test' を作れません: 許可がありません
[(・∀・)ニヤニヤ root]$
>>653
さんくす。Linuxでも問題なさそうですね。
んじゃ、shell script作ってみます。
今日はJimさんデーの2日目なんで、明日以降になるかもしれませんが。 ここまで読んだ
引越し屋バンバンが地方営業なのがわかった 902のカーネルだけ、5.2.1-RELEASE-p1に上げてみた(i386モード)
しかし、状況は変わらず。 options AAC_DEBUG=3
とか入れてみるか。 うひょ。>>659-660 は派手な2連続誤爆だ。 1000越えて書き込まれてたスレ発見。
真・スレッドストッパーのガイドライン
http://that.2ch.net/test/read.cgi/gline/1022203584/l50
試しに書き込もうとしたら
ERROR:このスレッドには書き込めません。緊急緊急緊急!!
と出ました。
このスレが建ったのは2002年、>>636で書かれている去年以前に建ったスレ。
手を加えるならXXX 名前:書けませんよ。。。 投稿日:停止
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ と本当にスレッドストッパーかけてくださいと冗談言ってみる。 ギコナビで書き込もうとしたら
ERROR:このスレッドには書き込めません。緊急緊急緊急!!
と表示されているが実際には書き込まれてます。
こっちに誘導されて来ました
yournet.ne.jpの規制が先ほど解除されたのですがlive10の規制が解除されていないようです。
解除の方よろしくお願いします。
規制絡みの設定のひとつF22が入ってないんじゃない?>live10
【Project peko】2ch特化型サーバ構築作戦 Part8
http://qb3.2ch.net/test/read.cgi/operate/1078972549/
19 名前:root ★ 投稿日:04/03/11 13:36 ID:???
live10, f22への登録おながいします。>サザンさんかな。
【実況板】 live5/7/8/9 鯖 【専用スレッド】その4
http://qb3.2ch.net/test/read.cgi/operate/1078921755/359
まとめると1001突破するけどそのうち止まるってこと? >>625 ソース
>if($lognum > 1020)#最後の手段
↑
これを超えたら
>DispError("ERROR!", "ERROR:このスレッドには書き込めません。最後の手段!!");
それ以降は↓になるわけです。
>DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); 最後の手段が効いてるけど緊急緊急緊急は効いてないってことか
最初から$lognum > 1000で判定しない理由は何だっけ? 効いてないのは古いファイルが chmod(0555, $dattemp); 出来ていないから。
そこで 1020を超えた時点で条件に引っ掛けて、datファイルを新しいファイルにコピーして
そのファイルを chmod(0555, $dattemp); している。
その後今までの古い datファイルは消去。
新しいファイルはパーミッションが 0555 になっているので今度は「緊急緊急緊急」で分岐するというわけ。 http://qb3.2ch.net/test/read.cgi/operate/1069525567/528-
最近スレ移動の後のストッパーが聞いてなくて
書き込めてしまうのが続出してるみたいなんですが、
これもここに報告でいいんでしょうか? >>685
たぶん移転するためのcgiはbbs.cgiじゃないから
ここじゃないほうがいいかなぁ、、
まあ、もう書いちゃってるんで言ってもしょうがないですが。 う〜ん、ここで1000ストッパーの改造がはじまってから、
>>685の現象が多発するようになったので、
関係あるのかな?って思ったんですが、、、
ハテサテ >>685 >>687さんに同意で。。。
格段に多いですよ 移転痕ストッパー外れ。 スレスト、ゴミ箱移転跡が移転すると書き込めるようになるのは仕様です 1000ストップの判断をしたあとで書き込んだ方がいいと思うんだけど
そうしない理由って何かあるの? Perlで書けよな。
高速だし、柔軟性あるし、大抵のサーバーで動くし、機能的にも問題ない。
PHPでは絶対書くな。 >>691
2chのスクリプトはCじゃありませんでしたか?
俺の勘違いなのかのぅ。 実況鯖だけかもしれないけど、bbs.cgi は perlcc で C にしてたような。 ひぇ〜ごめんなさい。C というよりはバイナリ実行形式でした < perlcc
ちなみにオプションをつければ C のコードも出せるようで。半可通でスミマソン >>695
(巨大な).cファイルに変換されて、Cコンパイラでコンパイルされますです。
.cファイルも取り出せますが、読めたもんじゃありません。 停止済みのスレッドの移転の場合は再停止(もってなければお願い)
停止前のスレッドの停止+移転の場合は移転してから停止。
が正しい措置と思われ。
>>697
そーなるとperlccで吐くコードではまだまだ無駄がありそうでつね。
やはりC(++)で最適コードを書いたほうがいいのかな・・・? >>699
ひ(ry がさわれなくなるからCで書くのはダメ、なんじゃなかったかな。
ただ、トラックバック機能のためにread.cgiをちょっと改造してたところを見ると
もしかしたらCもさわれるのかもしれないけど。 >>689 >>698
>>687-688の意味がちゃんと伝わってない希ガス
>スレスト、ゴミ箱移転跡が移転すると書き込めるようになるのは仕様です
「移転すると」ってのは鯖移転だと言いたいようだけど、
>>687-688の指摘はそうじゃなくて
削除人が移転やスレスト呪文唱えた直後のスレッドなのに、スレストが効いてない
=パーミッションが書き換わってない ってことです。
>>686に同意しつつも一応念押し。
>>702
触らせないようにすれば、その人に全面的にお任せ になるだけかと。 >>700
なるほど。
>>702の意見も正解かもしれませんな。
C言語版のしっかりしたメンテナがいればひ(ryは触る必要はないと思われ。 >>703マジで多いです
スレ移動した後、移転後をさらに停止させなきゃならないので
2回スクリプトを走らせなきゃならないし、ログも2倍溜まってるような・・・・・
ソースは無くて感覚だけど、ここで1000ストッパーいじりがはじまってから
増えたのは確かだと思う
>>686だとしても、どこに書きゃいいんだか
管理人に連絡か? >>707
安定性に問題があるだろ、氏ね。ウザイ。
ここまで斜め読みでカキコ。
dat書き込み時にレス数を数えて1000達成したら、
その場でストッパーかけないと本来はダメでしょうね。
理由は、数える→1001スレストの間に
他のプロセスがdatに書き込む可能性がありますから。 >>712
flock処理周りの実装バグったんじゃねーの?
過去のバグを前提にシステムのポリシー決めてたら
ろくな方向に向かわんぞ。
「OSによって問題がある」とかなら
symlinkで代替してもいいしさ。
そもそも書き込みは排他を前提にしないと
単純に設計がおかしいってことになる罠
排他無しは
ときどきリセットされるアクセスカウンターと同じ設計で
それは直すべきもの
そもそもサーバー構成がまともじゃねぇよ。
表側に位置するCGIサーバー群は全て同じ仕様と内部構造にして
DNSラウンドロビンにて負荷分散。
データ管理は裏方のDBサーバー。
DBはMySQLみたいな汎用RDBMS使ってもいいし、
NFS使ってUnix FSだけで管理してもいいし(その扱いは今とほとんど同じ)
裏と表の間でやりとりする専用プロトコルと専用メソッドを開発してもいいし。
でもって、クライアント側からのリクエストが閲覧だけのとき(書き込みではないとき)
の処理を徹底的に減らす必要があるな。
閲覧処理で行われる「いつもやってる計算」の中の「いつも結果が変わらない処理」
は書き込みのときに全て終らせてキャッシュさせておく。
主にHTMLに対する整形があるだろう。
書くレス番ごとのHTML整形されたファイルを作ったり
1-100を選ばれた場合の整形済HTMLを用意したり。
あと最も激しい負荷の矢面に立たされる読込処理のCGIは
C/C++で書いておく。そしてstatic link。
もしくはC/C++で書かれたプログラムをapache module化する手もある。
ここ数年仕様がほとんど変わってないんだから
これからも仕様は変わらないだろう。
「変更容易だが速度は遅い」という特性のスクリプティング言語を使っても
あまりメリットないよ。
「えー。Cわかんないよ。Perlならわかるけど」
とかいうなら、おまえんちのApacheはPerlで書かれてるのかと問いたい。 ■ このスレッドは過去ログ倉庫に格納されています