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/
0644root ★
垢版 |
04/03/05 20:59ID:???
>>641
例えばbubbleサーバのnatsumeloj板なら、

find ./public_html/natsumeloj -user nobody -name \*.dat -print

なんてのを流せば、すぐわかるかと。
これをサーバの数分、板の数分やればいいかな。

ひまをみて、_service/を見て板名とってきてfindかけて、
オーナーをfixするためのshell scriptでも書いてみましょ。
できたら、各マシンで手分けして流していただくということで。
0648root ★
垢版 |
04/03/05 21:04ID:???
移転の時は普通にファイルを移動してるだけなので、chownしなくてもいいはずです。>>647

というか、普通はこんなこと起きない気がしますね。< オーナが違う
途中でsuexec環境に変わった場合にのみ、起こるはず。

あるいはsuexecがバグっていて、「httpdのオーナーが抜けてきちゃった」場合とか。
# 経験したことあります。
0650root ★
垢版 |
04/03/05 21:05ID:???
>>648 補足。
> 移転の時は普通にファイルを移動してるだけなので、chownしなくてもいいはずです。>>647

理由: マシンをまたいだファイル移動の時に、オーナーが変わるから。
0653未承諾広告※ ◆TWARamEjuA
垢版 |
04/03/05 21:16ID:JZ5VNBHA
>>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]$
0654 ◆qb.x27/m96
垢版 |
04/03/05 21:18ID:7NAUewz2
>>644
色々と考えられる事はあるのですが順番にやっていかないと
どれが原因か分からなくなりそうなので、まずこれから。。

見つかったスレに1000番目を書き込んだ時にこれ↓が表示されるかどうかが知りたかったんですよ。
>"ERROR!", "ERROR:このスレッドには書き込めません。最後の手段!!"


で、おそらく表示されるだろうとは思うのですが
1000 over を判定しているのはこれ↓を書き込む為にしているような、、
>"1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"


cgiの最初の方でこれ↓しか見ていないのは負荷軽減の為だと思うのですが
1000を越えているかどうかを最初に見ればパーミッションがどうなっていようと
1000を越えているスレには書き込めないと思うのですけど、既出の問題なのかしら、、

>#.datが存在してないか書けないならばいばい
0655未承諾広告※ ◆TWARamEjuA
垢版 |
04/03/05 21:18ID:JZ5VNBHA
>>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]$
0656root ★
垢版 |
04/03/05 21:34ID:???
>>653
さんくす。Linuxでも問題なさそうですね。
んじゃ、shell script作ってみます。

今日はJimさんデーの2日目なんで、明日以降になるかもしれませんが。
0659root ★
垢版 |
04/03/06 03:05ID:???
902のカーネルだけ、5.2.1-RELEASE-p1に上げてみた(i386モード)
しかし、状況は変わらず。
0660root ★
垢版 |
04/03/06 03:10ID:???
options AAC_DEBUG=3
とか入れてみるか。
0668動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/11 15:42ID:26zSxLur
1000越えて書き込まれてたスレ発見。
真・スレッドストッパーのガイドライン
http://that.2ch.net/test/read.cgi/gline/1022203584/l50
試しに書き込もうとしたら
ERROR:このスレッドには書き込めません。緊急緊急緊急!!
と出ました。
このスレが建ったのは2002年、>>636で書かれている去年以前に建ったスレ。

手を加えるならXXX 名前:書けませんよ。。。 投稿日:停止
真・スレッドストッパー。。。( ̄ー ̄)ニヤリッ と本当にスレッドストッパーかけてくださいと冗談言ってみる。
0669動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/11 15:45ID:26zSxLur
ギコナビで書き込もうとしたら
ERROR:このスレッドには書き込めません。緊急緊急緊急!!
と表示されているが実際には書き込まれてます。

0672仕事人 ★
垢版 |
04/03/11 16:37ID:???
自動で止まった?
0674動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/11 19:03ID:yZZ2AD3B
こっちに誘導されて来ました

yournet.ne.jpの規制が先ほど解除されたのですがlive10の規制が解除されていないようです。
解除の方よろしくお願いします。
0676動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/11 19:23ID:/dqMBLPO
規制絡みの設定のひとつ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

0681 ◆qb.x27/m96
垢版 |
04/03/12 13:05ID:H9TO5cST
そのうち、じゃなくて1021で止まる、ですね。
0682 ◆qb.x27/m96
垢版 |
04/03/12 13:13ID:H9TO5cST
>>625 ソース


>if($lognum > 1020)#最後の手段
          ↑
       これを超えたら
>DispError("ERROR!", "ERROR:このスレッドには書き込めません。最後の手段!!");

それ以降は↓になるわけです。
>DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
0683動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/12 13:25ID:dfBaKHPM
最後の手段が効いてるけど緊急緊急緊急は効いてないってことか
最初から$lognum > 1000で判定しない理由は何だっけ?
0684 ◆qb.x27/m96
垢版 |
04/03/12 14:00ID:H9TO5cST
効いてないのは古いファイルが chmod(0555, $dattemp); 出来ていないから。
そこで 1020を超えた時点で条件に引っ掛けて、datファイルを新しいファイルにコピーして
そのファイルを chmod(0555, $dattemp); している。

その後今までの古い datファイルは消去。
新しいファイルはパーミッションが 0555 になっているので今度は「緊急緊急緊急」で分岐するというわけ。
0686▲ 某ソレ511
垢版 |
04/03/13 03:00ID:1eDifo9s
>>685
たぶん移転するためのcgiはbbs.cgiじゃないから
ここじゃないほうがいいかなぁ、、
まあ、もう書いちゃってるんで言ってもしょうがないですが。
0687動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/13 03:02ID:ldPMDkf/
う〜ん、ここで1000ストッパーの改造がはじまってから、
>>685の現象が多発するようになったので、
関係あるのかな?って思ったんですが、、、
ハテサテ
0691動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/14 22:21ID:UADx2/NY
Perlで書けよな。
高速だし、柔軟性あるし、大抵のサーバーで動くし、機能的にも問題ない。
PHPでは絶対書くな。
0696動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/15 01:35ID:/V72idmY
ひぇ〜ごめんなさい。C というよりはバイナリ実行形式でした < perlcc
ちなみにオプションをつければ C のコードも出せるようで。半可通でスミマソン
0697root ★
垢版 |
04/03/15 02:16ID:???
>>695
(巨大な).cファイルに変換されて、Cコンパイラでコンパイルされますです。
.cファイルも取り出せますが、読めたもんじゃありません。
0698動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/15 13:14ID:PM/gJL/z
停止済みのスレッドの移転の場合は再停止(もってなければお願い)
停止前のスレッドの停止+移転の場合は移転してから停止。

が正しい措置と思われ。
0699動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/15 13:39ID:mog12nGi
>>697
そーなるとperlccで吐くコードではまだまだ無駄がありそうでつね。
やはりC(++)で最適コードを書いたほうがいいのかな・・・?
0700▲ 某ソレ511 ZC188075.ppp.dion.ne.jp
垢版 |
04/03/15 13:41ID:D4rWoUrA
>>699
ひ(ry がさわれなくなるからCで書くのはダメ、なんじゃなかったかな。
ただ、トラックバック機能のためにread.cgiをちょっと改造してたところを見ると
もしかしたらCもさわれるのかもしれないけど。
0703動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/15 14:53ID:ZVqT935Q
>>689 >>698
>>687-688の意味がちゃんと伝わってない希ガス

>スレスト、ゴミ箱移転跡が移転すると書き込めるようになるのは仕様です
「移転すると」ってのは鯖移転だと言いたいようだけど、
>>687-688の指摘はそうじゃなくて

削除人が移転やスレスト呪文唱えた直後のスレッドなのに、スレストが効いてない
=パーミッションが書き換わってない ってことです。

>>686に同意しつつも一応念押し。

>>702
触らせないようにすれば、その人に全面的にお任せ になるだけかと。
0708動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/16 16:43ID:NnpYf1ai
>>703マジで多いです
スレ移動した後、移転後をさらに停止させなきゃならないので
2回スクリプトを走らせなきゃならないし、ログも2倍溜まってるような・・・・・

ソースは無くて感覚だけど、ここで1000ストッパーいじりがはじまってから
増えたのは確かだと思う
>>686だとしても、どこに書きゃいいんだか
管理人に連絡か?
0710動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/31 21:36ID:RCwxJg1s
ここまで斜め読みでカキコ。
dat書き込み時にレス数を数えて1000達成したら、
その場でストッパーかけないと本来はダメでしょうね。

理由は、数える→1001スレストの間に
他のプロセスがdatに書き込む可能性がありますから。
0714動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/01 23:17ID:50q0Uk4B
>>712
flock処理周りの実装バグったんじゃねーの?
過去のバグを前提にシステムのポリシー決めてたら
ろくな方向に向かわんぞ。
「OSによって問題がある」とかなら
symlinkで代替してもいいしさ。
そもそも書き込みは排他を前提にしないと
単純に設計がおかしいってことになる罠

排他無しは
ときどきリセットされるアクセスカウンターと同じ設計で
それは直すべきもの
0715動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/01 23:20ID:50q0Uk4B
そもそもサーバー構成がまともじゃねぇよ。
表側に位置するCGIサーバー群は全て同じ仕様と内部構造にして
DNSラウンドロビンにて負荷分散。
データ管理は裏方のDBサーバー。

DBはMySQLみたいな汎用RDBMS使ってもいいし、
NFS使ってUnix FSだけで管理してもいいし(その扱いは今とほとんど同じ)
裏と表の間でやりとりする専用プロトコルと専用メソッドを開発してもいいし。
0716動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/01 23:28ID:50q0Uk4B
でもって、クライアント側からのリクエストが閲覧だけのとき(書き込みではないとき)
の処理を徹底的に減らす必要があるな。
閲覧処理で行われる「いつもやってる計算」の中の「いつも結果が変わらない処理」
は書き込みのときに全て終らせてキャッシュさせておく。
主にHTMLに対する整形があるだろう。
書くレス番ごとのHTML整形されたファイルを作ったり
1-100を選ばれた場合の整形済HTMLを用意したり。

あと最も激しい負荷の矢面に立たされる読込処理のCGIは
C/C++で書いておく。そしてstatic link。
もしくはC/C++で書かれたプログラムをapache module化する手もある。
ここ数年仕様がほとんど変わってないんだから
これからも仕様は変わらないだろう。
「変更容易だが速度は遅い」という特性のスクリプティング言語を使っても
あまりメリットないよ。

「えー。Cわかんないよ。Perlならわかるけど」
とかいうなら、おまえんちのApacheはPerlで書かれてるのかと問いたい。
0717動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/01 23:32ID:50q0Uk4B
CGIとしてのperlを高速化したいなら
mod_perlにするかprelinkを使うのをおすすめ。
prelinkツールにてperl本体を前処理しておけば
perlの起動が高速化される。
0718未承諾広告※ ◆TWARamEjuA
垢版 |
04/04/02 08:25ID:RlsJBx6I
鳥インフルエンザキャリアの人?(w

だったら焼却漏れがありますよと伝えなきゃ(嬉)@T波町
0719▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/04/02 09:31ID:TSOc+dgc
最近過去ログ周りに注力しているせいか放置されている最寄ですが、
bbs.cgiのmod_perl化は検討されています。

ただ今はperlccによるバイナリ化で
それなりに効果を挙げているようなので現状でとまっているようです。

しかし吐くCコードとバイナリが巨大なので
メモリを圧迫しているということはあります。
理想はC化なのですが、そうするとひ(ryが扱えないということらしいです。

read.cgiは既にCです。
I/Oのはげしいスレはdatは常時オンメモリです。

NFSマウントはセキュリティ上あまり好ましいものではありません。
余計なポートを空けることになるからです。
# NFS over HTTPはできそうですが、結局負荷増につながりそう。
0720▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/04/02 09:34ID:TSOc+dgc
>>719
続き。
2chにおける一番の負荷はディスクI/Oです。
そして一プロセスあたりで一番使うのがbbs.cgiです。

root師の言葉を借りるならば、「1にI/O、2にI/O・・・」だとか。
07217M. ◆dq7M./4Uw.
垢版 |
04/04/02 13:16ID:0I3x2u/S
>理想はC化なのですが、そうするとひ(ryが扱えないということらしいです。
こうゆうところがひろゆ子らしいとゆーかなんとゆーか。。。
0722▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/04/02 13:59ID:TSOc+dgc
後このスレで議論されまくっていますが、
bbs.cgiは仕様変更が多いのでチューンがめちゃくちゃ甘いですね。

コードの整理とC化で倍速になりそうな悪寒。
0723見習い▲ ★
垢版 |
04/04/02 14:09ID:???
>>722
1,000倍になると思われ、

で、現在不具合はあるのかな? < bbs.cgi
0724root ★
垢版 |
04/04/02 14:14ID:???
>>723
個人的には、サーバ落ちによるものを除いても、復帰依頼の回数がやや増えた気がしますね。
ただ、復帰屋さんにまめに動いていただけているので、運用でカバーできているような気もします。
0725動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/02 14:42ID:YXn5ZZX7
現行のbbs.cgiのソース公開は無理でも、Cで一から作り直すのは駄目なんですか?
それこそ、オープンソースで遣れば荒らし対策とかもちゃんと出来そうな気もするし。

ひろゆきの気持ちとしては、弄れなくなるのは「嫌」なのかも知れないけど、運用とし
ては別に良いんじゃないかぁ。現行だって随分人任せみたいだし(w
0726見習い▲ ★
垢版 |
04/04/02 14:47ID:???
>>725
そこは管理人から何回も名言されているので
私はその言葉を聴いて私として行動していくだけです。

あなたはあなたの道を行けばいいだけかと、
誰も邪魔しないと思います。
前進あるのみ。
0727動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/02 15:47ID:7gYfzu4s
ひ(ry はPerlしか使えないんだっけ?
でも最近「弄った」とか言っているの見たことないし、
ひそかにC化しちゃってもいいんじゃないの?ばれないって (w

で、flockが使えないから 排他処理全くしていないって本当なの?
本当ならすごいね。
0732動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 00:10ID:FQCdjyRh
1ディレクトリーの中にファイルは多くて何個ある?
数千個越えてくるとディスクI/Oの負荷が高くなりやすい。
それを防ぐために1階層か2階層はサブディレクトリーによる分類が必要。
squidのキャッシュディレクトリーを参考にな。

メモリ搭載を増やしてディスクキャッシュに頼るという逃げもあるが
根本的には「必要とされないデータをディスクから読む」という
動作を減らす設計が必要。
URLの末尾"l50"でアクセスするユーザーが大半なのに
毎回読まれるたびに1番レスから全部読んでいたら無駄が大きい。
その場合l50専用のファイルを「書き込み時」に生成するとか
逃げ方はいろいろある。
インデックスファイルと本文ファイルを分けて
インデックスファイルを読むことによってレス番からオフセットを求めて
本文ファイルを読むときはオフセット使って一気にfseekする手もある。

mysqlでも使っておけとと言いたいところだが、
ファイル使うにしてもおかしな設計だと
その負荷の大半は「無駄な負荷」になるんだよ。

ていうかflockはしておかなきゃ。
0733ひろゆき@どうやら管理人 ★
垢版 |
04/04/03 04:34ID:???
flockを使わない実装のほうが負荷が低いですよ。
0734動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 07:11ID:NW9nxuLR
ボッキage
0735動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 08:39ID:Lo74GCgh
$ /usr/bin/time perl -e 'open(F,">>/tmp/xxx");for($i=0;$i<100000;$i++){flock(F,LOCK_EX);flock(F,LOCK_UN)}'
0.16user 0.07system 0:00.22elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k

flockはたいした負荷じゃないべ
0736動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 08:51ID:Lo74GCgh
>>719
> NFSマウントはセキュリティ上あまり好ましいものではありません。
> 余計なポートを空けることになるからです。

NFS通信するホストは物理的に近隣に配置して
それぞれLANカードを1枚余計に搭載してプライベートアドレスを割り当てて
HUB経由直結でプライベートネットワークを構築して
そちら側からだけ通信許可すれば外向きにポートが開かないので
セキュリティー上の問題は無いと考えて良い。
それが困難ならipchains等によるフィルターも有り。
0737動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 09:05ID:Lo74GCgh
ていうかbbs.cgiとread.cgiのソースはどこよ?
0739▲ 某ソレ511 Y039073.ppp.dion.ne.jp
垢版 |
04/04/03 09:09ID:Wi42VsNX
bbs.cgiはひどいスパゲティソースで、見た人が次々に消えてしまう
らしいから、一から作ったほうが早いかもよ。
ということで、がんばれ。>>736
0740root ★
垢版 |
04/04/03 09:11ID:???
>>736
いわゆるNASなどを使ったソリューションではよくある形ですね。
10.0.0.0/8とかつけとけばいいと。

でも、NFSとflockって大抵の場合、きわめて仲が悪かったり。
(私は何度も痛い目にあいました)

いずれにせよ、細かなI/Oが多数発生するような系では、
flockはともかくNFSを使う気は全くないですね。
NFSだと、Apache的にEnableMMAPやEnableSendfileとかがうまくないので、
パフォーマンス的に激しくつらいです。

例えばhome directoryの共有みたいな用途には便利だし、
うまくやれば管理も楽なので、NFSという技術そのものを否定するものではありませんです。
単純にライブな掲示板システムには、ちょっとなぁというだけで。

で、flockは >>735 みたいなやり方の負荷は、確かに高くなりません。
でも、他の人を「待たせる」ことが、そもそも負荷というか、重荷というか、コスト高になります。

掲示板システムって、もう、待たせちゃいけない。システムも、ユーザも。
待たせるぐらいなら、他の手段(rename()をうまく使うとか)を使うですね。

某氏じゃないけどNFSはこういう用途に使う場合には、
Network Failure Systemだぐらいに思っていたりして。
0741動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 09:21ID:Lo74GCgh
>>740
またせちゃいけないからflockはつらいってか。
じゃあ手段1。書き込む先のファイルを分けることだな。
$thread_num = スレ番号;
$pid = $$;
open(WRITE,">$base_directory/$thread_num/$pid");
でもって、これらをマージするのは別のデーモンが行う。

もしくは手段2。デーモンがunixソケットの口を開けて待っていて
bbs.cgiはそのデーモンに向かって次々と書き込みリクエストを投げつける。
実際のファイルへの書き込みはデーモン1プロセスが行うので
排他処理は不要。

ていうか俺が作れってか
■ このスレッドは過去ログ倉庫に格納されています

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