bbs.cgi再開発プロジェクト6
■ このスレッドは過去ログ倉庫に格納されています
peko鯖の稼動によりボトルネックの一つである事がより明らかになった bbs.cgi作り直しプロジェクトです。 【開発環境の工事現場】 また挑戦。@2ch掲示板 http://dso.2ch.net/myanmar/ また挑戦2。@2ch掲示板 http://dso.2ch.net/yangon/ 関連スレなどは >>2-5 くらい >>138 なぁるほど。。。 ってことは、evalで引っかかっちゃってる(qr//でミスコンパイル)のかぁ。。。 でもって鯖によって5.6系と5.8系が混在しているのも何かありそうな。perlreでもよく読んでみよう。。。 既に忘れ去られている「関連ページ」。 随分前に、管理人の指示でread.cgiからはリンクが外され、 http://info.2ch.net/test/tb.cgi も既に消滅しているわけですが、 index.htmlには未だにリンクが残っていたりします。 通常鯖、bbsd鯖共に。 外しましょう外しましょうー。 FF11攻略情報 www.rmtfcne.com/f11 FF11攻略情報 www.rmtfcne.com/f11 "を"にエスケープするようになったのはhana=mogera導入された頃だった気がする どうするのがいいんですかね。 >>165-166 単に、1行の長さをもう少し許容するようにする、だけでいいものなのかどうか。 そもそも1行の長さを判定しない。 と言うのもあるかな♪ そもそも1行の長さを制限するのって何で? 改行するのは段落を変えるときだけのほうがいいと思う 1行に"aaaaaaaaaaaaaaaaaaaa...と "a"を4096文字並べることによって topページ見たときに、横幅が物凄く広くなる荒らし方が出来るし。 今の2chで出来るかはどうか知らんけど 画面幅に合わせて見る側のブラウザが改行するのが本来でしょ >>174 それも違うでしょ。 画面幅に合わせる事が絶対では無い。 CSSでの明示指定やブラウザ機能での明示設定ならまだしも、 そうでない場合に強制改行するのは全くの誤り。 >>158 ,164 bbsd でも変更しますた.で,とりあえず ex21 に反映しますた. 他に news21, news22, wwwww, live25, anime2 あたりにも入ってたかと思いますが, そのあたりのは一連のリフレッシュ作業により稼働中の板はなくなったようなので,省略. リフレッシュ後の鯖で入れた方が良さそうなのがあれば,改めて入れましょう,ってことで. live23b, live24b, snow あたりのはむむむさんにおながいします,ということで. あと " については,普通の本文中などにある限りはあえて " に 変換する必要もないんでしょうが,確認画面で input タグの中に入ると 問題があったので一律に変換するようになったんですよね.なので, 変換が必要なケース(input タグ中に入る場合とメール欄)と 不要なケースを峻別して,そのあたりの処理を見直すというのも 一つの方法かもですが...... >>176 snow のは root 権限なくても更新できるようになっているです。 移行の際にそうしますた。 といってもいま、落ちてますが、、、。(´・ω・`) >>177 なるほど,そうですたか.では snow のは復旧したらこちらでやっておきます. >>179 おつでした。 live23, live24 の bbsd 更新しました。 ・ qb5 で詰まる原因を探りやすくすべくログを取るようにする ・ いつぞやのように規制リスト配布がバグっても 500 エラーにならないようにする ・ >>176 の後半 あたりをやってみようかと...... &quot; ではなく &quot と書いても " に変換されてるみたいだけど正常なのかな? 全角 → 半角 quot → quot &quot → " &quot; → " dat 中(というか HTML ドキュメント中)の " が ブラウザでどう表示されるか,という話ならブラウザ依存でしょうね. で,とりあえず今のところログに残ってるのは [2007-12-17 16:26:18] &foxSetHost($GB) ; # ホストの判定: took 23s [2007-12-17 17:22:31] &foxSetHost($GB) ; # ホストの判定: took 22s [2007-12-17 18:32:17] &foxSetHost($GB) ; # ホストの判定: took 23s てな感じですが(DNS 問い合わせで詰まってる?), これはいつも qb5 で詰まる時のパターンなんですかね? ともあれ,bbs.cgi の実行時間が長くなった時に ログに記録する仕組みは動くことが確認できたので, さらにもうしばらく観察...... >>190 qb5 ですが、なんか、qb6 で動くものと動機しているっぽい気がしました。 アクセスログと見比べてみるといいかも。 >>191 なるほど.っていうか >>190 のログと 500 エラーのタイミングも一致してませんね. これは,bbs.cgi 実行に入る前の SpeedyCGI そのものの実行段階で詰まってるってことかな...... あと、ほとんどの場合は 500 エラーが出ても書けているんですよね、、、。 つまり、少なくとも dat に追記するところまでは処理が動いていると。 当てずっぽうで書きますが......現状で 512 になってる kern.maxusers を さらに増やしてみてはどうでしょう,とか...... >>194 資源系ですか。 何か、資源系で足りないものがあるような、というのには、 私も同意。 あくまで推測ですが,speedy <-> speedy_backend 間の通信(Unix ドメインソケット経由)が qb5 / qb6 の環境ではエラーになりやすいということかも知れないのではないかなぁ,と. SpeedyCGI のソースを見てみると ---------------------------------------------------------------------- http://speedycgi.cvs.sourceforge.net/speedycgi/2.x/src/speedy_frontend.c?view=markup 388 /* Create sockets in preparation for connect. This may take a while, 389 * esp on FreeBSD, when it's out of sockets. 390 */ 391 if (!sockets_open++) 392 speedy_ipc_connect_prepare(socks); http://speedycgi.cvs.sourceforge.net/speedycgi/2.x/src/speedy_ipc.c?view=markup 22 #ifdef ENOBUFS 23 # define NO_BUFSPC(e) ((e) == ENOBUFS || (e) == ENOMEM) 24 #else 25 # define NO_BUFSPC(e) ((e) == ENOMEM) 26 #endif 48 static int make_sock(void) { 49 int i, fd; 50 51 for (i = 0; i < 300; ++i) { 52 fd = socket(AF_UNIX, SOCK_STREAM, 0); 53 if (fd != -1) 54 return fd; 55 else if (NO_BUFSPC(errno)) { 56 sleep(1); 57 speedy_util_time_invalidate(); 58 } 59 else 60 break; 61 } 62 speedy_util_die("cannot create socket"); 63 return -1; 64 } 180 void speedy_ipc_connect_prepare(int socks[NUMFDS]) { 181 int i; 182 for (i = 0; i < NUMFDS; ++i) 183 socks[i] = make_sock(); 184 } ---------------------------------------------------------------------- FreeBSD では socket(AF_UNIX, SOCK_STREAM, 0) が ENOBUFS になりやすいということかも? そこで,ENOBUFS になりにくいようにするにはどうしたらいいか,というのがポイントかも知れないんじゃないかと...... あと,こんなのもあるようですが...... UNIX domain sockets MFC's http://unix.derkeiler.com/Mailing-Lists/FreeBSD/stable/2007-05/msg00206.html SpeedyCGI で speedy_backendを使わないoptionったないんでしたっけ? もしあったら少しの間それで援用してみるとか、 >>199-200 http://daemoninc.com/SpeedyCGI/ でそういうオプションは見あたりませんが, 普通の Perl スクリプトとして動かせばそういう形にはなるかもですね. >>201 >普通の Perl スクリプトとして動か すようにしてみました. @qb5 普通の Perl スクリプトにしてからは 500 エラーは出てないようですが,しかし...... bbs.cgi の実行時間が異常に長くなってたくさんたまってしまうことが相変わらずあるようで...... 今ログを取るようにしてるメインルーチンより前の段階で詰まってるってことかな? そっちでもログを取るようにしてみるか...... last pid: 80866; load averages: 0.08, 0.07, 0.02 up 63+17:39:52 06:41:07 18 processes: 1 running, 17 sleeping Mem: 519M Active, 1110M Inact, 210M Wired, 63M Cache, 112M Buf, 74M Free Swap: 4096M Total, 116K Used, 4096M Free USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND ch2qb5 80773 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80774 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80775 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80776 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80778 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80780 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80781 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80782 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80783 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80785 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80788 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80791 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80792 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80794 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) ch2qb5 80809 0.0 0.7 15700 14792 ?? I 6:39AM 0:00.28 /usr/bin/perl bbs.cgi (perl5.8.8) >>204 普通のPerlでも詰まりますか。 # 逆に、原因究明がやりやすいのかも。 再び SpeedyCGI モードに戻して様子見てみます...... どうにか,SpeedyCGI モードにしても 500 エラーにならないようにできたようです. さて,500 エラーになっていた原因ですが...... FreeBSD の Unix ドメインソケット問題とかではなく, なんと人為的な要因(POST データの送信に時間をかける DoS 攻撃により speedy_backend のスロットがふさがってしまっていた)だったようです. 実行時間のかかるルーチンのログをメインルーチンに入る前の段階で取るようにしたら, フォームデータ読込のところで時間がかかっていることから判明しました. で,それへの対策を取りました,ということで. まぁ,攻撃元等のログも取ってあるんですが(/var/tmp の下にあります), 海外串をランダムに使ってる感じですね...... あれどうやって対処すればいいんだろ 自分の掲示板も海外SPAMみたいなのでたまにやられてる cgiがなかなか終わってくれないんでレン鯖の同時実行数制限がかかって困るんだよな それは全発言統計システムの方のBBSではないかと bbs.cgiが止まったらここにも書けません 本当に止まってるなら鯖落ちスレがあんな少人数で済むわけがないだろ あそこのテンプレにこう書いてるだろ ◆鯖落ち報告者が少ない時は自分の環境を疑ってみましょう。 >>214 うちは海外ホストがCGI踏んだらdenyリストに追加する仕掛けにしてる うは、運用情報板でなんか詰まるなぁの件は攻撃だったのか・・・ 修正お疲れ様でした。 >>219 それくらいしないとだめみたいだね。毎分何回も叩かれたりするし 国内ISP以外弾くようなことも考えておくか それ以外の対策としては、どこかにタイムアウトの仕掛けでも入れるのかな >>213 海外串を禁止にするしかありませんね 今の現状では 変更部分の diff を縦読みしました。なるほど。 DoSというか、例の「たまにここにもスレ立ったりするやつ」 とかとも関係あるのかも。 # これからかいぎ。 参考のために、どんな対策をしたか簡単に教えてもらえませんか 詳細は、企業秘密じゃないかなと。>>225 企業じゃなくて個人サイトだけど。 普通に考えれば、 例えば指定されたデートの時間に3時間遅れてもけなげに待っていたのを、 1時間たったら「わたし…きらわれちゃったのね、ごめんなさい。さよなら」って言って、 なきながらその場を立ち去るとか、たぶんそんなことなんじゃないかなと。 いやいや 1時間たったら「おまえきらわれちゃったから、首吊って死ぬる!」って言って、 警備員のおじさんに追い出されるとか。 ひとりクビにしたくらいじゃ意味ないぜ 余剰人員がたくさんいる っ自宅警備員 一応今後のために...... Perl モジュールについてのドキュメントは perldoc で表示されます. 例えば,今回のように「LWP モジュールで POST するにはどうすればいいか?」なら perldoc LWP をコマンドラインから実行すればドキュメントが表示されて,その中に書いてあります. TATESUGI厳し杉 IP群を18ビットで丸めないで下位8ビットだけにしてくれよ 新規一転。 気分を変えて新しいブログ書く事にしました。 まあ つまらないブログでしょうが(笑) あ 不定期更新ですから あしからず。 http://webmastei.com/weeb Hi. Sorry for my english. Happy New Year!!!!! ?Good Luck! Hi. Sorry for my english. Happy New Year!!!!! ?Good Luck! age規制ってできない? 通常の利用で同一IPで多数のスレをageる事は無いから、 age荒らしが遊んでるだけだし。 時間内に同一IPからageリクエストがあってもage処理しないようにする。 cookieに前回ageた時刻を入れるのが簡単だけど、cookie偽造されるかな。 多数のスレをsageるのはいいの? スレッドフロート掲示板でageそのものを否定してるのかしらー ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる