X



トップページ運用情報
1001コメント347KB
bbs.cgi再開発プロジェクト 3
レス数が1000を超えています。これ以上書き込みはできません。
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/
0002( *´D`)ノン ◆.HNONOTaN.
垢版 |
04/02/13 19:09ID:IPF43aWj
                 ||||||
       |||||   ∠ ̄ ̄\ |
       ∋oノハヽo∈   〜|/´D`|/
        (´D` ) スタッ  / y⊂)
        / y(⌒ヽ\    U〉  ⌒l
        し( (__)し  /(__ノ ~U、、スタッ
00032chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆2CHTUBOC5A
垢版 |
04/02/13 19:11ID:o3jHs/Mb
>>2
ちゃらっちゃらっちゃ〜ん(AAりゃ
0005動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/13 19:46ID:unxz01R5
ん?開発してるの?どこまで進んでるの?情報キボン
0009仕事人 ★
垢版 |
04/02/14 16:53ID:???
>>8 ということですが、
先のことはどうなるかわかりませんが

現在検討している
oyster902@pie に入れるという選択肢はありませんか?
0010root ★
垢版 |
04/02/14 16:55ID:???
>>9
とってもありえまーす。問題ないかと。
今の901と同じように、/29 のIPアドレスブロック(つまり、IPアドレス5つ)が使えてほしいです。
0012root ★
垢版 |
04/02/14 16:56ID:???
ということで、902はひとつ機能が増えたですね。
過去ログ用ストレージと、2ちゃんねる用のDNSサブシステム。

よいと思います。
902の構成、決めなきゃ。
0014root ★
垢版 |
04/02/14 16:58ID:???
>>11
mmm1.2ch.net (wolf07, 2ちゃんねる用DNSサーバ、Xeon 2.4GHz dual)
  cache1.2ch.net
    2ちゃんねる用DNSキャッシュサーバ
  cache1.bbspink.com
    PINKちゃんねる用DNSキャッシュサーバ(予定)(しない可能性大)
  dns1.2ch.net
    2ちゃんねる用DNSコンテンツサーバ
  a.ns.uma.2ch.net
    uma.2ch.netドメイン用DNSコンテンツサーバ(dns1.2ch.netと同一IP)
  b.ns.peko.2ch.net
    peko.2ch.netドメイン用DNSコンテンツサーバ(dns1.2ch.netと同一IP)
  dns1.bbspink.com
    PINKちゃんねる用DNSコンテンツサーバ
  a.ns.ama.bbspink.com
    ama.bbspink.comドメイン用DNSコンテンツサーバ(dns1.bbspink.comと同一IP)
0015仕事人 ★
垢版 |
04/02/14 16:58ID:???
ぁぁ、

りょうかいりょうかい。
0016root ★
垢版 |
04/02/14 16:59ID:???
>>13
そいつらは、oyster176にいますですよ。別マシンです。

oyster176.uma.2ch.net (root権限ありサーバ)
  bbq.2ch.net
    串折り用/広告規制用システム
    串折りシステム IPアドレス指定用DNS: 管理ドメイン名: niku.2ch.net
  bbq2.2ch.net
    串折り用サーバ ドメイン名指定用DNS: 管理ドメイン名: sumi.2ch.net
  bbq3.2ch.net
    広告規制用サーバ IPアドレス指定用DNS: 管理ドメイン名: bbx.2ch.net
  bbq4.2ch.net
    新規スレッド関連 統計情報取得用DNS: bby.2ch.net
  rock54.2ch.net
    Rock54システムの基地
0017仕事人 ★
垢版 |
04/02/14 17:00ID:???
ほっておけば /29 だとおもいまーす < oyster902

0018root ★
垢版 |
04/02/14 17:01ID:???
了解です。米国のISPは太っ腹でいいすね。< IPアドレス
0020 ◆/yjFd7fSrw
垢版 |
04/02/14 17:18ID:G1QzwOsZ
BをPIEに置くとなると
he→PIE間のネットワークの遅延が気になるところですが、どれくらいですかね?
ついでに、今Aを引きに行っているlive8にも影響がありそうな感じですが
0021root ★
垢版 |
04/02/14 17:22ID:???
oyster901% traceroute oyster176.uma.2ch.net
traceroute to oyster176.uma.2ch.net (64.62.236.130), 64 hops max, 52 byte packet
s
1 38.114.137.193 (38.114.137.193) 0.721 ms 0.498 ms 0.662 ms
2 g1-ba21.b003122-0.sfo01.atlas.cogentco.com (38.112.11.73) 0.818 ms 0.801 ms 0.824 ms
3 g0-4.core01.sfo01.atlas.cogentco.com (66.28.64.161) 0.968 ms 0.859 ms 0.842 ms
4 p15-0.core02.sfo01.atlas.cogentco.com (66.28.4.70) 0.819 ms 0.841 ms 0.706 ms
5 p6-0.core03.sfo01.atlas.cogentco.com (66.28.4.150) 0.603 ms 0.545 ms 0.550 ms
6 paix.he.net (198.32.176.20) 77.234 ms 77.274 ms 77.185 ms
7 64.71.129.86 (64.71.129.86) 77.845 ms 77.956 ms 77.869 ms
8 rock54.2ch.net (64.62.236.130) 101.190 ms 100.155 ms 100.358 ms

いまAをひきにいっているlive8的には、当然、好都合かと。
0022仕事人 ★
垢版 |
04/02/14 17:24ID:???
oysters@he の A は wolf07 で
oysters@pie の A は oyster902

って考えていいんですよね?
0023root ★
垢版 |
04/02/14 17:34ID:???
>>22
そのへんは、DNS(キャッシュ)サーバがよきにはからってくれますです。
ネットワーク的に近いものほど、優先的にアクセスする。
0024仕事人 ★
垢版 |
04/02/14 17:36ID:???
( ・∀・)つ〃∩ヘェーヘェーヘェー

DNS っすごいんですね、
さすが Donbei Nissin Sio
0025 ◆/yjFd7fSrw
垢版 |
04/02/14 17:38ID:G1QzwOsZ
正式にはDomain Name Systemで(ry
過去ログサーバー自体はI/Oとトラフィックぐらいしか使わないので
DNSの副業をさせるには最適かと
0026動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/15 01:39ID:2DuG7asz
cgiのソースって公開されてますか?
されてないのならいろんな人の脳みそをただで使っちゃおう作戦で
一連の動作とか仕様とか伝えるためにも
IDのやばい部分とか以外は公開してみたらうどんでしょ?('-')
0028動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/15 09:39ID:mog12nGi
>>12
今度は確実にopteron244にしませうw

>>27
開発に協力してくれるのであれば
秘密保持契約結んて開示という手はあるかと思われ。
# 対価を取るかどうかは別問題として考えています。
0030歌唄いメセナ♪ ◆OHQ5SO6eaI
垢版 |
04/02/15 15:59ID:v7AATHjg
>27
read.cgiのperlで書かれたソースがほしぃ

規制関係で・・・

#板名 規制するホスト名(正規表現) コメントの順番 *板名に"all"と書けば全板規制

all infoweb.ne.jp 広告無差別爆撃
qb3 plala.or.jp AA荒らし
の内容のファイルを配布すれば板ごとに規制できるはず
0032▲ 某ソレ511
垢版 |
04/02/15 18:05ID:ubnG3BIh
それはsamba24のために管理してるフォルダに、
いくつIPが保存されてるかの値が記録されてるのね。
だから、ほんとは1時間ごとにクリアされるのが正しいの。
で、samba24のクリア機構にエラーがあったら数字が増え続けるわけ。
0034 ◆YKYLIME5Kg
垢版 |
04/02/15 18:17ID:Zqoq2YUD
( ・∀・)つ〃∩ ヘェーヘェーヘェー
0035動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/15 20:35ID:ryrlMuSB
bbs.cgiってこんな感じ?
bbs.cgi
├初期処理
├IP Address/ホスト名に依存する処理
├書き込み内容に依存する処理
└書き込み処理
0037仕事人 ★
垢版 |
04/02/15 23:21ID:???
bbs.cgi
├IP Address/ホスト名に依存する処理
├初期処理
├書き込み内容に依存する処理
├IP Address/ホスト名に依存する処理
├書き込み内容に依存する処理
├書き込み内容に依存する処理
├IP Address/ホスト名に依存する処理
├書き込み内容に依存する処理
├書き込み内容に依存する処理
├IP Address/ホスト名に依存する処理
├書き込み内容に依存する処理
├初期処理
├書き込み内容に依存する処理
├IP Address/ホスト名に依存する処理
├書き込み内容に依存する処理
├IP Address/ホスト名に依存する処理
├書き込み内容に依存する処理
├IP Address/ホスト名に依存する処理
└書き込み処理

簡単に書くと、こんな感じかな
00392chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆2CHTUBOC5A
垢版 |
04/02/16 00:03ID:xhMVzQKy
>>37
少しはまとめなよ、、、
0040マァヴ ◆jxAYUMI09s @マァヴ ★
垢版 |
04/02/16 00:06ID:???
しかも>37の各処理で8番目と15番目は二つ組みでひとつの処理を・・・・(^_^;)っつー感じなんだよな
0041▲ 某ソレ511
垢版 |
04/02/16 00:07ID:uCfv1eT9
>>37
さすが何十人もの手で作られた
インスタントラーメンのようなものだな。
0044root ★
垢版 |
04/02/16 00:54ID:???
>>40
うーむ、昔ひ(りゃ がperlccしてだめだったわけだ、、、。
ひょっとしてoyster901でperlccが通ったのって、奇跡に近い?
0047▲ 某ソレ511
垢版 |
04/02/16 00:59ID:uCfv1eT9
2ちゃんねるの9割は奇跡でできてます。
0048仕事人 ★
垢版 |
04/02/16 01:00ID:???
残りの一割は
ま・さ・か・・・・


いわゆる「おいらのギャグ」?
00502chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆2CHTUBOC5A
垢版 |
04/02/16 01:17ID:xhMVzQKy
>>48
0052root ★
垢版 |
04/02/16 01:28ID:???
>>45
同じPerl 5.6.1なのに、news8では通りませんね。
本当に奇跡かも。

cc -DAPPLLIB_EXP="/usr/local/lib/perl5/5.6.1/BSDPAN" -fno-strict-aliasing -I/usr/local/include -O -pipe -I/usr/local/lib/perl5/5.6.1/mach/CORE /usr/local/lib/p
erl5/5.6.1/mach/auto/IO/IO.so /usr/local/lib/perl5/5.6.1/mach/auto/Fcntl/Fcntl.so -o ../../bbs.cgi bbs.pl.c -Wl,-E -L/usr/local/lib -L/usr/local/lib/perl5/5.6.1/mach/CORE -lperl -lm -lc -lcrypt -lutil
/tmp/cc2iTuIB.o: In function `xs_init':
/tmp/cc2iTuIB.o(.text+0x5927): undefined reference to `boot_DynaLoader'
ERROR: In compiling code for bbs.pl.c !
0053root ★
垢版 |
04/02/16 01:30ID:???
gccのバージョンが違うせいかもね。

こうして、偶然と奇跡のめぐり合わせで、今日も回っているわけだ。
0054仕事人 ★
垢版 |
04/02/16 01:32ID:???
んだ んだ

だから触れないところが在る訳だ。
00562chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆2CHTUBOC5A
垢版 |
04/02/16 01:37ID:xhMVzQKy
な、なんだ(ry
0058root ★
垢版 |
04/02/16 01:43ID:???
ちょっと風邪薬を配合したら、make通っちゃった。どうする?

%ls -l bbs.cgi
-rwxr-xr-x 1 service service 806530 Feb 15 08:41 bbs.cgi
%file bbs.cgi
bbs.cgi: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 4.9, dynamically linked (uses shared libs), not stripped
0060root ★
垢版 |
04/02/16 01:46ID:???
時間がとれたら、新oysterと旧oysterでもやってみよっかな。
今日はちょっと無理だけどね。

まぁ、奇跡があと2回ぐらい起こってもいいかなと。
0063root ★
垢版 |
04/02/16 01:54ID:???
まぁ、桃色方面ででも試せるかなと。

>>61
DynaLoader.a の位置を探し出して、直接くべたのですよ。
とりあえずいんちきバイナリを作る時のテクとしては、定番かと。
このへんは昔とった(りゃ。
0072動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/17 04:58ID:k6b32fPR
yahoo串なんですけどね
すぐ規制されちゃいますよね、で規制される前に使おうと思ったら「スレッド立てすぎです」
先にこの串で立てられたっぽくないんですけどね
0075仕事人 ★
垢版 |
04/02/18 17:18ID:???
後は。。。

携帯&●のスレ立て規制の兼ね合いですなぁ
規制の種を携帯固有番号or●固有文字列にすればいいんだが

また解読の日々か・・・
0080動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/19 12:09ID:6uR1qJHV
っていうか、●の規制抜けの穴埋めは一番最後でいいじゃん・・・
何なら埋めなくても、●で荒らせば●剥奪なんだし。
0081
垢版 |
04/02/19 23:53ID:I8XCxW0P
過去ログが読めるだけなら、●の更新しませんわ……。

保証されてないとは言え、現状でスレッドが立てられるから、
●購入した一人です。
0084鳥取恥丘 ◆Dream/3P/.
垢版 |
04/02/24 15:07ID:PtfxF+tK
●買った瞬間に2chつぶれたりしませんよね?

それが怖くて買えない17の夏
0086 ◆LBZUBURIYM
垢版 |
04/02/24 22:42ID:lM393Id+
1000ストッパー素突破対策はこのスレと見たがどうか。
0092動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 00:00ID:ckGpaSOf
qmail-localのパクリアイデアの続き。

/queue以下
/スレ番号
/スレ番号/cur
/スレ番号/new
/スレ番号/tmp

・投稿用bbs.cgiはtmpにひたすら書く。tai64time.pid.とか重複しないようなファイル名で
 書き込みに失敗したらcurをみて1000から始まるファイルがないかどうかチェック。なかったらウェイトしてはじめに戻る。
・tmpに書き込めたらnewにハードリンクしてtmpをunlinkする(投稿成功)
・dat追記デーモンはnewからひたすらcurに追記する。その際に0000から1000までの番号をファイル名の頭に追加する
 curに追加したファイル名でハードリンクして成功したらcurをunlinkする。
 999を追記した段階でtmpをreadonlyにchmodする。1000を書く
・dat書き出しデーモンがcur以下をcatして*.datとして出力。
・あぼーんするときはcur以下の数字を消してdat書き出しデーモンを呼び出す。

※もし出来るならqueueをファイルシステムじゃなくてMySQlとかにするほうが性能がいいかもしれない
0093動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 00:04ID:ckGpaSOf
curをcatする方法だと、スレ番号/l50とかスレ番号/1-100とかも別途書き出すのが楽。
まぁ*.datを直接読んでくれる専用ブラウザには関係ない話だけど。
IE対策にはなりそげ。
0094動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 00:07ID:fQT1CoFa
読み出す側で1001以上出力しないようにして、
レス数1000超えてたら自動的に1001のレスを付加してやったらええんでないの?
見た目1001超えなければ、書き込みも減る=妙な鯖負荷も減るだろうし。
で、状況見て書き込み側を改良していけばいいような。
0097/ノ、゚ ヮ゚ノ、,ヽ ◆HEHARUKAoo
垢版 |
04/02/25 00:43ID:jxRad/Uw
「絶対に上がらないスレ」ってできませんかね?
bbs.cgiで>>1のメール欄を見て「sagesage」だったら
書き込みのメール欄の先頭に「sage」を追加する、とか。
重くなるだけで利用価値ないかな。
0098▲ 某ソレ511
垢版 |
04/02/25 00:43ID:saa3Iepe
それに何の意味があるのか分からない。
0100▲ 某ソレ511
垢版 |
04/02/25 00:49ID:saa3Iepe
ていうか、そんなことを2ちゃんねるでやる必要性が感じられないな。
sageだかageだか知らないけど、2ちゃんねるはスレッドフロート式なんだから、
0102▲ 某ソレ511
垢版 |
04/02/25 00:58ID:saa3Iepe
sage進行信仰に対する一つの答えを出すことに意味があるのですか?
0103/ノ、゚ ヮ゚ノ、,ヽ ◆HEHARUKAoo
垢版 |
04/02/25 01:00ID:jxRad/Uw
さあ?意味なんて考えてもみませんでした。
やったら、できたら、そうなったら面白さの幅が広がるかな、と思っただけですよ。
0104▲ 某ソレ511
垢版 |
04/02/25 01:03ID:saa3Iepe
それがおもしろそうな機能には見えなかったんでね。
わざわざcgiを改造してまで追加する価値があるような
おもしろい機能とは思えないですよ。ageらないスレなんて。
0106▲ 某ソレ511
垢版 |
04/02/25 01:08ID:saa3Iepe
ただ、おもしろいかどうかは個人の主観なので、
おれは全然おもしろくない機能だと思うのですが、
ひろゆきがおもしろいと思えばありだとは思うんですけどね。
あと、sageっぱなしだと他の人が入ってこないのでどうしても馴れ合いが
進んでしまう、と考えられる点もマイナスポイントかも。
0107/ノ、゚ ヮ゚ノ、,ヽ ◆HEHARUKAoo
垢版 |
04/02/25 01:15ID:jxRad/Uw
ああ、馴れ合いの問題はありますね。

適用してみたいと思ったのは次のようなスレです。
・+系板の雑談スレ
・AA系の板のスレ
・自己紹介板のスレ
・bbspinkの一部スレ
・ネタスレ

ひ(ryは面白がらないっぽいなあ。
なんかそんな気がしてきますた。
0109動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 01:46ID:snkhENhU
1.スレッド立てる人はスレが荒れてほしくないと思い強制sage進行スレに指定
2.70%のスレが強制sage進行スレとなる
3.スレはだいたい立てた順番にならぶ
4.sageの価値そのものが低くなる

こうなっちゃうんじゃない?
0110動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 02:53ID:q+SvPxKC
むかしむかし、スレタイに「(10000)」と入れると上げられないスレにできたけど
「バグ」として修正されたことを考えると望み薄では
0112動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 21:53ID:6mZyPruH
一応こちらで。

2chの動作報告はここで。 パート10
http://qb3.2ch.net/test/read.cgi/operate/1076174286/528
528 :FOX ★:04/02/25 21:44 ID:???
問題は処理の順番というか・・・
1) bbs.cgi の中盤で dat に追記
2) bbs.cgi の後半で subject.txt を書き換え
3) この時 dat 内のレス数カウント
4) ついでに 1,000 超え判定 → 1,001 書き込んでパーミッション変更
5) しかし既にこのときには次のbbs.cgiが目前までせまっているらしい。

1)の前に3)4)を入れられないのかと。
それだけでover 1000の書き込みははねられ、
それだけDisk I/Oの負荷が減ると思われ。

何でこんな処理になっていたんでしょ。
理由が知りたい。
0114動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:06ID:6mZyPruH
>>112
529 :FOX ★:04/02/25 21:47 ID:???
dat のopen , close で行くと、

1) 512 超え判定、超えていたらDispError();
2) 追記のために open -> write -> close
3) subject.txt 書き換えのために res数取得 open -> read -> close
4) 超えていたら 1,001 書き込み open -> write -> close ->chmod

これなら、
open(+<);# 読み書き(追記用)両用フラグを与える
write;
read;
if(over 1000){ white; close; chmod};
else close;
endif;

とすればopenの手間は一発(=1/3)ですむ。
0116サザン ★
垢版 |
04/02/25 22:10ID:???
4) のところで、

A) 999以上で書き込めるの?
B) んじゃdatに1000ストッパー追記しよう
C) んでもって、パーミッション切っちゃおう
D) おしまい

となってます。

B) に詰まっちゃって、A) をすり抜けてきちゃうのがたくさんできる予感。
0117仕事人 ★
垢版 |
04/02/25 22:11ID:???
>>114

まさしく dat 追記する瞬間だけど

open(OUT, ">>$DATAFILE");
print OUT "$outdat\n";
close(OUT);


ここで dat 数を数えて DispError() するってこと?

そのあとで subject.txt を書き換えるときに
また dat数数えるってこと ?
0118サザン ★
垢版 |
04/02/25 22:12ID:???
>>116
あ、A) は

A) 1000以上で書き込めるの?

だ。
0119▲ 某ソレ511
垢版 |
04/02/25 22:12ID:XARNcXSJ
でも、実際の1000大幅超えスレでは、1000ストッパーが何回も書き込まれているのに
その後から書き込みしたレスも書き込めちゃってるんだよね。
だから、Bに詰まっちゃってるのはないんじゃないかな。。
0120サザン ★
垢版 |
04/02/25 22:15ID:???
>>119
datへの書き込み後に1000越え判定するんで、有り得ないこともないですね、
0121仕事人 ★
垢版 |
04/02/25 22:15ID:???
512kB 超えの判定は bbs.cgi のかなり序盤
ここだとうまく行くから ここで dat数も数える?
んで数を保持しておいて、、、

後半の subject.txt 書き換え部分でその数使う?
すでにずれている予感もするのだが、、

ピーク時 bbs.cgi は 20回/sec くらい呼ばれているぞ
それも同じ subject.txt に対して
0122動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:18ID:HY3kIJLP
>>117
こういうことでは?

open(OUT, $DATAFILE, "a+");
print OUT "$outdat\n";
@logdat = <OUT>;
if (scalar @logdat > 999) {
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
} else {
close(OUT);
}
0126動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:32ID:6mZyPruH
そういえばbbs.cgiのcputimeってどのくらいです?

それ如何によってはある程度のdat(レス)数(の意でいいのだろうか)で
filelockかけるっていうことも視野に入れてもいいかなと。
まちがいなく1000近くになれば重たくなりますが、
over 1000の膨大なdisk I/Oでリソースを食うよりはましかと。

# peko級でcputimeが50ms程度でおさまっていればいいのですが・・・。
0127動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:42ID:HY3kIJLP
前にも書いたけど、1000レス制限は本当に必要なんだろうか……。
サイズ制限だけでも間に合うんじゃないだろうか……。
0128動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 22:58ID:1YZTD+xC
>>127
いつ書き込みできなるのか分からないし、
次スレを作るタイミングも分からないし、
とにかくユーザにとって使いづらいというかイライラすることは間違いない。
0129動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 23:05ID:HY3kIJLP
>>128
いつ書き込みできなくなるかについては、レス数のかわりにスレサイズを見るようになり、それがあたりまえになるんでは?
AA系なんかだと「450K超えたからそろそろ次スレ」なんてのはあたりまえだし。
0130動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 23:20ID:ZuAN1eHT
レス番号は左に確実に表示されているからどんなバカでも一目瞭然だけど。
datサイズは分からない人がたくさんいる。
0131動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 23:24ID:HY3kIJLP
はて。「サイズがxxxKBを超えています。512KBを超えると表示できなくなるよ。 」というメッセージは大きく表示されるけど。
0133動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/25 23:46ID:ZuAN1eHT
だから1レスごとに「133 : xxxkb/512kb:動け動けウゴウゴ2ちゃんねる 」
とか表示されていればアホでも理解できるだろうけど。
そうでなければ不親切極まりない。

というかユーザー無視のプログラマ親切なダメ設計だと思う。
0137動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/26 00:09ID:86AS2b63
read.cgiは
「1000を超えると書き込めないよ」と同じように
「512Kを超えると書き込めないよ」と警告が出るし

「レス番号が表示される」のと同じように
「サイズが表示される」もんね。

ただ、その事(>>133が知らない)と1000レス制限は撤廃してよいか、ってのは
別の話だとは思うけどね。
0139root ★
垢版 |
04/02/26 00:33ID:???
さて、やっとここに書く時間がとれた。

chmod()を使うからいけないんだと思うですよ。
fchmod()を使って、アトミックにすべきかと。

6.10. 競合状態を避ける
http://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/avoid-race.html
より引用。

他の例として、ファイルのメタ情報をいろいろ操作する作業を行う場合(オーナーの変更、
ファイルの状態確認、パーミッションビットの変更等)、まずファイルを開いて、開いたファイルに
対して操作してください。つまりこれは、chown()や chgrp()、chmod()のようなファイル名を
受けとる関数ではなく、fchown()や fstat()、fchmod()システムコールを使うことを意味して
います。こうすることで、プログラムが動作している間にファイルの置き換わりを防げます
(おそらく競合状態も)。たとえば、あるファイルを閉じてから、chmod()を使ってパーミッションを
変更すると、攻撃者はその 2 ステップ間にそのファイルを移動もしくは削除し、別のファイルに
対してシンボリックリンクを張ってしまえるかもしれません(たとえば、 /etc/passwd に対して)。
0140root ★
垢版 |
04/02/26 00:42ID:???
つまり、ロックじゃなくてrename()を使うというのと、意味合いは同じです。
(rename()はアトミックだから)

というわけで今の処理、
http://qb3.2ch.net/test/read.cgi/operate/1076174286/490 の、
490 名前:FOX ★[] 投稿日:04/02/24 22:13 ID:???
bbs.cgi のもっとも後半部分にこんなのがあるですよ。

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++;

を、

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

にすればいいんではないかなと。

# Perlよくしらないから、0555とOVERの順番は逆かも。
つかCのchmod()と引数の順番反対な気が。< Perl
0142root ★
垢版 |
04/02/26 00:50ID:???
うん。それも一理ある。>>141
visudoとかcrontab -eとか、いろんなところに使われているですね。
こういう新機軸のかずかずを最初に実装した4BSDは、
いろんな意味で偉大だったと再認識するわけで。

ただ、こういうのって、負荷が超高くなるとか、きびしー条件じゃないと、
なかなか不具合が露見しにくいとこだから、いい実験なのかもしれんですね。< live8
0146動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/26 06:13ID:sDGfENPy
flock って、ここだけでも使っちゃダメ?

#ログのカキコ数を取得
$lognum = @logdat;
if(-w $dattemp && $lognum > 999){
open(OVER, ">>$dattemp");
flock(OVER,2);
seek(OVER,0,2);
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
chmod(0555, $dattemp);
close(OVER);
$lognum++;
0148root ★
垢版 |
04/02/26 15:41ID:???
fchmod()って、ひょっとして標準のPerlにはついてないのかしら。
0150root ★
垢版 |
04/02/26 17:38ID:???
とりあえず、状況を管理人に通報しておきましたです。
原因も明確なので、あとは様子見しか正直やることがないかと。
0151root ★
垢版 |
04/02/26 17:39ID:???
おぉ、>>150 はごばーく。無視してくださいです。
0152root ★
垢版 |
04/02/26 21:48ID:???
以下のプログラムで、ちょっとテスト。いちおう動いた。
でも、ちょっと強引。

で、h2phしてsyscall.phを作っておく必要ありの模様。
これ入れれば、ほぼ間違いなく3000とか4000いくのはなくなると思われ。

うまく動くようなら、麻原判決の前に、live8でテストしてみるか。

#! /usr/local/bin/perl
#
# fchmod test via syscall
#

# may be needed 'h2ph'
require 'syscall.ph';

open(TTT,"A");
syscall(&SYS_fchmod, fileno(TTT), 0555);
close(TTT);

exit;
0154root ★
垢版 |
04/02/26 22:08ID:???
あとは、rename()の助けを借りて、コピーして元datの複製を作っといて、
複製をchmod()してrename()するぐらいかなぁ。
でも、こんなことすると効率悪い気がするなぁ。

if (まだ書き込める) {
元ファイルの複製を作る;
chmod(555,複製);
rename(複製, 元ファイル);
}
0155root ★
垢版 |
04/02/26 22:28ID:???
>>154はいかにも筋悪だなぁ。
複製を作っている間に、どんどん書き込まれる予感。

やっぱ、>>152 しかない気がする。

で、いちおう、make(perlcc)は通った模様。
ひ(りゃ的にOKなら、ちょっとやってみっか。

# なんだか、びんぼーくじを引いてるような気もする、する。
0156サザン ★
垢版 |
04/02/26 22:29ID:???
そしてずるずる引き込まれていくというのは内緒です。
0158未承諾広告※ ◆aiY4htt2.2
垢版 |
04/02/26 22:30ID:8HiAq5jU
sysopen はダメなのかな?
sysopen FH, $filename, O_RDONLY, 0555 or die;
みたいな。。。

♪open Systemcall がよく判ってなかったりして(汗)
0159root ★
垢版 |
04/02/26 22:32ID:???
私としては、こーゆーのはぜひとも次世代を担う若者にやってほしいわけですよ、よ、よ。やっぱ。
0160▲ 某ソレ511
垢版 |
04/02/26 22:32ID:VH9VksUc
わたしがperlの文法を覚えたのは
旧実験室のやつがきっかけだというのは、ないしょです。
0161root ★
垢版 |
04/02/26 22:33ID:???
>>158
sysopen使うなら、syscall使うのと50歩100歩かも。
つか、プログラマじゃない人にPerlをいじらしたらいけません(素)。
0162サザン ★
垢版 |
04/02/26 22:38ID:???
おじさんはダメだよ、おじさんは。

あれですね、一回 bbs.cgi を整理しないといけないのかも。
継ぎ足し継ぎ足しでやってますからねー、

処理を変えずにうまいこと順番を変えていく。
色々試してみる。
いつかは Best Choice が見つかるかも。
(見つからないかも)
0163root ★
垢版 |
04/02/26 22:41ID:???
>>162 には、激しく同意。同意だが、、、。

どなたか、柱になってすすめていただける人がいれば、
ちょっぴり支えるぐらいはできるかも。
細い杖だけどね。

わたしゃ、お守り関係で正直もうお腹いっぱい、PIEおっぱい。
0165root ★
垢版 |
04/02/26 22:43ID:???
早速1000超えかぁ。
0167サザン ★
垢版 |
04/02/26 22:44ID:???
>>163
(;´Д`)

ちょっとやってみよう。
とりあえず、現在の大まかな処理を書いてみよう。
0169root ★
垢版 |
04/02/26 22:47ID:???
今なんとなくぼーと観察してたけど、
なんだか、何らかのシステム資源が足りなくなった瞬間にこの現象が始まる気がする。

つまり、fchmodにしても解決しない問題なのかも。かも。
0170root ★
垢版 |
04/02/26 22:49ID:???
で、ある速度を超えると、どうも資源が足りなくなってるような。
今回のだと、なんだか「セックルキター」ってのがどばどばっと書かれて、
該当datの読み込み数が50回/secを超えたあたりか。
0171root ★
垢版 |
04/02/26 22:50ID:???
で、いったんこの状態になると、軽くなるまではずっとこの状態が続くように思えるんで、
やっぱ、資源が足りない系な気がするなぁ。

でも、syslogにはそれっぽいの、出てないんだよなぁ。
0172root ★
垢版 |
04/02/26 22:55ID:???
うぅ、様子見ようと思ったら1869でとまっちゃった。
0173サザン ★
垢版 |
04/02/26 23:03ID:???
1) お茶でも飲みましょう
2) 串なホストを弾く
3) ブラ変
4) Cookieなかったら食え
5) 広告開いておく
6) 入力変数成型
7) ホスト取得(携帯は端末ID)
8) 512KB越え or datが書き込めないならエラー
9) Cookie設定
10) ●とかトリップとかキャップとか
11) ブラウザ変ですよん
12) 入力変数のCheck
13) PROXY制限(BBX Rock54 Samba24)
14) スレ立て制限
15) もうちょっと落ち着いて書きこみしてください
16) ID生成 and dat書き込み
17) subject.txt更新 and 1000越え判定
18) HTML出力
19) ふう、疲れた
0175▲ 某ソレ511
垢版 |
04/02/26 23:08ID:VH9VksUc
>>173
13)のSamba24は連投規制ですよね?
timecount/timecloseもないので、この2つで一体化すると良いと思います。
0176▲ 某ソレ511
垢版 |
04/02/26 23:11ID:VH9VksUc
あ、現在の処理か、、
512KB処理と1000超え判定がかなり場所的に離れてますね、、
0179 ◆/yjFd7fSrw
垢版 |
04/02/26 23:15ID:AVsTg3wv
ホスト取得というのは、書き込んだ時用の記録だと思います
串を弾くのは単純にREMOTE_ADDRだったり、REMOTE_HOSTを使えばいい話ですし
0180未承諾広告※ ◆aiY4htt2.2
垢版 |
04/02/26 23:21ID:8HiAq5jU
をーなんだか愉しそうな香りが(嬉嬉嬉)@bbs.cgi 大改竄計画
173 を検証してみて不要なものとか重複しているところとか 80kg 超えているところとかを検討するとよさそうですね。

でもゆっくりとした時間が取れないので鬱(泪)
0181未承諾広告※ ◆aiY4htt2.2
垢版 |
04/02/26 23:23ID:8HiAq5jU
で、16 以降は単一プロセスでやらせたいなぁ。。。
bbs.cgi が受け持つのは 15 までにする。
0183動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/26 23:32ID:bAtNc1SG
書き込まれた内容を処理する前に、
書き込めるかどうかのチェックを、できる限り
済ませておく方向に、できないだろうか…
書き込めなかったら成型処理しても無駄な訳だし…
0184動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/26 23:33ID:BOeTvm33
8)は15)の後に移動するとともに処理直前でsubject.txtをロックしてから
判定と書き込みを行いオーバーしたか18)が終わったらロック解除。

ほとんどオンメモリ状態なはずなので実際の処理は1msかかってないと思うんですよ。
ならばsubject.txtやdatの書き込みとHTML生成はシーケンシャルでもよいかななんてね。
OSのファイルキャッシュがまともに働いていれば、という前提付きですが。
0185GlobalService ★
垢版 |
04/02/27 00:02ID:???
>181
16以降の
ファイル書き込みは(TCP経由で)常駐プログラムだけがやるとか?
0186未承諾広告※ ◆aiY4htt2.2
垢版 |
04/02/27 00:12ID:+BHxFRk6
>>185
そんな感じです。
整形された line の先頭に、"bbs<>key<>" を付けて、tai64 形式のファイル名を付けて、特定のディレクトリに投げるの。
でもって、書き込みやさんはその特定のディレクトリだけを監視して(1秒おきにとか)、
何かしらファイルが放り込まれたら書き込みの操作を 1 人でやるの。
svc にさせてもよいかなぁ。
0188動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/27 00:17ID:8MdyPMsN
>>186
書き込み屋さんは非同期で動くんですか?
bbs.cgiがレスポンスを返すのはHTMLの生成が終わった後でなければマズい気がするんですが……。
0189GlobalService ★
垢版 |
04/02/27 00:30ID:???
>186
ファイルに書き出すのはやめた方がいいと思う

極端な話SQL鯖のような感じにリアルタイムで返って来るようにする

リアルタイムで返って来ないと・・・
書き込んだ内容が反映されてない -> なんらかの規制になってると判断する可能性有
2chブラウザのかちゅ〜しゃに至っては書き込み後自動的にdat読み込む
0190動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/27 00:38ID:/G/Nn469
>>188
まずいっけ?
もし生成が溜まっていても、bbs.cgiがチェックしていればよさそうだけど。

>>189
書き出しはDBIにしておけば、MySQLでもDBI::Fileでも任意のドライバに変えるのは簡単。
今まではfileオープンしてそこに追記していたんだから。
tai64で1つごとにファイル書き込みしたとしても次元が違うぐらい速度が上がると思うけど。
0191GlobalService ★
垢版 |
04/02/27 00:50ID:???
案1
「bby -- スレッド情報一元管理システム」と同じDNS使用
dnsに板とキーを投げる
dnsは板・キー・レスカウントを保持
通常は127.0.0.1を返し
レス数1000になったら127.0.0.2を返す

案2
レス数管理にSQL鯖使用

>190
>書き出しはDBIにしておけば、MySQLでもDBI::Fileでも任意のドライバに変えるのは簡単。
2つのプログラム(2重起動含む)から1つのファイルを使って大丈夫なのか?
0192動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/27 02:59ID:/G/Nn469
DNSはキャッシュされるのでそういう用途には向いていないと思います。

>2つのプログラム(2重起動含む)から1つのファイルを使って大丈夫なのか?
そういう泥臭いことを引き受けてくれるのがDBIです。
パフォーマンスを考えるとSQLデータベースになりますが、それはまぁ後々の話として。
インターフェースさえDBIにしておけば後でいくらでも入れ替えられます。

http://module.jp/works.html
のPerlによるハイパフォーマンスWebアプリケーションの開発を参考に
0195GlobalService ★
垢版 |
04/02/27 10:28ID:???
>192
http://member.nifty.ne.jp/hippo2000/perltips/DBD/file.htm
>このモジュールは内部で flock() を使っています。
2つのプロセスから同時に使えない気がするけど

*dat書き込みプロセスがtxt経由するファイル使用中にbbs.cgiプロセスが書き込めないのはダメだぞ

bbs.cgiプロセスとdat書き込みプロセスはtxt経由ではなくTCP経由ってこと?
0196 ◆garnetGnNk
垢版 |
04/02/27 10:48ID:5SP01m4Q
突貫工事で一番簡単な方法。

#DATを書き込む前に
open(FILE, '>> ../$FORM{'bbs'}/dat/$FORM{'key'}.idx');
print FILE '1';
close(FILE);

# レス数取得
$res = -s '../$FORM{'bbs'}/dat/$FORM{'key'}.idx';

# DAT書き込み
open(FILE, '>> ../$FORM{'bbs'}/dat/$FORM{'key'}.dat');
print FILE ""; #適当に
if ($res >= 1000) { #レスが1000超えてるときは1000ストップ
print(FILE "1000 over ...");
close(FILE);
chmod(0444, '../$FORM{'bbs'}/dat/$FORM{'key'}.dat');
} else { #通常は何もせずクローズ
close(FILE);
}



突貫だけあってその後いろいろめんどくさいです。
0197動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/27 12:13ID:bFrSuaS6
素人が書き逃げするですよ

8) 512KB越え or datが書き込めない or ロックディレクトリが存在するならエラー

17) subject.txt更新 and 1000越え判定
 1000越えててカキコ可能なら
 ・ロックディレクトリ作成
 ・1001カキコ
 ・chmod --- 成功したらロックディレクトリ消去
0198GlobalService ★
垢版 |
04/02/27 18:54ID:???
1)の前に "keyfile.txt"(増加カウントファイル)のサイズをチェックして
1000いってなかったら"1>>keyfile.txt"を実行
1000超えてたら書き込み失敗
*書き込めなくてもカウントする

書き込めなかったら
マイナスカウントファイルを作って・・・
0202GlobalService ★
垢版 |
04/02/28 01:38ID:???
>201
排他処理やると

ABCDEFG・・・と50ms順番に投稿したとする(cgiの処理は75msかかるとする)

書き込み成功 ACEG・・・ (奇数回)
書き込み失敗 BDFH・・・ (偶数回)

こんな感じになる
0203動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 01:55ID:2OurBtXJ
>>202
ロックが取れなかったら書き込み失敗とみなすならそうですが、
ロックは取れなかったら取れるまで待つものなので、
全部がちゃんと書き込めるです。
0204GlobalService ★
垢版 |
04/02/28 02:16ID:???
>203
>ロックは取れなかったら取れるまで待つものなので
NHK実況板だけで動作確認して次は
NTV実況板・・・と1つの板毎に実装していかないとlive8鯖がいきなり死ぬ可能性あるね
0205 ◆garnetGnNk
垢版 |
04/02/28 02:38ID:a22kVdoK
よし。レス数はctimeにやらせよう。
1970/1/1 9:0:1 が1レス目ってことで。
するとアレアレ。
subject.txtなんて/bbs/datみるだけであっという間にできちゃったりアレアレ。

flockなんて過去の遺物です。
1000のプロセスが全て並行で動いていることを想定して考えないと。
0206▲ 某ソレ511
垢版 |
04/02/28 02:46ID:CMWFcqez
>>205
お、それ結構(・∀・)ゐゐ!! かも。
ちょっと移転作業がめんどくなりそうだけど。
0207 ◆garnetGnNk
垢版 |
04/02/28 02:52ID:a22kVdoK
今1000ストップが遅れてるのってあれでしょ?
dat書き込んだあとに/bbs/html/*.htmlからレス数とって、
1000ストップ判定するっていう処理だったかな。
うるおぼえ。

まず、DATに書く前に1000ストップ判定すべきですよ。
これだけでかなり違うかと。
処理順で言えば、DATを書き込む処理からエラーを吐いちゃいけないので、
DATを開くときにエラーにすればいいんじゃないすか?
0208 ◆garnetGnNk
垢版 |
04/02/28 02:59ID:a22kVdoK
んで、実際書けない時のエラーはずーっと上の方でやっちゃっているわけで、
間の処理が長くていっぱいかけるわけですよ。
「開く前に調べる」
これだけではないかと・・・。

それと、bbs.cgiを作り直すなら、設計からやるように(す
0209動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 03:52ID:iCijLgHG
use IO::File;
use Fcntl qw(:flock :mode);
use constant LIMIT_SIZE => 512*1024;

$file = new IO::File($DATAFILE, '+<')
  or DispError("ERROR!", "スレッドが見つからない");
flock($file, LOCK_EX);
DispError("ERROR!", "このスレッドには書けない")
  unless -w $DATAFILE and -s $file < LIMIT_SIZE;
@logdat = $file->getlines();
$lognum = scalar @logdat;
$file->print("$outdat\n");
$logdat[$lognum++] = "$outdat\n";
if ($lognum >= 1000) {
  $file->print("1001<><>Over 1000 Thread<>このスレッドは〜\n");
  $lognum++;
  chmod(S_IRUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, $DATAFILE);
}
$file->close();

flockを使っていいなら楽なんだけど。
0210動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 05:55ID:BfJ3Pp5X
>>205

http://nais.to/~yto/tools/kuttuki-counter/
くっつきカウンター
と同じアイデアだね。
秒数を進めるところで競合が起こるけど。
今のレス数からepoch + secondすればいいから厳密に1000秒を検知しなくていいのなら面白いね。
0211動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 05:57ID:BfJ3Pp5X
>>208
>それと、bbs.cgiを作り直すなら、設計からやるように(す

じゃあサブルーチンごとにパラメータとか列記していきましょうよ。
1)から分かる範囲でやりましょう。
0212動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 09:01ID:oRqqiPOI
泥縄的にアプローチ。

chmodが効かない(全部closeされるまで反映されない?)のが問題なわけで、
(1) chmodと同時に適当なファイル(たとえば「スレッドキー.stop」)も作る
(2) サイズオーバーや書込み禁止のチェックと同時に (1) のファイルの存在チェックも行う
とすれば、とりあえずは解決するかな、と。

スレッドが1000に達するたびにファイルができるのが難点だけど。
0213GlobalService ★
垢版 |
04/02/28 13:02ID:???
>chmodが効かない(全部closeされるまで反映されない?)のが問題なわけで
そうなのか

書き込む直前に1000行ったことを知らせるファイルチェック -> ファイルがあったらエラー
現在の投稿が1000なら1000行ったことを知らせるファイルを作る
実際の書き込み
chmodをやる
でどうだ
0215仕事人 ★
垢版 |
04/02/28 13:27ID:???
今度は いつ実験できそうですか?
0216root ★
垢版 |
04/02/28 13:41ID:???
>>215
重い番組はいつか、という質問かしら。
0217仕事人 ★
垢版 |
04/02/28 13:43ID:???
そです
1,000 超えて 3,000 とか行くのは いつかなと?
その前にチャレンジ版を投入するといいかな?

改善を目指したけど、結果は改悪になるかもしれないけどさ。
0219動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 13:46ID:pSul7e9k
318 :名無しさん :04/02/28 03:08 ID:atMg9E5Y
2/28(土)ヨモギタ少年愚連隊・記憶編 ←ここ
3/ 2(火)16:00〜16:59・チャンネルα「ヨモギダ・ダイジェスト」
「今週土曜から撮影9年超大型企画ついに解禁ヨモギダ少年と感動の再会最新作」
3/ 3(水)16:00〜16:59・チャンネルα「めちゃ2イケてるッ!(再放送)」
 「180日超大作!!岡村大学受験涙と感動ヨモギダ少年3年後の姿」
3/ 4(木)16:00〜16:59・チャンネルα「めちゃ2イケてるッ!(再放送)」
 「岡村受験(秘)結果速報・ヨモギダ原宿で盗撮された涙の衝撃映像は」
3/ 5(金)16:00〜16:59・チャンネルα「めちゃ2イケてるッ!(再放送)」
 「岡村(秘)大学受験本番・美人教師は19歳東大生・恋と勉強の記録公開」
3/ 6(土)15:25〜17:25・めちゃ2イケてるッ!ヨモギダ完結編
3/ 6(土)ヨモギタ少年愚連隊02編
3/13(土)ヨモギタ少年愚連隊03編
3/20(土)ヨモギタ少年愚連隊04編
0220root ★
垢版 |
04/02/28 13:47ID:???
今日のブレーメンはたぶんなかなかだと思うけど、単にスレが速いだけでは
なかなか再現しないんすよね。

ROMも含めたユーザ数が多くないと、再現しないみたい。
ゴールデンタイムで各局の主力番組が目白押しの時の、
一番の人気番組で発生することが多いみたいだから、、、。

とすると、どれが該当するだろう。
live総合スレで聞いてみるかな。
0221動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 13:48ID:xMa1zrwb
>>217
peko系実況だけ3000にして人柱にして見るのはどうよと振ってみるテスト。

で、来週金曜1855-2148、TBSでオウム特番あり。

あとテロ朝は1、3、5の深夜、五輪サッカーの予選中継が。
0222仕事人 ★
垢版 |
04/02/28 14:08ID:???
>>122 を基本にちょっと改造してみる。
0223仕事人 ★
垢版 |
04/02/28 14:24ID:???

open(OUT, $DATAFILE, "a+");

これが Configration Error になるんですが
どうすればいいのかなぁ。。。
0226GlobalService ★
垢版 |
04/02/28 15:57ID:???
>214
>ファイル生成のコストがそれなりにかかりますよ。

「1つのファイル作成」と「数百のプロセス待機」のコストを考えるとどうだろ?
実況板とそれ以外の板でbbs.cgiの使い分けが必要になるかも
0228動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 23:03ID:PwAhsg/U
試してみたが、他プロセスでファイルをopenしているときでも、chmodは効く。
パーミッションはopen時に判定で、print時は関係無いみたい。
となると、以下の部分で1000越えのメッセージいくつも書かれるのが納得いかないが、
もしかして別のところでchmodで書き込み可能にしてない?

if(-w $dattemp && $lognum > 999){
open(OVER, ">>$dattemp");
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OVER);
chmod(0555, $dattemp);
0230サザン ★
垢版 |
04/02/28 23:34ID:???
>>229
サブルーチンなので、変数名が変わってるだけかと。
0231root ★
垢版 |
04/02/28 23:48ID:???
>>228
あるbbs.cgiが「1000を超えました」を書いて、
そのbbs.cgiがdatをクローズして、chmodするまでのわずかな時間に、
別のbbs.cgiが書いていると。

典型的な競合状態ってやつではないかなと。
つまり、プログラミング的には「腕の見せ所」のはず。
0232動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/28 23:59ID:qYEToTcP
228じゃないけど

あるプロセスがchmodを行って、完了する前に別のプロセスが書き込みモードでopenしてしまう。
すると、最初のプロセスのchmodが完了せず、別のプロセスの書き込み完了まで待たされる。
その間に、さらに別のプロセスがオープンして、、

という感じで、全プロセスがファイルをcloseしない限り、chmodが完了しないのかな。
0233動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 00:11ID:VMV/4FdL
でも、なんかおかしいな。

ファイルに対する実際の処理は、要求された順番に行われて欲しいのに
chmod完了待ちの間に、次のopenが成功してしまうというのはどうも・・
カーネル内部でこの辺の優先度がいじられてるのかな。

http://www.dd.iij4u.or.jp/~okuyamak/Documents/NetworkFileSystem.Tune.4.html
の真ん中ちょい下で「chmodを優先するのもアリ」と書いてあるけど
その逆に「chmodをあとまわし」にしているのかもしれない。
0234root ★
垢版 |
04/02/29 00:30ID:???
>>233 のリンク先にこんなのがありますね。

http://www.dd.iij4u.or.jp/~okuyamak/Documents/NetworkFileSystem.Tune.4.html より引用:

File System は、実は、順序による結果の一意決定性の保証をしなくても File System と
して動作するものを作ることができる。 たとえば、2つの process がほぼ同時に write() と
chmod() を リクエストしてきたとしよう。 一応、順序的には『write→chmod』だとする。

この場合、File System は、
「んー。なんかこの write、時間がかかりそうだな。 先に chmod やるか」
と言って、内部で順序を入れ替えてしまっても、 実は バレナイ 。 ばれないということは
(公平性には欠けるかも知れないが)、 File System の実装としては「あり」だと言うことになる。

しかし、write() と chmod() の間の時間が十分に離れていれば、 そしてこの間にこれ以外の
リクエストがいっさい来なければ、 write() と chmod() はこの順序通りに実行される。

仮に、同一のファイルに対する write() 並びに chmod() で、 しかも chmod() されると
write() が実行できなくなるような場合、 外部から観察した場合のリクエスト順序 と
内部でのリクエスト順序 が一致しなくなる。 しかも、常に一定の結果になれば良いのだが、
その保証が無い場合、journal を利用しても結果が再現できなくなる。 上の例だと、
wirte と chmod が十分時間間隔を開けて到着したので write->chmod の順で
ファイルシステムに反映した結果を client に返したのだが、 この直後に system down
を起こしたとしよう。 journal を実行する際には write と chmod は十分短い間隔で
要求されるので、 chmod->write の順で実行してしまったら、 同じ結果を得ることはできない。

0235root ★
垢版 |
04/02/29 00:34ID:???
つまり、>>234の例とは逆に、chmod()が(コストが高いから等の理由で)
なかなかスケジュール(実行)されないということも、当然ありうるということになりますね。
0237動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 00:57ID:YkP68lMj
chmodの後の
>$lognum++;
って、subject.txtに書き込むレス数で使われるはずで、実際subject.txtには
1000以上の数値が書き込まれているから、chmodで待つということは無いと
思うんだけど。
0238197
垢版 |
04/02/29 01:00ID:7x47pFWz
えと、>>197 あるいは >>212(←これは俺と別の人)の方法はどうでしょう。
これなら over 1000 判定されたら、 すでに 8) 以降にある別プロセスは蹴れないけれど
8) 以前のプロセスは蹴ることができるので、まあ 1050 位で止まると思う。

>>212 の人が言うように泥縄的アプローチではあるけれど。
0240GlobalService ★
垢版 |
04/02/29 01:10ID:???
>>238-239
>213-214にあるが
ファイルを作らないでやる方法を考える方が先らしい
0241197
垢版 |
04/02/29 01:16ID:7x47pFWz
>>239
じゃ、>>212 の方法で、ロックファイル(ディレクトリ)はそのまま残して
後で適当に消すってことで。

>>240
それは I/O 負荷的問題?それともポリシーの問題?
0242root ★
垢版 |
04/02/29 01:22ID:???
気になったんで、さらっとカーネルソースを読んでみた。

ひさしぶりなんで感覚がよみがえらないけど(ctagsの作り方をすっかり忘れていた私)、
chmod()やfchmod()すると結局、
setfmode()っていうカーネル内の関数が呼ばれて、
その中でvn_start_write(vp, &mp, V_WAIT | PCATCH)して、
それが正常終了しないとVOP_SETATTR(chmodの本体部分)に
いきつかないようになってるみたい。

vn_start_write()のコメントを読んでみると、

/*
* Preparing to start a filesystem write operation. If the operation is
* permitted, then we bump the count of operations in progress and
* proceed. If a suspend request is in progress, we wait until the
* suspension is over, and then proceed.
*/
int
vn_start_write(vp, mpp, flags)

なんてことが書いてあって、V_WAITといういやーなフラグ立ててるみたいだから、
すべてのペンディングになっているwrite()がいったん(カーネル的に)一区切りつかない限り、
VOP_SETATTR()が行われないような予感。

つまり、fchmod()にしても(>>139)だめっていうことになるすね。
というか、カーネル的にこうなっているということは、chmod()するアプローチでは絶対だめってことじゃん。

うーむ。
0243GlobalService ★
垢版 |
04/02/29 01:27ID:???
>>242
それって今までの処理(書込み禁止のチェック)は破綻ってこと?

だとしたら
(>212に処理順番を入れて書いた) >213を実行?
0244動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 01:33ID:fKbOd8s3
>>241-242
>>91もそうなんだけど、だからこそストップ(ロック)ファイルを作成してはと書いてみた。
あらかじめ作っておいてストップするときにリネームするという方法もあるが
ディレクトリ内のファイル数が増えるのが難点だなあ。
あと、I/Oを減らしたいなら1001以降のレス数を
subject.txtに反映するのを止めるという手もある。
0245239
垢版 |
04/02/29 01:33ID:fntZHoXb
chmodが完了して帰ってくるまでに時間がかかるとすると
> ・chmod --- 成功したらロックディレクトリ消去
がイイような。
0246root ★
垢版 |
04/02/29 01:37ID:???
>>243
超多数のwriteが超同時多発的に出たりすると、vn_start_write()でブロックされて、
VOP_SETATTR()に行かなくなるような気がします。

でも、今10分ぐらい読んでみただけなんで、
このへんは、もっと中身をよく知ってる人に確認すべきな気がしますが。

個人的には、書き込みできないことの判定=ファイルモードが555、というのは
いまのままでいいから、1000超えのところだけでも、NNNNNNNNNN.dame とかいう
ファイル「も」作ることにして、
書き込めない または そのファイルがあったら 書き込み禁止とかにすべきかなとも思ったり。

今日はそろそろ、おやすみの時間。
0247root ★
垢版 |
04/02/29 01:40ID:???
読んでみたのはFreeBSD 5.2.1-RELEASEのカーネルなんで、
Linuxでは同じところをどうやってるか、誰かおしえていただけるとうれしいかも。

おやすみなさり。
0248動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 02:02ID:VMV/4FdL
厳密に必ず1001で止めなきゃ行けないシステムならatomicなアプローチが絶対必要だけど
2chでは10や20オーバーする程度は全然平気なんだから
素直に「書き込む前にレス数を数えて、1000を超えてたら書き込まない」がよろしいかと。

つまり>>122系統のアプローチで、1001OVER書き込みではなく
レス内容の書き込みの前にレス数を判定すると。

問題は、追記モードでopenした場合に読み込みがうまく出来るかだけど、どうだったかな?
読み込みが可能なら問題なしだけど、不可能な場合、書き換えモードでopenしなくちゃいけない。
この場合、排他モードに(又はlock)しないと
レスを書き込む前に.datの末尾にseekしてから実際に書き込むまでの間に
別プロセスでの書き込みがはさまってしまうかもしれない。
すると末尾にゴミがついたり書き込みが消えると言うことが頻発してしまう。
0249動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 02:16ID:VMV/4FdL
で、perl全然知らないんだけど>>122を元に

if (open(OUT, "+>>$DATAFILE")) {
@logdat = <OUT>;
if (scalar @logdat > 999) {
print OUT "$outdat\n";
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
} else {
print OUT "$outdat\n";
close(OUT);
}
}


print $outdatやclose(OUT)が複数箇所で出て非常によろしくないけど
とりあえずwindows上では動作した。
0250▲ 某ソレ511
垢版 |
04/02/29 02:20ID:3Ckm5k37
で、そのchmodがうまく効いてくれないのが問題じゃなかったっけ?
1000レスを大幅にオーバーしちゃうのは。
0251動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 02:23ID:VMV/4FdL
だから、chmod完了待ちの間に大量のwriteリクエストが来ちゃうことが問題なの。
writeがあまり来なくなる(一段落する)と、chmodが完了するから大丈夫。

↑で動作したと書いたけど、
競合状態(複数プロセス)でどうなるかはテストしてない。
FreeBSD上でどうなるかも。
0252動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 02:28ID:VMV/4FdL
あ、違う。
すみません。私がアホでした。


さらに
if (1000over) {
そのままclose();
}
を入れないと意味無いんだった。
0254動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 02:32ID:N/LelD+a
まとめ。
・chmodによるロックは高負荷時に効かなくなる。

対策案
まともな対処
・トランザクション処理をするDBDなどで1000ロック処理をする
分かりやすい対処
・ファイルシステムでロックファイルを使う

提案
・泥臭い処理を書くとバグるから、出来るだけCPANの.pm(Perl Module)を流用しよう
0255仕事人 ★
垢版 |
04/02/29 02:36ID:???
>>249

if (open(OUT, "+>>$DATAFILE")) {


ってのがあるんだ。
入れてみよう。
0256仕事人 ★
垢版 |
04/02/29 02:43ID:???
#open(OUT, ">>$DATAFILE");
#print OUT "$outdat\n";
#close(OUT);

if (open(OUT, "+>>$DATAFILE"))
{
print OUT "$outdat\n";
my @logdat = <OUT>;
if(scalar @logdat > 999)
{
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
else
{
close(OUT);
}
}
0257仕事人 ★
垢版 |
04/02/29 02:44ID:???
>>256 版を全サーバに入れました

live5 を除く
live8/9 は root★さんのもじもじが必要
0258▲ 某ソレ511
垢版 |
04/02/29 02:45ID:3Ckm5k37
if(scalar @logdat > 1000)
{
close(OUT);
}

この文も入れたほうがいいかと、、
0262仕事人 ★
垢版 |
04/02/29 03:06ID:???
こうか?

#open(OUT, ">>$DATAFILE");
#print OUT "$outdat\n";
#close(OUT);

if (open(OUT, "+>>$DATAFILE"))
{
print OUT "$outdat\n";
my @logdat = <OUT>;
$lognum = @logdat;
if($lognum > 1000)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
close(OUT);
}
if($lognum > 999)
{
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
else
{
close(OUT);
}
}
0263▲ 某ソレ511
垢版 |
04/02/29 03:10ID:3Ckm5k37
こうかな?

#open(OUT, ">>$DATAFILE");
#print OUT "$outdat\n";
#close(OUT);

if (open(OUT, "+>>$DATAFILE"))
{
print OUT "$outdat\n";
my @logdat = <OUT>;
$lognum = @logdat;
if($lognum > 1000)
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
}
elsif($lognum > 999)
{
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
else
{
close(OUT);
}
}

$lognum が宣言してない変数なら、
 $lognum = @logdat;
  ↓
 my $lognum = @logdat;
でたぶんいいかと。
0264仕事人 ★
垢版 |
04/02/29 03:10ID:???
こうだった

#open(OUT, ">>$DATAFILE");
#print OUT "$outdat\n";
#close(OUT);

if (open(OUT, "+>>$DATAFILE"))
{
print OUT "$outdat\n";
my @logdat = <OUT>;
my $lognum = @logdat;
if($lognum > 1000)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
close(OUT);
}
if($lognum > 999)
{
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
else
{
close(OUT);
}
}
0265動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 03:13ID:fntZHoXb
たまに「このスレッドは1000を超えました〜」が書き込まれないような気はしますが、
1000を超えて書き込まれることはなくなるはずです。

……いいんだろうか。
0266仕事人 ★
垢版 |
04/02/29 03:15ID:???
わくわく
どきどきってことで、
0267▲ 某ソレ511
垢版 |
04/02/29 03:15ID:3Ckm5k37
if($lognum > 999)
 ↓
elsif($lognum > 999)

はなおしてもらわんと結局意味がないような、、
0269仕事人 ★
垢版 |
04/02/29 03:17ID:???
さらに修正

#open(OUT, ">>$DATAFILE");
#print OUT "$outdat\n";
#close(OUT);

if (open(OUT, "+>>$DATAFILE"))
{
print OUT "$outdat\n";
my @logdat = <OUT>;
my $lognum = @logdat;
if($lognum > 1000)
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
}
if($lognum > 999)
{
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
else
{
close(OUT);
}
}
0270仕事人 ★
垢版 |
04/02/29 03:19ID:???
またまた修正

#open(OUT, ">>$DATAFILE");
#print OUT "$outdat\n";
#close(OUT);

if (open(OUT, "+>>$DATAFILE"))
{
print OUT "$outdat\n";
my @logdat = <OUT>;
my $lognum = @logdat;
if($lognum > 1000)
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
}
if($lognum > 999)
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
else
{
close(OUT);
}
}
0271▲ 某ソレ511
垢版 |
04/02/29 03:22ID:3Ckm5k37
>>268
あ、DispErrorでexitするから結局elsifにしなくてもいい、ってことね、、
何か気味悪いなw
0272動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 03:26ID:VMV/4FdL
print OUT "$outdat\n";
を1000over判定の後にして$lognumを++する方が。

もし書き込めなかったら狂っちゃうけど
chmod問題の原因はそっちっぽいから。
0274名無し募集中。。。
垢版 |
04/02/29 03:27ID:Khv3Ivk3
狼で1000いったスレに
1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。
が書きこまれないです。
1000で止まってますけど
0277仕事人 ★
垢版 |
04/02/29 03:28ID:???
chmod(0555, $DATAFILE);
したファイルには書けないんだから
次のbbs.cgiは早めに判定した方がいいなぁ

512 超え判定と同時にやるのがいいのだろうか?

どやってやるの?

これはbbs.cgiのかなり前半
my $datsizeis =(stat("$DATAFILE"))[7];
unless( $datsizeis <= 512000){
DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
}
0278▲ 某ソレ511
垢版 |
04/02/29 03:30ID:3Ckm5k37
>>272
あ、それ思った。

if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
++$lognum;
if($lognum > 1000)
{
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);
}
}

あと、各所で1001が消えてるみたいだけど、気にしない方向で。
0279仕事人 ★
垢版 |
04/02/29 03:35ID:???
変更

if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
++$lognum;
if($lognum > 1000)
{
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);
}
0280▲ 某ソレ511
垢版 |
04/02/29 03:41ID:3Ckm5k37
>>277
それって
unless( -s $DATAFILE <= 512000){
DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
}
でよいような気がする。。あとで$datsizeisを別に使うならまだしも。
で、ファイルのパーミッションを取得するのは
 (stat("$DATAFILE"))[2]
だそうです。
0282▲ 某ソレ511
垢版 |
04/02/29 03:45ID:3Ckm5k37
>>281
あっ、そっちのほうがスマートだね、、じゃあ、
unless( -w $DATAFILE){
DispError("ERROR!","ERROR:このスレッドには書き込めません。");
}
unless( -s $DATAFILE <= 512000){
DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
}
こうだとよいのかな?(下はどうでもいいけど、、)
0283仕事人 ★
垢版 |
04/02/29 03:47ID:???
入れてこますか

unless( -w $DATAFILE){
DispError("ERROR!","ERROR:このスレッドには書き込めません。");
}
unless( -s $DATAFILE <= 512000){
DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
}

でも 二回実行するより stat とったほうがいいのかな?
0284仕事人 ★
垢版 |
04/02/29 03:49ID:???
× 入れてこますか
○ 入れてみますか

0286動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 03:58ID:fntZHoXb
unless (-w $DATAFILE) {
DispError("ERROR!","ERROR:このスレッドには書き込めません。");
}
unless (-s _ <= 512000) {
DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
}
でどうでしょ。
0287動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 03:58ID:VMV/4FdL
書き込み可能かの判定はaccess()でも出来るけど
サイズの判定はstat()じゃないと駄目なので、結局stat()は呼ばれる。

と思うのでstat()1回に一票。
0289仕事人 ★
垢版 |
04/02/29 04:02ID:???
つまり

if($lognum > 1000)
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
}

これは保険で

unless( -w $DATAFILE){
DispError("ERROR!","ERROR:このスレッドには書き込めません。");
}

が通常のルートですなぁ
メッセージ変えておこうかな、
0291▲ 某ソレ511
垢版 |
04/02/29 04:03ID:3Ckm5k37
>>286
だと2回目の判定で前回のデータから読み込むんだね、、
statじゃなくてもそれが一番よさげ。
0292仕事人 ★
垢版 |
04/02/29 04:04ID:???
>>290-291
( ・∀・)つ〃∩ヘェーヘェーヘェー


if($lognum > 1000)
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
0293動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 04:09ID:7x47pFWz
『1001』が書き込まれてないスレって、パーミションが
落ちてないような気がするけど大丈夫かな?

圧縮の時にパーミション見てたりしていない?
0294▲ 某ソレ511
垢版 |
04/02/29 04:16ID:3Ckm5k37
>>293
ニュー速の1001がいないスレにテスト書き込みしてみたけど、
「ERROR:このスレッドには書き込めません。」でした。
パーミションはちゃんと落ちてる模様。
0297動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 04:46ID:fntZHoXb
なにやら1001ストッパーがかかっているスレッドはsubject.txtに記録されているレス数が微妙に少ないような。
print OUT "1001<><>Over 1000 Thread<>このスレッド〜
のところに $lognum++ が必要な気がする……。
0298▲ 某ソレ511
垢版 |
04/02/29 04:46ID:3Ckm5k37
>>295
分かりづらくてすまん。>>296の言うとおり、
>>292のメッセージが入っているという前提でした。。
0299▲ 某ソレ511
垢版 |
04/02/29 04:48ID:3Ckm5k37
>>297
狼をしばらく見てたけど、どうやら
subject.txtに1001と書いてある→1001ストッパーがいない
subject.txtに1002と書いてある→1001ストッパーがいて、普通通り止まっている
になってるみたいです。
0302動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 09:49ID:5EYN+Lkh
試しに狼の1000超えスレッド15本を見ると、
 subject.txtは1002、datは1001、1001ストッパーあり:8スレッド
 subject.txtは1001、datは1001、1001ストッパーあり:3スレッド
 subject.txtは1001、datは1000、1001ストッパーなし:4スレッド
でした。subject.txtの勝率2割。

Live2chだと実害はありませんが、
「新着あり」→「レス取得」→「新着あり」の永久コンボです。
そろそろ雑質スレや専用ブラウザスレが騒がしくなってきました。
0305root ★
垢版 |
04/02/29 11:18ID:???
live9も、もじもじ。
0306root ★
垢版 |
04/02/29 11:30ID:???
ここのやりとりを起き抜けでぼおっと読みました。

作戦の趣旨は理解できたです。
あとは、超高負荷になった時にどうなるかということで。
0307GlobalService ★
垢版 |
04/02/29 11:42ID:???
>306
live8に入れないと分からない

1.( 1001 < $lognum) && ($lognum < 2000)の範囲内
2.datファイルが壊れる
3.鯖が落ちる
のどれか
0308root ★
垢版 |
04/02/29 11:47ID:???
もう仕事人さんがlive8に入れてありました。(Perl版)
さきほど私がperlccにかけて、バイナリ版にしました。

入れてあるから、1000までしかいかないんではないかと。

■2/29■ハロー!モーニング。スペシャル■Part3■
http://live8.2ch.net/test/read.cgi/dancesite/1078018021/
0310動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 13:56ID:aErj63/K
そもそも高速処理が要求されるのに
高コストなライトパーミッションクローズでとめられるのかというと・・・

キャッシュがされないDNSのようなしくみがあればいいんですが。
0311動け動けウゴウゴ2ちゃんねる
垢版 |
04/02/29 14:08ID:aErj63/K
>>310
訂正。

>>191の案1で1000を越えていたときのみキャッシュするようにする。

たとえばこのスレを例にとり、
1076666901.oparete..qb3.tts.2ch.netなるホストの逆引きで
1000を越えているいないでキャッシュの許可権限を動的に変換できないかということ。
0313仕事人 ★
垢版 |
04/02/29 14:22ID:???
>>279 のどこが悪いんだ?

ここじゃなくて他のところが悪いの?
0314サザン ★
垢版 |
04/02/29 14:28ID:???
状況が飲み込めてないおいら。
過去ログ読もう。
0315root ★
垢版 |
04/02/29 14:29ID:???
>>313
>>279 だと、
確実に書き込みは止まると思うけど、
高負荷だと「このスレッドは1000を超えました」を誰も通らないことになると思う。
…つか、実際になってるか。
0316サザン ★
垢版 |
04/02/29 14:31ID:???
>>313
>>279
多分、

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

の部分を誰も通ってないのではないかと。。
0318root ★
垢版 |
04/02/29 14:33ID:???
今、live8/livecxのチェックを番組を未ながらやってるです。
この内容じゃ、速いの当たり前か。
0319root ★
垢版 |
04/02/29 14:33ID:???
未ながら => 見ながら
0323サザン ★
垢版 |
04/02/29 14:36ID:???
やっぱり根本的に作り直さないとダメなのかなぁ、、
0324仕事人 ★
垢版 |
04/02/29 14:36ID:???
>>320
はいってます。

もう一回掲示するネ
0325仕事人 ★
垢版 |
04/02/29 14:37ID:???
(1) bbs.cgi の序盤

unless( -w $DATAFILE){
DispError("ERROR!","ERROR:このスレッドには書き込めません。");
}
unless( -s $DATAFILE <= 512000){
DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
}
0326仕事人 ★
垢版 |
04/02/29 14:38ID:???
(2) bbs.cgi の中盤の最後 (datへの追記)

if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
++$lognum;
if($lognum > 1000)
{
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);
}
}


0327仕事人 ★
垢版 |
04/02/29 14:39ID:???
(3) bbs.cgi の終盤の始め

#==================================================
# ファイル操作(subject.txt & subback.html)
#==================================================

{
#サブジェクトパスを作成

my $rnd = int(rand(99999));

my $subject = $PATH . "subject.txt";
my $subtemp = $PATH . $rnd . $FORM{'time'} . ".tmp";
my $keyfile = $FORM{'key'} . ".dat";
use vars qw($FILENUM);
use vars qw($SUBLINE);
use vars qw(@newsub);

#サブジェクトファイルを読み込む
unless(-e "$subject"){
makesub();
}
open(SUBR,"<$subject");#SUBJECTを開く
my @SUBJECTLIST = <SUBR>;#内容を全て読み込む
close(SUBR);#閉じる
$FILENUM = @SUBJECTLIST;

MakeWorkFile($FORM{'key'});

if($FORM{'subject'} ne ""){
#subjectがあれば新規スレッド
my $subtm = "$keyfile<>$FORM{'subject'} (1)\n";
@newsub = ($subtm, @SUBJECTLIST);
++$FILENUM;
}else{
my (@tempsub, $transub, $frontsub, $rearsub);
if($FORM{'mail'} =~ /sage/){
$transub = join('<<>>', @SUBJECTLIST);#一本につなげる
($frontsub, $rearsub) = split(/$keyfile<>/, $transub);#keyでぶったぎる
@tempsub = split(/<<>>/, $rearsub);#後半ぶつ切り
$transub = shift(@tempsub);#タイトルを取り出す
$transub = $keyfile . "<>" . $SUBLINE;#タイトル入れ替え
@newsub = (split(/<<>>/, $frontsub), $transub, @tempsub);
}else{
$transub = $keyfile . "<>" . $SUBLINE;
@newsub = ($transub, grep(!/^$FORM{'key'}/, @SUBJECTLIST));
}
}

if(@newsub){
#SUBJECTに書き込む
open(SUBT, ">$subtemp");
#flock(SUBT, 2);
foreach(@newsub){
print SUBT $_;
}
#flock(SUBT,8);
close(SUBT);
my $resuc = 0;
until($resuc){ $resuc = rename($subtemp, $subject); }
}else{
@newsub = @SUBJECTLIST;
}
}

0328仕事人 ★
垢版 |
04/02/29 14:40ID:???
関連するサブルーチンに

makesub();
MakeWorkFile($FORM{'key'});

この二つがある

0329仕事人 ★
垢版 |
04/02/29 14:41ID:???
#==================================================
# subject.txtの補完
#==================================================

sub makesub{
my $bbs = $FORM{'bbs'};
my $path = "../"."$bbs"; #$where{$bbs};
my $datpath = $path."/dat";

open(DIR, "ls $datpath/|") || print HTM " cant' ls.";
my @dir = <DIR>;
close(DIR);

my %time;
my @pagefile;

foreach(@dir){
chop();
my $mtime;
my $pagemax;
my $mt = "$mtime"."$_";
($mtime) = (stat("$datpath/$_"))[10];
$time{"$mt"} = $_;
++$pagemax;
}

my @mtime = keys(%time);
my @sorting = sort by_number @mtime;
my $filenum;
foreach(@sorting){
push(@pagefile,$time{"$_"});
#print $time{"$_"};
++$filenum;
}

#@pagefile = reverse(@pagefile);
my $num;
my $subject;

while($filenum>=$num){
my $showpage = @pagefile[$num];
if($showpage eq ""){
}
open(IN, "$datpath/$showpage")||die "";
my $resnum = 1;
my $rr = 0;
while(<IN>){
$resnum++;
if($rr == 0){
$_ =~ s/\n//gi;
$_ =~ s/\r//gi;

my ($name,$mail,$time,$message,$subject);
($name,$mail,$time,$message,$subject) = split(/,/,$_);
$rr = 1;
}
}
close(IN);
open(OUT,">$path/subject.txt");
print OUT $showpage .",";
print OUT "$subject($resnum)\n";
++$num;
close(OUT);
}
}

0330仕事人 ★
垢版 |
04/02/29 14:41ID:???
#==================================================
# ファイル操作(HTML作成用作業ファイル更新)
#==================================================

#HTML用DATを作成
#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++;

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);
}
}

#1つ目の要素を読み込む
$firstlog = $logdat[0];
#改行カット
chomp($firstlog);

#1つ目の要素を加工する
($name,$mail,$time,$message,$subject) = split(/<>/,$firstlog);

$SUBLINE = $subject . " (" . $lognum . ")\n";

open(SHTM,">$workfile");#ログテンポラリを開く
#flock(SHTM,2);

#サブジェクトテーブルを吐き出す(ここは必ず1行にまとめること(処理効率))
#-----------------------------------------------------------------------
print SHTM <<EOF;
<TABLE border=1 cellspacing=7 cellpadding=3 width=95% bgcolor="$SETTING{"BBS_THREAD_COLOR"}" align=center><TR><TD><DL><a name="\$ANCOR"></a><DIV ALIGN="right"><a href ="#menu">■</a><a href="#\$FRONT">▲</a><a href="#\$NEXT">▼</a></DIV><B>【\$ANCOR:$lognum】<FONT size=5 color="$SETTING{'BBS_SUBJECT_COLOR'}">$subject</FONT></B>
EOF
#-----------------------------------------------------------------------


#1つ目のメールへのリンクを作成
if($ENV{'SERVER_NAME'} =~ /bbspink\.com/i)
{#if(bbspink)
unless($message =~ /2ch\.net/ || $message =~ /bbspink\.com/){
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/pinktower\.com\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig;
}else{
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig;

}
} else {#if(!bbspink)
unless($message =~ /2ch\.net/ || $message =~ /bbspink\.com/){
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/ime\.st\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig;
}else{
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig;

}
}###

if($mail ne ""){
$mailto = "<a href=\"mailto:$mail \"><b>$name </b></a>";
}else{
$mailto = "<font color=$SETTING{'BBS_NAME_COLOR'}><b>$name </b></font>";
}

#1つ目の要素を吐き出す
print SHTM "<dt>1 名前:$mailto $time<dd>$message <br><br><br>";

#ログ数から、表示コンテンツをチェック
if($lognum > $SETTING{"BBS_CONTENTS_NUMBER"}){
#ケツの要素を0〜9番までコンテンツに格納
@content[0..$SETTING{"BBS_CONTENTS_NUMBER"}-1] = @logdat[@logdat-$SETTING{"BBS_CONTENTS_NUMBER"}..@logdat-1];
$topnum=@logdat-($SETTING{"BBS_CONTENTS_NUMBER"}-1);
}else{
#アタマの要素を1〜10番までコンテンツに格納
@content[0..($SETTING{"BBS_CONTENTS_NUMBER"}-1)] = @logdat[1..$SETTING{"BBS_CONTENTS_NUMBER"}];
$topnum=2;
}

foreach(@content){
chomp($_);#改行をカット

#要素を加工する
($name,$mail,$time,$message,$subject) = split(/<>/,$_);

unless($_){
$topnum++;
next;
}

#要素のメールへのリンクを作成
if($ENV{'SERVER_NAME'} =~ /bbspink\.com/i)
{#if(bbspink)
#if(bbspink)
unless($message =~ /2ch\.net/ || $message =~ /bbspink\.com/){
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/pinktower\.com\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig;
}else{
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig;
}
}else {#if(!bbspink)
unless($message =~ /2ch\.net/ || $message =~ /bbspink\.com/){
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/ime\.st\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig;
}else{
$message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig;
}
}
##
if($mail ne ""){
$mailto = "<a href=\"mailto:$mail \"><b>$name </b></a>";
}else{
$mailto = "<font color=$SETTING{'BBS_NAME_COLOR'}><b>$name </b></font>";
}

print SHTM "<dt>$topnum 名前:$mailto :$time<dd>";

my @messx = split(/<br>/,$message);#メッセージを行でカット
my $messy = @messx;#行数を計算
if($messy > $SETTING{"BBS_LINE_NUMBER"}){
my $messz = join('<br>',@messx[0 .. $SETTING{'BBS_LINE_NUMBER'}-1]);
print SHTM "$messz <br>";
print SHTM "<font color=\"$SETTING{'BBS_NAME_COLOR'}\">(省略されました・・全てを読むには<a href=\"../test/read.cgi/$FORM{'bbs'}/$key/$topnum\" target=\"_blank\">ここ</a>を押してください)</font><br>";
}else{
my $messz = join('<br>',@messx[0 .. $messy-1]);
print SHTM "$messz <br>";
}

$topnum++;
print SHTM "<br>\n";
}

#-----------------------------------------------------------------------

#flock(SHTM,8);
close(SHTM);

#パーミッション調整
umask(0);
chmod(0666,$workfile);
}

0331未承諾広告※ ◆aiY4htt2.2
垢版 |
04/02/29 14:43ID:47xPabMI
>>325
-w $DATAFILE or ( -s $DATAFILE <= 512 * 1024) or DispError("ERROR!","ERROR:このスレッドには書き込めません。");
エラーの単純化っでどうかしら?理由はどうあれ書き込めないのですから(^-^)
0333サザン ★
垢版 |
04/02/29 14:47ID:???
そういえば、gethostbyaddr を二回やってるのはどうなんだろう。。。
0334未承諾広告※ ◆aiY4htt2.2
垢版 |
04/02/29 14:54ID:47xPabMI
>>331
追記および訂正。
our $Log_line = 1; # グローバル扱いで。以後レス数はこれを参照するとか。
if (open(OUT, "+>>$DATAFILE")) { $Log_line = join '', <OUT> =~ tr/\n/\n/ }
-w $DATAFILE or ( -s $DATAFILE <= 512 * 1024) or ($Log_line > 1000) or
 DispError("ERROR!","ERROR:このスレッドには書き込めません。");
0335++$lognum;の位置が悪い?
垢版 |
04/02/29 14:55ID:miDcWYdc
if (open(OUT, "+>>$DATAFILE"))
{
my @logdat = <OUT>;
my $lognum = @logdat;
if($lognum > 1000)
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
print OUT "$outdat\n";
++$lognum;
if($lognum > 1000)
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
chmod(0555, $DATAFILE);
}
else
{
close(OUT);
}
}
0336仕事人 ★
垢版 |
04/02/29 14:58ID:???
>>335
そうなのか? そうなのか?
0337未承諾広告※ ◆aiY4htt2.2
垢版 |
04/02/29 15:01ID:47xPabMI
>>334
条件が無茶苦茶ですね。ごめんなさい。
(-w $DATAFILE and ( -s $DATAFILE <= 512 * 1024) and ($Log_line < 1001)) or
 DispError("ERROR!","ERROR:このスレッドには書き込めません。");
0338▲ 某ソレ511
垢版 |
04/02/29 15:03ID:3Ckm5k37
>>335
むしろそうするくらいなら、
++$lognum; を削除
だけで済むような。
0341▲ 某ソレ511
垢版 |
04/02/29 15:06ID:3Ckm5k37
>>339
うん。今そのことについて議論してるところかと。
0344仕事人 ★
垢版 |
04/02/29 15:10ID:???
if($lognum > 1010)
{
close(OUT);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}

にしてみた。
0345仕事人 ★
垢版 |
04/02/29 15:11ID:???
>>340
どうなんですかねぇ
0346サザン ★
垢版 |
04/02/29 15:13ID:???
というか、datの書き込みのあとには、

#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);

がきてますよー。
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 追記部分は元にもどす。
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
レス数のカウントがより確実になって、ちょっと重くなる?
0517動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 09:41ID:33tLVDgR
各種cgiテスト専用の板を作ったほうがよさげな悪寒。
0518▲ 某ソレ511
垢版 |
04/03/01 09:45ID:N+YBsNkv
>>517
いちおう運用情報(金)がそれにあたってます。
でも、1000レスとかそういった実験にはむかんとですよ。
0521動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 10:36ID:Hwg46zlr
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{

ここを

if($lognum > 999)
{
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
else
{
if(open(OUT,">>$dattemp"))

とかだめかな。
0522GlobalService ★
垢版 |
04/03/01 10:48ID:???
>>521
if($lognum > 999)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!") if($lognum > 1010);
if(open(OUT,">>$dattemp"))
{

・・・書いてみたかっただけなの
0523root ★
垢版 |
04/03/01 11:16ID:???
昨日は本業超多忙につき、>>360 から未処理。
急ぎで何かしなきゃいけないことある?live8/live9のbbs.cgiの更新とか。

12:00ごろまた来るので、誰かレス番で教えてちょ。
# 午後は少し時間とれる見込み。
05242chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆2CHTUBOC5A
垢版 |
04/03/01 11:31ID:dwh0EDMA
ERROR!
ERROR:このスレッドには書き込めません。緊急緊急緊急!!

ホスト*

名前: 2chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆2CHTUBOC5A
E-mail:
内容:
きねんかきこ。

こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。
-------------------------------------------------------
ちゃんとでてるね。。。
0527動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 12:02ID:+8ilk7HP
警察板( http://society.2ch.net/police/ )が困った状態なので、お知らせしておきます。
 subject.txt上は1011なのに、実際は2000オーバースレ有り
 (IEで)各スレッドURLでは、1001ストッパーまで表示、書き込み欄なし
 (〃)板トップでは、実際の最終レスまで表示、書き込み欄あり
 (専用ブラウザで)スレ一覧のレス数がずれるものの、書き込み可能
http://society.2ch.net/test/read.cgi/police/1058340116/2917 など

ちなみに、レス数1000近くのスレをageて、次々にお祭りを始めているようです。
http://society.2ch.net/test/read.cgi/police/1040783990/962
他板で宣伝も見つけました。
http://live8.2ch.net/test/read.cgi/livenhk/1078104752/190
0528動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 12:07ID:2ktpVplm
つまり >>519 かつ 999 判定より 1010 判定が前にあるせいで
書き込まれてから緊急緊急が出てるわけだな

>>523
急ぎで society の bbs.cgi を元に戻してくださいw
0530root ★
垢版 |
04/03/01 12:09ID:???
>>528
society(=oyster17)って、私ログインできるのかな。
0532動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 12:12ID:2ktpVplm
でもよく読むと 515 のとおりなら 1010 判定のあとに 999 判定も
通ってるはずだから、止まるんじゃないのかな?
&DispError って、中で exit してるのかな
0534仕事人 ★
垢版 |
04/03/01 12:57ID:???
変更してみる

#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)#念のため暴走ストッパー
{
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++;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
0535動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 13:15ID:ZVH4RhiM
close(OUT);
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
のほうがいいかも
0541仕事人 ★
垢版 |
04/03/01 17:13ID:???
んで
現状は 1,000行ったスレッドは
dat = 1,001 まである
index.html = 1,000 までしか出ない(以前と使用違うけど、がまんの方向で)
subject.txt = 1,001 まである

今回の改修の目的は
2,000 とか 3,000 まで書き込めてしまうのを 1,000 近辺で止める。

なのでどうなるか観察しよう。
0542GlobalService ★
垢版 |
04/03/01 17:19ID:???
>>541
>2,000 とか 3,000 まで書き込めてしまうのを 1,000 近辺で止める。

何が何でも1,000ぴったりで止めるのか
1050ぐらいまで放置するか決めよう
0543 ◆Nm5090363w
垢版 |
04/03/01 17:21ID:DWVIoriX
>>542
1,000 「近辺」というぐらいだから1050でもアリじゃないかな……。
0544▲ 某ソレ511
垢版 |
04/03/01 17:22ID:N+YBsNkv
ちょっとくらいはオーバーしてもいいという方針だったと思うのだが、、
過去ログorソースコード読んだ?
0545root ★
垢版 |
04/03/01 17:28ID:???
1000を書いたbbs.cgiさんが、責任持って1000ストッパーを書いて、
chmod/fchmodしてから終わる、というのはどうなんでしょう。
0546GlobalService ★
垢版 |
04/03/01 17:30ID:???
>543
それなら一週間何も弄らず観察しよう。
0547仕事人 ★
垢版 |
04/03/01 17:31ID:???
それに挑戦したのが >>255 あたりからだったりして、
0548 ◆Nm5090363w
垢版 |
04/03/01 17:34ID:DWVIoriX
>>545
それだと「999を書いたbbs.cgiさん×2+1001以降を書くbbs.cgiさん」な場合に
ストッパーが効かなくなる気がするです。
0549root ★
垢版 |
04/03/01 17:36ID:???
>>548
そっか。当然そうだよね。

なんだか、某DJBに「フーン」って笑われそうな議論だよなぁ。ここでのあがきって。
もちろん、私も含めて。
0550仕事人 ★
垢版 |
04/03/01 17:39ID:???
>>546
何も起らなきゃ永遠に観察。
0551動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 17:41ID:tT+9yTVO
1000 近くになると
my @logdat = <OUT>;
のコストがバカにならないんだよね
読み進めてる間に他のプロセスがガンガン書いてる
やっぱ 1 レスにつき 1 バイト追記するレス数ファイルを
持つのがいいんじゃなかろうか
0558354
垢版 |
04/03/01 18:48ID:8AAPGFOi
大改造しているところ大変申し訳ないのだが、
単純に最初のソースの

#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);

の部分を

if($FORM{'subject'} ne ""){#新規スレ立て時
#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);
}

とすればいいような気がする。
0560 ◆rafale0Mno
垢版 |
04/03/01 19:03ID:JTTxA+dl
>>559
>>534 かと。
それなら一回555にしたパーミッションが戻ることもないし。

とPerlよく知らないけど口出ししてみる。
0562動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 19:29ID:BnaSe/vj
>>558
もとのソースだと書きこみが失敗したときでもchmod(0666,)が実行されてたみたい?なので、
if (open(OUT, ">>$DATAFILE"))
print OUT "$outdat\n";
close(OUT);
} else {
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
これだけでもいいかもしれない。
0565354
垢版 |
04/03/01 20:27ID:8AAPGFOi
DATファイル作成後、DATファイルが666で変わらなければ、レス追加時に666を
設定するのは意味が無いし、>>357 >>508にもあるように、555にしたファイル
が666に戻るのは元々想定していないと思います。
DATファイルが666で変わらないことは、実際のDATファイルや全てのソースを
見ないと分からないので、分かる方お願いします。
0567仕事人 ★
垢版 |
04/03/01 20:30ID:???
>>563
FTP で入って chmod 555 しようとおもったら
permition ないって怒られた。
だれの持ち物になっているんだ?

良く起こることなのか?
たまたまなのか?
0568動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 20:30ID:DBas2cAU
1000を超えていることを示すファイルを別に作るのは駄目ですか?

if (1000越ファイルアリ)
{
}
else
{
if (1000超えた) {
1000越ファイル作成
}
}
0570 ◆qb.x27/m96
垢版 |
04/03/01 21:18ID:OvElWHnn
>>567
cgiから作成されたファイルはcgi経由でないと変更出来ない場合ありです。
0571 ◆Nm5090363w
垢版 |
04/03/01 21:24ID:LtyNcyvj
普通にスレストかければいいのかしらん。
0572動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 21:28ID:BnaSe/vj
>>562は{が抜けてた。
if (open(OUT, ">>$DATAFILE"))
{
print OUT "$outdat\n";
close(OUT);
}
else
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
0574未承諾広告※ ◆TWARamEjuA
垢版 |
04/03/01 21:58ID:uUhORkfL
CGI のプロセス ID 付き書き込みデータを、書き込みやさんに渡す。
書き込みやさんから、その結果を SIGNAL として呼ばれるのを待つ。
成功したら SIGUSR1 とか失敗したら SIGTERM とか。(現状の bbs.cgi では SIGNAL は単純に exit; ですよね?)
でもって 10 秒以上経過しても結果が帰ってこなかったら、DispError("ERROR!","ERROR! (゚∀゚)アヒャヒャヒャヒャ")

せっかくのうに環境なんだから。。。
0578 ◆qb.x27/m96
垢版 |
04/03/01 22:28ID:OvElWHnn
これを試してみてくれないかなぁ。。。

----
#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)#念のため暴走ストッパー
{
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
chmod(0555, $dattemp);#←ここに、これ入れたらどですか
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
if($lognum < 1000)#666は1000以下で
{
umask(0);
chmod(0666, $dattemp);
}
}
0579 ◆Nm5090363w
垢版 |
04/03/01 22:30ID:LtyNcyvj
>>578
DispErrorはexitするので、2つ目のchmodは実行されないです……。
0580 ◆qb.x27/m96
垢版 |
04/03/01 22:39ID:OvElWHnn
>>579
あらら直前にあるのに今気がついた。。。
もう少し考えてみますです。。
0581動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 22:43ID:n5/8aIYu
if($FORM{'subject'} ne ''){#新規スレ立て時
#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);
}

これも組み込んだらいいかと
0582動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 22:44ID:BnaSe/vj
>>558でいいと思うんだけど、通常の書きこみ時にsubjectが送られたときのことを考えて、
>>562と合わせて、
if(!-e $DATAFILE){
1の書きこみ&パーミッション調整
}elsif(open(OUT,">>$DATAFILE")){
通常の書きこみ
}else{
エラー
}
でどうか。

ところで、今どれが入っているの?
0583動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 22:45ID:L7vZN1iP
if($lognum > 1010)#念のため暴走ストッパー
{
chmod(0555, $dattemp) or DispError("ERROR!", "ERROR:chmodできないよ?緊急緊急緊急!!");
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
chmod(0555, $dattemp)が失敗してるのか、
それともどこかで666にchmodされてるのか調べてみるとか
0584root ★
垢版 |
04/03/01 23:13ID:???
>>567
suexecって、たまに「抜けてくる」ことがあります。

ひょっとして、chmod()できないのって、それが原因?
0586仕事人 ★
垢版 |
04/03/02 03:20ID:???
うーん
実況の各板たらーっと見てきたけど 1,001 で止まっているなぁ

>>563
のスレッドだけの問題なのかどうなのか。
0588仕事人 ★
垢版 |
04/03/02 03:48ID:???
警察板 は呪われているのか?
0589動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 03:51ID:oQ+yX4a+
>>588
配り忘れているとか
0590仕事人 ★
垢版 |
04/03/02 03:52ID:???
もちろんまずは自分を疑えってことで
それは見てみたのでしたー
0591動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 03:56ID:oQ+yX4a+
>>590
もしかしてnews6/news7配り忘れていない
0592仕事人 ★
垢版 |
04/03/02 03:59ID:???
どうだろ、、
自動で配布しているからなぁ
version 番号付けて配ってみるです < こんど
0593動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 04:11ID:IJTX52N4
警察板
ERROR:このスレッドには書き込めません。緊急緊急緊急!!
のエラーはでますが、いくらでも書けますよ
0595動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 08:27ID:TSOc+dgc
>>567
oyster100/200/900番台ならroot師におながいしてchownしてもらえばいいのではないかと。
0596動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 14:08ID:RzANnUAw
if (-e $DATFILE && (!-w $DATFILE || -s _ > 512 * 1024)) {
 DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
}

#中略

my $lognum = 0;
if (open(IN, "< $DATFILE")) {
 $lognum = (join('', <IN>)) =~ tr/\n/\n/;
 close(IN);
}

if ($lognum > 1010) {
 chmod(0555, $DATFILE);
 DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");

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

 }elsif (!-e $DATFILE) {
  # スレ立て処理
  chmod(0666, $DATFILE);

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

#(´-`).。oO(テストまでしちゃったよ…)
0597 ◆qb.x27/m96
垢版 |
04/03/02 14:28ID:46NZVWRI
>>534
http://society.2ch.net/test/read.cgi/police/990121724/

>"ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"

↑これが出ているのに上のスレに書き込めるということは bbs.cgi の序盤のここ↓を通り抜けているということなので
パーミッションがどこかで再変更されているはず。

>#.datが存在してないか書けないならばいばい
>unless(-w $DATAFILE){
>DispError("ERROR!","ERROR:このスレッドには書けません!");
>}
----
http://society.2ch.net/test/read.cgi/police/1040783990/
このスレは現在パーミッションではなくてここ↓で止まっているもよう。

>unless( -s $DATAFILE <= 512000){
>DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
>}


なので一番ぁゃιぃここをこの↓ように追加修正すれば現在書き込めるものも含めて
再度パーミッション変更されるので書き込み出来なくなるはず。

#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
if($lognum > 1010)#1011以上なのに666の暴走ストッパー
{
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。禁止禁止禁止!!");
}

#禁止と表示されればここ↑で再設定されたはずなので書き込めていないはず。。
0598動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 22:25ID:WdyfTS6A
WebProg板だと「情報を小出しにするな」って怒られるんだな
規制とかクリティカルな部分を除いて公開、でもダメ?
0599動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 22:57ID:+220nzEb
まぁ普通はブラックボックス部分は除いて公開するのが良いよね。
規制のあたりはサブルーチン化してパラメーターと返り値だけ提示すりゃいいんじゃないの。
0603仕事人 ★
垢版 |
04/03/03 20:20ID:???
現在の bbs.cgi の version

20040301
0604 ◆qb.x27/m96
垢版 |
04/03/03 20:39ID:Q6TtuXTp
どこがどう変わったのか変更点がよくわからないですがまだ書き込めます
0605仕事人 ★
垢版 |
04/03/03 20:41ID:???
全部のサーバが同じかどうかの指標。
0607 ◆qb.x27/m96
垢版 |
04/03/03 20:44ID:Q6TtuXTp
そうですか。。
ではまたしばらく待機しておきます。。。
0608▲ 某ソレ511
垢版 |
04/03/03 20:45ID:dMJAeQ2p
>>606
そこで確認できる範囲では、news7だけ更新されませんね。
live5はまた別だろうし。
0609仕事人 ★
垢版 |
04/03/03 20:53ID:???
おおーっ

news7 も配布先リストに加えました。
0616 ◆qb.x27/m96
垢版 |
04/03/04 22:25ID:R3QQxE+y
   ∧_∧
  ( ・∀・) <忙しそうだし、催促せずに待ちますね。。
  ( つ旦)
  と__)__)
0619動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/05 18:04ID:cFF945EX
ためしになつかしドラマ板の1000近いスレをいくつか埋めてみたんだけど
どれも1000突破した。もしかして板、というか鯖によって突破したり突破しなかったりするのか?
0620仕事人 ★
垢版 |
04/03/05 18:11ID:???
ccccc
0622仕事人 ★
垢版 |
04/03/05 18:22ID:???
0.7 です。

お薬貰っていってくださいー
0624仕事人 ★
垢版 |
04/03/05 18:27ID:???
sub MakeWorkFile{
に最後の手段を追加してみた。
0625仕事人 ★
垢版 |
04/03/05 18:27ID:???
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);
}

0628サザン ★
垢版 |
04/03/05 18:46ID:???
何故か bubble サーバは、
昔立てられたスレッドの所有者が nobody になっているもより。

ということは・・・
0632仕事人 ★
垢版 |
04/03/05 19:21ID:???
引越し時に chmod で 777 にするんじゃなく
chown(でしたっけ?) 後 666 にすべきなのか?

ということは、引越し後の正しい呪文は
0634root ★
垢版 |
04/03/05 19:41ID:???
一般ユーザ(にsuexecされたCGI)がchownなんてできないと思うなぁ。
0636 ◆qb.x27/m96
垢版 |
04/03/05 19:52ID:7NAUewz2
1000越えて書き込めていたのは確認した範囲では
去年以前に建立てられたスレのようだったし
今年に入ってから立てられたもので、1000ストッパーが
効いていないものってなかったような、、

サザンさんの>>628あたりに謎の答えがありそう、、、
0637root ★
垢版 |
04/03/05 20:04ID:???
古いスレを中心に、オーナーがおかしいやつがあるから、そいつら修正すればいいってこと?
(ストッパーが効かない原因のひとつ)

ディレクトリの持ち主がその人であれば「消す」ことはできるから、
例えばnobodyとかが持ち主のファイルを探して、一斉にこんなかんじにすればいいのかな。

(1000000000.dat のオーナーがおかしいとする)

cp -p 1000000000.dat tmp1000000000.dat
rm -f 1000000000.dat
mv tmp1000000000.dat 1000000000.dat

2行目でいきなりmv -fしてもいいけど、なんだかいやな予感がするんで。

find -user nobody とかして、該当のファイルについて一斉にやればよさそうな気がする。
0638root ★
垢版 |
04/03/05 20:06ID:???
FreeBSDでは、

cp -p 1000000000.dat tmp1000000000.dat
mv -f tmp1000000000.dat 1000000000.dat

でOKでした。Linuxでもやってみるか。
0639root ★
垢版 |
04/03/05 20:08ID:???
あ、そっか。Linuxでsuできる環境もってないや。
どなたか、実験きぼんぬ。

% mkdir test
% cd test
% sudo touch A
% cp -p A A.tmp
% mv -f A.tmp A

で、そのユーザのAになれば無問題。
0640仕事人 ★
垢版 |
04/03/05 20:14ID:???
>>635
いや banban で
0641 ◆qb.x27/m96
垢版 |
04/03/05 20:50ID:7NAUewz2
>>637
古いスレでオーナーがおかしいやつの中で
1000間近なスレのURIがいくつか分かりますか?
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プロセスが行うので
排他処理は不要。

ていうか俺が作れってか
0742root ★
垢版 |
04/04/03 09:26ID:???
>>741
> ていうか俺が作れってか

期待してますです。

私は「作られたものの性能をできるだけ発揮させる」とか
「既にある仕組みを用途に合わせて適用する」とかいうのは
なんとかやれますけど、スクラッチから作るのは正直苦手なんで。
0743動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 09:46ID:Lo74GCgh
NFSとflockの両方を提案したがこれは両方の組み合わせを提案したわけじゃないのであしからず。
NFSは「読込負荷の分散のためラウンドロビン化された表向きCGIサーバー群」が
データを抱える裏方のサーバーに読みに行く場合のみ。
flockは書き込みに関してだけで、これは単一のホストがローカルドライブに対して行う。

俺が考えている構成は以下のような感じ。
まず表向きのCGIサーバー群を用意してラウンドロビン化。
裏方サーバーはデータの管理専用で板ごとに分散。
表と裏の通信はTCP上の独自プロトコル。

表サーバーについて: read.cgiは直接裏のサーバーに問い合わせるのではなく
表サーバー内で動作するキャッシュ機能提供のデーモンを経由する。
キャッシュ能力を持つデーモンは逆proxyの効果を上げる。

裏サーバーについて: 読込と書込の2つのデーモンを走らせてTCP listen。
書込デーモンはTCP口のところである程度バッファ能力を持たせておけば
過去flockを使ったとき発生した「待ちのための負荷増加」を減らせるはず。
読込デーモンの処理を極限まで減らすため、
HTML化やl50分の切り出し等、読込時によくある動作は書込デーモンが
あらかじめ行ってファイルへ書き出す。

本当は読込デーモンと書込デーモンを一体化させて
できるだけファイルを経由しないオンメモリ動作にした方がさらに効率的なのだが
開発に時間がかかるしバグ取りが大変だしメンテできる人が減ってしまうことになる。
0744動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 09:52ID:Lo74GCgh
743続き

書込時の流れ:
[表鯖]bbs.cgi

[表鯖]書込デーモン
(チェックやフィルタなどはこことbbs.cgiだけで行い裏の負荷を下げる)

[裏鯖]書込デーモン

読込時の流れ:
[表鯖]read.cgi

[表鯖]読込デーモン
(キャッシュ能力を持たせて逆proxy状態に)

[裏鯖]読込デーモン

表鯖はデータを抱えない同一構成のマシンを大量に並べてラウンドロビン化。
そうすりゃ表鯖にいくら負荷をかけても数の力でごまかせる。
ていうかこれだとNFSは不要か。
0745未承諾広告※ ◆TWARamEjuA
垢版 |
04/04/03 10:47ID:Jzrgu6KC
そうそう、書きこむ人 (bbs.cgi) がイパーイいるから 3000 超えちゃったり。
dat 直読みも表面的には「直読み」だけど本当は DB アクセスにしちゃうとかね。
AddTypeapplication/x-httpd-cgi.dat
AddHandlercgi-script .dat
とかとか。
0746見習い▲ ★
垢版 |
04/04/03 16:27ID:???
そして次の世代の2ちゃんねるが生まれて来るんですね、
みんながんがれ
0749動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/03 20:47ID:dqjQ8msk
見習い▲ = 仕事人 = 夜勤 = Z社員 でしたっけ?

ラウンジとかの人の多いところには排他入れたいけど、
入れると負荷が高まるというトレードオフをどう克服するか
楽しみに待っていますよ
0750動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/07 11:29ID:YsHv4Vrt
書き込みデーモンの話題とか見ると、去年の暮れから話がループしているな。

実際のコードを書くためには、bbs.cgiをサブルーチン単位で公開できるところだけでも提示してくれないと書けないと思う。
どうなんですか? root★氏やひろゆき氏的にそのあたりの書き込みサブルーチン公開は?
0753750
垢版 |
04/04/08 04:30ID:p5k2zZLN
>>751
んー、だから鶏と卵問題で前進していないから、いいかげん最初の一歩を踏み出しましょうということで。
wikiに公開できる部分を張ってもらうのがいいと思う。

まあ予想されるひろゆき氏の答えは「どの部分を非公開にしなくちゃいけないかも分からない」だったりして。
0759▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/04/11 17:19ID:w04KJDq1
>>757
一応連携しているはず、と信じたい。

見習い師いわく、「bbs.cgiは完全な挙動をしている」。
しかしながら、

・perlccの吐くCソースとバイナリが大きいのでシェイプアップの余地がある。
・スパゲティソースであることが過去の議論から明白なので、
 処理過程も見直せば大幅な負荷軽減が期待できる。
・ディスクI/Oまわりの見直しでディスク負荷が軽減可能。
 今のソースはコストのかかるfopen()コールが不必要に多い模様。

などの理由から、私はCでやれるんならそうしたほうがいいんじゃない?という意見。
0760動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/11 17:59ID:TcI1WiXj
結局1から作り直すことも出来ず
ソースを全部公開することも出来ず
一部分を公開して→直すの繰り返しで
スパゲティ状態を直すことも出来ず
これじゃとても再開発とは呼べない気がします
と禿外な事言ってみる
0765FOX ★
垢版 |
04/04/13 15:57ID:???
サザン★さん お呼び出しです

F22 で proxy999 を取っていると思いますが
全く同じルートで proxy998 も取ってください。

各サーバが BBQ の proxy998 も取りに行きます。
0766サザン ★
垢版 |
04/04/13 21:58ID:???
>>765
かんりょうでーす

999 と同じ場所に 998 がおいてありますー
0767FOX ★
垢版 |
04/04/13 21:59ID:???
>>766
どもども

中身はなにもしなくていいですー
たぶんなにもしていないとおもうけど
0768サザン ★
垢版 |
04/04/13 22:05ID:???
>>767
コメント部分のみ除いてますー
0769FOX ★
垢版 |
04/04/13 22:06ID:???
はいー
0770動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/13 23:19ID:wHXb7vPS
某ぶぇらさんみたいな喋り口の人が来て、改造案で気を吐いていますね
ここじゃ押してばっかりだと、オシモドサレマスヨーヾ('-')ノ
0771FOX ★
垢版 |
04/04/14 00:47ID:???
for some reason

bbs.cgi を更新したので peko サーバよろしくー > root★さん
0773FOX ★
垢版 |
04/04/14 01:36ID:???
>>768
あうーん
やっぱりあちこち欠けて(編集されて)配られるので
F22(各サーバ)が直接 qb4 の 998 を見るようにしました。
ということで、 bbq 側(f22本体)からは 998 はずしてくださいー
0774FOX ★
垢版 |
04/04/14 01:37ID:???
>>772
どもです

これで ほとんど bbs.cgi を更新しなくても済むようになりました。
0775ゆうゆう ◆garnetGnNk
垢版 |
04/04/14 06:05ID:154T0ZtH
>729
そんなしょぼいコードを参考にしたら2ちゃんねるは壊滅しますよ、と。
0778はりねずみ ◆HaRinezUmI
垢版 |
04/04/25 00:51ID:3knUyGrT
GoogleもUTF-8が標準になったことだし2ちゃんねるも
ログとかhtmlとかUTF-8にしてみましょうYO!

別にメリット無いっすね…(´・ω・`)
0779動け動けウゴウゴ2ちゃんねる
垢版 |
04/04/25 23:08ID:c/DIZBZT
別に無い事もないけどUTF8への変換ってコストかかるしやめといた方が良いんでは。
あとサイズもでかくなるような。
0785▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/05/08 10:01ID:NCSGATwU
こちらへも。
【Project peko】2ch特化型サーバ構築作戦 Part11
http://qb3.2ch.net/test/read.cgi/operate/1082990543/800-807

800 :root ★:04/05/08 02:29 ID:???
で、ここの過去スレでも書きましたが、どうもbbs.cgiはたまに暴走することがあるので
(FreeBSDだけじゃなくてLinuxなマシンでも見たことあり、理由は不明)、
何か対策をする必要がある予感がします。

なおuma/pekoサーバでも以前からこの症状起こっているので、

(以下略)
0786ピロリ
垢版 |
04/05/08 22:33ID:WjDFAjOs
サザン★さんに質問でーす

qb2 にある板は他の板との共存は可能ですか?
つまり何を目論んでいるかというと

BBQ , qb2 ,qb3 qb4 等を一台のサーバでまかなおうと、

BBQ , qb5(qb2+qb3) qb6(qb4) ってな感じで、
0787動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/09 00:16ID:gJuMGeKB
初めて書き込みするのでこっそり怖がりながら書き込みます。

# 某所で鯖管理をやっていた関係でつい提案したくなってしまって。

2chのサーバはなんとなくホストによって板が分割されていますが
実際には一つのホスト名で、全すれが運用できるように思えます。

たとえば、

+--------------+    +---------+     
|           |     |       |     
| 負荷分散装置 |------| L3switch |------- ....多数のread.cgiサーバ(Apache)
|  (LVS) .    |     |       |
+--------------+    +---------+
                   |
                   |
                +------------------+
                | Cluster NFSサーバ |
                | OpenAFS・Coda   |
                | もしくはRawDB関係 |(もちろんこれも多数)
                +-----------------+

・LVS-DR(Linux Virtual Server Direct Routing)構成でL3switchにデータ負荷分散を
 行い
・dat関係は、ClusterNFSもしくはOpenAFS、Codaを利用して分散ファイルシステム化
 もしくは、データベースを利用してHDDアクセスの効率化。
・データベースもPostgreSQL系であれば(最近MySQLもそうかな)、負荷分散構成をくめたと
 思います。
・すべての書き込みは負荷分散装置を利用すること。

このようになると、ハードディスクのアクセス速度が落ちると思われるようですが、
実際にはIDEのサーバであれば一般的なL3スイッチの処理速度以上に処理を行うなんてこととは
難しいようですし(というよりプログラムの効率あげないと無理)。

などというのはどうでしょうか? 詳しく構成をくむ必要があればもう少し考えますが・・・。
0788 ◆MUMUMUhnYI
垢版 |
04/05/09 01:39ID:3cazUvGC
>>786
このへんは、何度となく提案されてますね。

たぶん、「お、こりゃいいかも」と思えるような*具体的な*システム構成
(>>787のような概念図レベルではなくて)を提案できるとよいのかも。

特に管理人が納得できるようなのだと、より望ましい気がするです。
0790 ◆F6an1MWJ7o
垢版 |
04/05/09 02:10ID:SnK5lo91
板移転がうざいと言う人が少なからずいるわけで(これが原因でメインをギコナビへ移行中)
p://鯖名.2ch.net/板名/〜ではなく
p://板名.2ch.net/板名/〜にした方がいい感じ

板移転した場合はDNS側でIP(鯖)変更する
0791動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/09 02:11ID:JJgF7R6d
>>790
( ゚д゚)ポカーン
0792 ◆F6an1MWJ7o
垢版 |
04/05/09 02:24ID:SnK5lo91
>>791
D:\katjusha_2ch\log\pc2.2ch.net\mysv\
D:\katjusha_2ch\log\pc5.2ch.net\mysv\

D:\gikoNavi\Log\2ch\mysv\

D:\jane\log\ネット関連\mysv\
*janeは多言語環境の場合(削除不可能な)文字化けフォルダを作る為論外

何か?
0795 ◆F6an1MWJ7o
垢版 |
04/05/09 02:53ID:SnK5lo91
>>794
なじぇ〜?

と聞くのはやめよう
なんとなく分かった

それなら
www.2ch.net の鯖を大量に作る
*download.windowsupdate.com をnslookupして下さい
これが外部と接続できる鯖
リダイレクトで内部鯖の内容を返す
www.2ch.net/sec2ch/ => qb3.2ch.net/sec2ch/の内容を出す
www.2ch.net/mysv/ => pc5.2ch.net/mysv/の内容を出す
この時qb3.2ch.net・pc5.2ch.netは外部から直接の接続不可
0800動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/09 08:19ID:fUCJr0rx
>>799

>板移転がうざいと言う人が少なからずいるわけで(これが原因でメインをギコナビへ移行中)
これでしょ。負荷分散の考えとは別かと
0801
垢版 |
04/05/09 08:47ID:yaHv/z05
確かにユーザとしては板移転への対応はわずらわしい。
板移転はユーザの手間を考えると、管理側としてもおいそれとは
できないんじゃないかな。

DNS 使えば解決できるよね。
0802▲ 某ソレ511
垢版 |
04/05/09 09:25ID:P1CnVYGu
かちゅーしゃのために2chが存在するのかよ、という話ですな、、
>>790 >>792 これじゃあ反感もたれてもしゃあない。>>787とは別の話ですよ、
0805787
垢版 |
04/05/09 11:38ID:gJuMGeKB

意見ありがとうございます。

そですね、もう少し具体的な案にしてから持ち寄りたいかなと思います。
私が一番メリットとしたいのは、負荷分散装置を介することによって、
プログラム的には一つのホストに対しての書き込みを行うのみ(クッキーとかありゃあしますが・・・)
を行うように見せるだけでよく、言ってみればread.cgiやbbs.cgiを
すべてシングルソース化が行うことができるように思えます。

つまり、多数のサーバ環境を考えるのではなくて、
一つのソースコード(実行ファイル)が複数のホストにコピーされているだけで
2chの運営が行えればいいかなと。

そうなれば、削除人分担とかサーバ管理分担とかすごく楽になると思います。
機能的には、HTTPサーバとファイルサーバ(DB?)の二つになるだけですから。

あと、負荷分散機にかかる負荷はほとんど無いと思ってください。
実際テストしている環境の中では、6000セッションを行った場合でも
負荷率は0.00でした。平均アクティブセッションはだいたい300を越えることもあまり無かったですが。

えーとというわけなんですが、スレをたてるほど意見も固まっていないので
いちど意見が固まってからもう一度投稿します。
そのときにスレたての話と言うことで・・・・。
0806787
垢版 |
04/05/09 11:41ID:gJuMGeKB
あと、どうせアーキテクチャとインフラ周りをいじるなら
可能な限り現状を無視しつつ、可能な限り互換性(データぐらい?)を
取ろうぜというのが方針だったりもします。

どうせなら早く・管理楽のほうがあとあといいもーんといい感じです。
ではでは。
0807▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/05/09 11:44ID:ktJoDjUM
787氏

とりあえず2chのデータまわりで一番重要なのがdatの互換性ですからね。
そのあたりさえどうにかなれば後はいかにして負荷を減らすかという問題になりますから。

直接メールであなたの提案を総帥に伝えたほうがいいかも。
0808787
垢版 |
04/05/09 12:05ID:gJuMGeKB
どうもです。

>> ▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo さん

いやぁ、そこまで行くようなものでは・・・。
本気でやるなら死ぬほど本気でやりますが、
まだそこまでのこととは思っていませんので。

今のところせいぜい土日の暇つぶし程度のものです。
それに現状がよくわかっていない中で特攻かけてもこわいし。

あと、アーキテクチャとネットワーク周りについてですが
たぶんデータ周りについての互換性保証はまぁー時と場合によるかと。
面倒ならば、分散ファイルシステムで共有フォルダでも作った方が早いし、
データベースの限界を試すのなら、データベースを作った方がいいし。
その辺はもう少し2chのサーバ現状知ってからかなぁと。

ではでは。
0810動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/09 17:17ID:CRKWv/5c
he.netのスイッチの帯域問題について検索したか?

L3バランサーの超具体的な設定法(confファイルをそのままソースで貼るぐらいのレベル)

このあたりを解決して提案するのはいかがだろうか?
0812サザン ★
垢版 |
04/05/09 18:05ID:???
>>786
削除系の板(saku、saku2ch)とそれ以外の普通の板を同じサーバ置くってことですかー?
0814ピロリ
垢版 |
04/05/09 18:36ID:fxy1sLJ/
>>812

qb5 = qb2 + qb3 をやろうかなって思っているけど
ちゃんと動くかな? が知りたいのです
0816サザン ★
垢版 |
04/05/09 21:12ID:???
>>814
qb2 の bbs.cgi は他のサーバと統一しているので、いけるはずですー
そのサーバには sakubbs.cgi 入れないといけないですけど、
0819動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/09 22:33ID:yksp9KtL
>>740
利用者を(見かけ上)待たせない小技。
処理の最初で標準出力と標準エラー出力を閉じると
利用者のブラウザには結果がすぐに表示される。(htttpd依存?)
成否が分からないのが難点ですが...
-----------------
#!/usr/bin/perl

print "Content-Type: text/html; charset=shift_jis\n\n";
print "処理を受け付けました";
close STDOUT;
close STDERR;
# 時間の掛かる処理

0821ひろゆき@どうやら管理人 ★
垢版 |
04/05/12 17:37ID:???
>>819
書き込み後にウエイトを置いてるように、
利用者をわざと待たせるようにしていたり、、、
>最近のbbs.cgi
0822動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/12 17:48ID:6FcSbOY+
>>821
途中経過を表示させるってのはいかが?

アクセス規制チェック中。。。 OK
連投規制チェック。。。 OK
ごにょごにょチェック中。。。 NG
ERROR!
お布団干したままですよ( ̄ー ̄)ニヤリッ

みたいな。
0823ひろゆき@どうやら管理人 ★
垢版 |
04/05/12 17:50ID:???
途中経過を表示することになんか意味あるのかなぁ、、、
0825動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/12 17:56ID:6FcSbOY+
>>823
リロード抑止にならないかなって。
何も表示されることなくただ待たされるとなると F5 押したくなるっていうのが一般的心理かと。
0826動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/12 18:07ID:6FcSbOY+
あと蛇足になるんだけれども、書き込み後の自動ジャンプは切れないかな?
わざわざ100KB以上もある板トップに強制移動したところで無駄な転送が発生するし、
誰もが板トップに戻ることを期待していない(書き込み元のスレッドに戻りたい場合もある)かもしれないし。

板トップの広告に関しては、「書きこみました」画面に入れてもいいんじゃないかな?
0827▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/05/12 18:23ID:1zJCvsBa
それだったら

「書き込み処理しています、しばしお待ちください。。。」

(エラーならここで表示)

(処理が終わった)

「終わりました。5秒後にトップページへ飛びます」

(直後にmetaタグを仕込む)

(終わり)

でいいような気がしますが。>提案者&総帥
0828ピロリ
垢版 |
04/05/12 18:32ID:Co1qIlT3
「歯みがいたか?」

「宿題やったか?」

「風呂はいったか?」

「妹の様子はどうだい?」

「肛門の調子はどうよ?」

でいいような気がしますが。
0830 ◆f0.zuburi6
垢版 |
04/05/12 19:05ID:s/b9IZ17
肛門は晴れ 所により一時血が出るでしょう
08327M. ◆dq7M./4Uw.
垢版 |
04/05/12 22:40ID:mghzDR5j
自動じゃんぷきれー、
っつのは前からさんざんがいしゅつきしゅつだった希ガス元素。
0833動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/13 02:33ID:N90mjkQ6
本題とは逸れるが自動ジャンプなんて要らないと思う。

-------------------------
書き込みが終了しました。

・○○板(リンク)
・にちゃんねる(リンク)

-------------------------

これくらいで良いっしょ。
0835nobody
垢版 |
04/05/16 18:42ID:iQGerbOS
>805
そこそこ使えるL4 ロードバランサって300万円ぐらいするよね、Alteonとか
F5とかServer Ironとか。

それを海の向こうに設置して運営するコストは馬鹿にならんと思う。
このての保守契約は24h365dayにすると極端に高くなるから
0836787
垢版 |
04/05/17 23:48ID:xGAOnJKQ
負荷分散機のパフォーマンス調査を行っていました。
むちゃくちゃ返信遅れていますし、ややスレ違いな場所に返信してごめんなさい。
・・・そろそろスレたてた方がいいのかな・・。

>835

そうなんですよね。高すぎるんですよ。
ただいま、負荷分散機のパフォーマンス調査を行っているんですが、
やたらと古いデータしかないんですよね・・・。

ttp://www.veritest.com/clients/reports/f5/layer4_layer7_comparison.pdf
ttp://www.linuxvirtualserver.org/Joseph.Mack/performance/single_realserver_performance.html

やっぱりソフトウェアベースでは無理かなぁ。
となると一度実験してみないとだめかも、どこかでこっそりとやってこよう。
0838とんすけ ◆MytskeE.Vg
垢版 |
04/05/21 12:47ID:psZQ4yMs
こっちにも関りがあることなのでコピペ。

22 :動け動けウゴウゴ2ちゃんねる :04/05/21 10:54 ID:/Wl6bf1i
AirH"PHONEセンター特認IPアドレス帯域追加おながいします

AirH"PHONEセンターIPアドレス帯域
http://www.ddipocket.co.jp/p_s/products/airh_phone/ip.html
61.198.167.0/24
61.198.253.128/25
追加

0840動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/26 22:39ID:lLrBTJ+c
>>827
seikou=0
sippai=1
era=1
if(kakikomi=0)
{
mes "書き込み処理しています、しばしお待ち下さい。。。"
seikou=seikou+1
}
elseif
{
mes "エラーですよん。。。( ̄ー ̄)ニヤリ"
}
if(seikou=2)
{
wait 500
mes "終わりました。五秒後にトップページへ飛びます。"
goto *top
}
stop
0841動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/27 23:30ID:6Yr/+iFH
119 名前:サザン ★ 投稿日:04/05/27 23:15 ID:???
むぅ

bbq.2ch.net
148 processes: 1 running, 147 sleeping

120 名前:動け動けウゴウゴ2ちゃんねる メェル:sage 投稿日:04/05/27 23:15 ID:ThpJLAhB
C:\WINDOWS\デスクトップ>ping bbq.2ch.net

Pinging bbq.2ch.net [206.223.147.35] with 32 bytes of data:

Reply from 206.223.147.35: bytes=32 time=118ms TTL=46
Reply from 206.223.147.35: bytes=32 time=119ms TTL=46
Reply from 206.223.147.35: bytes=32 time=120ms TTL=46
Reply from 206.223.147.35: bytes=32 time=137ms TTL=46

Ping statistics for 206.223.147.35:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 118ms, Maximum = 137ms, Average = 123ms
?

121 名前:南アルプス ◆28UfbftxkA  投稿日:04/05/27 23:16 ID:AFwyjLAs
>>119
それは直ってないとの見解で宜しいでしょうか?


123 名前: ◆f0.zuburi6  メェル:sage 投稿日:04/05/27 23:17 ID:Wg2kMH9n
>>119
一度に一個しかプロセスが走らない?

124 名前:動け動けウゴウゴ2ちゃんねる メェル:sage 投稿日:04/05/27 23:18 ID:K2FslckF
BBQが止まったなら、、、(ry

125 名前:未承諾広告 ◆TWARamEjuA  メェル:sage 投稿日:04/05/27 23:19 ID:JtwbarS8
>>119
media: Ethernet 10baseT/UTP <full-duplex>
これってまずくないですかねぇ(汗)

127 名前: ◆Reffi/bQ.c  メェル:sage 投稿日:04/05/27 23:21 ID:nGsxpDn8
>125
あ〜ひゃひゃひゃ
それじゃぁ、めちゃくちゃ重くて当たり前のような(滝汗

128 名前:動け動けウゴウゴ2ちゃんねる メェル:sage 投稿日:04/05/27 23:22 ID:l+Xr0uKn
なんでmulch-proccessingができないんかな・・・。<bbq
rootさんはいないのかな。
0842動け動けウゴウゴ2ちゃんねる
垢版 |
04/05/31 23:29ID:bs05VOav
超カメレスで悪いが、随分前にあった「IO::File使え」という意見。
IO::FileをuseするとIO::SeekableだのFile::Specだの余計なモジュールを
中で読みまくるので、激しく重くなるよ。

open my $fh, '<', './unko.txt';
...
close $fh;

オブジェクト指向でファイル操作するのは諦めて、こうやった方が軽い。
0846動け動けウゴウゴ2ちゃんねる
垢版 |
04/06/02 07:00ID:g/lHGssg
>>844
read.cgi以外の*.cgiを処理するmod_perl有効のhttpdと。
*.gif|*.htmlなどの固定ファイル専用のSTATICビルドしたhttpd。
その二つを別ポートもしくはaliasした別IPで立ち上げて。
poundで分岐するってのはどうだ?
0847mod_perl
垢版 |
04/06/02 09:46ID:qSUlVdsV
おそらく>>844は理解できていないか失敗した厨房
Apache拡張ガイドでも嫁

>>846
2chにそのような運用を期待するのは浅はかだと思わんかね
0848動け動けウゴウゴ2ちゃんねる
垢版 |
04/06/02 13:03ID:j+uMUo52
そもそも、httpd数とプロセス(コネクション)数は1対1にする必要ないんだけどね。
httpdが数百個も動いてメモリが気になるなら、マルチスレッドで動かせばいいだけでしょ。
apache2を使っているんだから。
0852 ◆Reffi/bQ.c @reffi@報告人 ★
垢版 |
04/06/11 17:08ID:???
my $ripfile = $PATH . "内緒";
my (@IP, @IIP, $TIP);


if($FORM{'subject'} ne ""){

#スレッド立てすぎチェック
my (@IP, @IIP, @ZIP, $TIP, $VIP, $SIP, $JIP, $HIP);

$TIP = $HOST;
$TIP =~ s/<(.*)>//g;
$VIP = $TIP;

if($FLAG == 5){
$TIP = $FORM{'sid'};
$TIP =~ s/\W/\\$&/g;
}else{
0853 ◆Reffi/bQ.c @reffi@報告人 ★
垢版 |
04/06/11 17:09ID:???
my @ippart = split(/\./, $TIP);
$JIP = $ippart[0];
if($TIP !~ /[a-zA-Z]/o){
$TIP =~ s/[0-9]+$//o;
$TIP = "^" . $TIP;
}elsif($JIP =~ /[x\-\.\d]{12}/o){
$TIP =~ s/([x\-\.\d]{5})([x\-\.\d]*)/$1\.\*/o;
}elsif($JIP =~ /\d{8}/o){
$TIP =~ s/(\d{3})(\d*)/$1\.\*/o;
}else{
if(@ippart < 5){
$TIP =~ s/\d+/\.\*/g;
}else{
if(($ippart[@ippart-6] =~ tr/\d/$&/) > 4){
$TIP = $ippart[@ippart-6];
$TIP =~ s/\d.*/\.\*/g;
}else{
$TIP = "";
}
$TIP .= "$ippart[@ippart-5].$ippart[@ippart-4]";
$TIP =~ s/\d+/\.\*/g;
$TIP .= ".$ippart[@ippart-3].$ippart[@ippart-2].$ippart[@ippart-1]";
}
}
$HIP = "$ippart[@ippart-3].$ippart[@ippart-2].$ippart[@ippart-1]";
}
0854 ◆Reffi/bQ.c @reffi@報告人 ★
垢版 |
04/06/11 17:09ID:???
# 書き込みログファイル
open(RIP,"<$ripfile");
@ZIP = <RIP>;
close(RIP);
# 書き込みホスト保存
open(WIP,">$ripfile");
#flock(WIP,2);
print WIP ("$HOST,$FORM{'sid'},$FORM{'key'}\n", @ZIP)[0..$SETTING{'BBS_THREAD_TATESUGI'}-1];
close(WIP);

}
0858動け動けウゴウゴ2ちゃんねる
垢版 |
04/06/12 14:58ID:8VflbAB0
あげとく
08597M. ◆dq7M./4Uw.
垢版 |
04/06/12 17:23ID:O0ZFAfUU
>856
なんか他の色々なところに使ってて、
すれたて規制には使ってないらしらし、
0860動け動けウゴウゴ2ちゃんねる
垢版 |
04/06/12 17:28ID:Cfpi0Eq0
112 名前:FOX ★[] 投稿日:04/06/12(土) 17:25 ID:???
bbs.cgi に入れることに成功した

んじゃ 実際に呼んでみよう。。。
0861動け動けウゴウゴ2ちゃんねる
垢版 |
04/07/07 18:38ID:o8lB/EVs
もう開発しないのか?
0862動け動けウゴウゴ2ちゃんねる
垢版 |
04/07/09 16:34ID:xo7Sweag
cgi以外に、通常ブラウザを制御できるプログラムはないのですか?
0863動け動けウゴウゴ2ちゃんねる
垢版 |
04/07/09 16:37ID:qeTzhCtY
>>862

どうぞこちらへ

WEBプログラミング@2ch掲示板
http://pc5.2ch.net/php/

サーバーサイドプログラミング関連の話題を扱っています。

Perl, PHP, Java, Ruby, C, Tcl といった言語処理系の話、
Apache, CGI, JSP/Servlet, ASP, ColdFusion といったアプリケーション実行環境の話、
Oracle, PostgreSQL, MySQL といったデータベースの話などをテーマにしています。

スレタイトルは言語がハッキリわかるようにしてください。(言語を特定する場合)
配布中止/配布元不明スクリプトが欲しい人はダウンロード板へ
JavaScript、VBScript等クライアントサイドの話題はWeb製作板へ
0864動け動けウゴウゴ2ちゃんねる
垢版 |
04/07/09 16:40ID:xo7Sweag
>>863
板違い失礼。
ありがとねんノ
0865
垢版 |
04/07/11 03:05ID:g55t+9Ba
test
0867本7
垢版 |
04/07/24 10:41ID:j1AbFFVk
Apacheモジュールのmod__bbsならあるけど2chで使うにはコアすぎるかな?
0868本7
垢版 |
04/07/24 11:51ID:j1AbFFVk
てか新bbs.cgiってもう完成したんだっけ?
0869動け動けウゴウゴ2ちゃんねる
垢版 |
04/08/07 16:35ID:+FhTqV9+
NGワードのことだけんども

"&r"を削除するんでなくて、"&amp;r"に変えるようにできないかな。
現状の抜け穴対策と、通常の投稿として"&r"がある時の救済策。

スレッドタイトルのNGワードも同様の処理にして欲しい。
現在の、"&"を全て削除する方法では誤爆が多すぎる。
0872動け動けウゴウゴ2ちゃんねる
垢版 |
04/08/08 20:56ID:GsL2iQKg
一応書いとくと、bbs.cgiにもNGワードがございまして、
特定の文字列があると投稿できなかったり、或いは
別の文字列に変えられたり、削除されたりするのですね。
0881
垢版 |
04/09/17 13:41:16ID:I3k6ObmZ

0882Giraffes ◆uHAyZd8FGA
垢版 |
04/09/23 21:42:07ID:tCfWkHg0
bbs.cgiが処理するvalue値、形式は何なんでしょか?
<input type=hidden name=time value=1095940962>

初歩的な質問ですみませんが、どなたか <(_)>
0884882
垢版 |
04/09/24 08:49:47ID:QH62aZR5
ですね (_)m
0885
垢版 |
04/10/13 14:31:35ID:topL7/m/
.
0897動け動けウゴウゴ2ちゃんねる
垢版 |
04/11/05 20:50:15ID:J43AHOGt
とりあえずさ、どう考えても今のやつに手を加えるのが現実的ではないだろうか
誰か有能な人を雇用してよ。
俺とか。
0900root▲ ★
垢版 |
04/11/06 09:52:53ID:???
不動楽さんが手を入れて、明らかに板飛びが減ったですね。
0901通りすがりのUNIX屋
垢版 |
04/11/07 10:01:10ID:mqnEPazJ
共有メモリ使ってはいかがですか?
共有メモリ上にスレッド毎のメッセージ数入れておいて、共有メモリを更新する数msecだけ
SYSVセマフォ(若しくはPOSIXのセマフォ)で排他。
1000を多少越えても良いのだから参照に排他は不要。
SYSV共有メモリで足りなければmmapの共有メモリで。

処理フロー
1.規制確認
2.レス数確認
3.共有メモリロック
4.レス数インクリメント
5.共有メモリロック開放
6.datにアペンド。
0902▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/11/08 16:45:33ID:WD2hE2cd
mod_cgidso入れさせてテストさせて見たいといってみるテスト
せっかく5.3Rもでたことですし、exで実験!と振ってみるテスト

>>900
つーことは今のbb.cgiソース管理者は不動楽さんということでFA?

>>901
mmapはかなりコストを食うということで却下された経緯があったはず
0903root▲ ★
垢版 |
04/11/09 02:39:27ID:???
>>902
管理者というか、いじっている人の一人かと。
0904▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/11/09 09:22:11ID:hTgm05bT
>>903
ふむ、では今いじれるのはrootさんを除くと(一部はその気になればいじれるため)

ひ(りゃ(ほとんど触っていなさそうだけど)
見習い
不動楽

あとだれがいましたかね。
0907 ◆cZfSunOs.U
垢版 |
04/11/15 22:41:54ID:ZCkDk6ko
read.cgi はともかく bbs.cgi で mod_cgidso を使うとなると,
普通の実行可能バイナリじゃなくて共有オブジェクトにしなきゃいけないとか,
自前でリソース解放してくれないとどんどんリークしていっちゃうとかで,
perlcc で直接バイナリ作るんじゃなくて,生成された C コードを
手作業で直さなきゃならないんでしょうけど......

まぁ bbs.cgi に関しては,fork() させないようにするなら
mod_perl の方が現実的かなとは思います.

あとは,suExec の代替措置も必要なんでしょうけど,
perchild MPM よりも安定して動くと言われているのがこれ.
    Metux MPM http://nibiru.borg.metux.de:7000/wiki.mpm/

**********************************************************************

個人的に bbs.cgi 関連で気になっているのは,まずは ftp のリンク URL が
おかしくなること (ex. ftp://core.ring.gr.jp/pub/ ).これは ime.nu で
ftp リンクを扱えるようになっていなければ,ime.nu を入れず直リンに
した方がいいのかも知れませんけど.

あとは,NAME/MAIL の Cookie の問題ですね.設定がサーバサイド,
読み出しがクライアントサイドという不整合のため,Mozilla 等では
文字化けしてしまうと.現状では Set-Cookie ヘッダで設定していますが,
これを JavaScript の方で設定すればいいのではないかな,と.
とはいえ,bbs.cgi 出力に Cookie 設定用 JavaScript コードを入れると,
" や \ を \ でエスケープさせる必要がありますが,Shift JIS だと
漢字等の2バイト目が \ になることもあるんで,この判定をきっちりやるのも
結構大変か......むしろ bbs.cgi 出力では行わず,投稿フォーム側の
onsubmit() でこの処理をやらせた方が安全ですかね.
0908 ◆cZfSunOs.U
垢版 |
04/11/15 22:43:05ID:ZCkDk6ko
その場合の各板トップ及び read.cgi 出力の JavaScript コード変更案.
----------------------------------------------------------------------
onload = function(e) {
    var N = getCookie("NAME"), M = getCookie("MAIL"), i;
    with (document)
        for (i = 0; i < forms.length; i++)
            if (forms[i].FROM && forms[i].mail) {
                forms[i].FROM.value = N;
                forms[i].mail.value = M;
                if (forms[i].addEventListener)
                    forms[i].addEventListener("submit", setCookie, false);
                else
                    forms[i].onsubmit = setCookie;
            }
};

if (!Date.prototype.toUTCString)
    Date.prototype.toUTCString = Date.prototype.toGMTString;

function setCookie(e) {
    var exp = new Date();
    exp.setMonth(exp.getMonth() + 1);
    document.cookie = "NAME=" + escape(this.FROM.value) + "; path=/; expires=" + exp.toUTCString();
    document.cookie = "MAIL=" + escape(this.mail.value) + "; path=/; expires=" + exp.toUTCString();
}

function getCookie(key, tmp1, tmp2, xx1, xx2, xx3, len) {
    tmp1 = " " + document.cookie + ";";
    xx1 = xx2 = 0;
    len = tmp1.length;
    while (xx1 < len) {
        xx2 = tmp1.indexOf(";", xx1);
        tmp2 = tmp1.substring(xx1 + 1, xx2);
        xx3 = tmp2.indexOf("=");
        if (tmp2.substring(0, xx3) == key)
            return unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1));
        xx1 = xx2 + 1;
    }
    return "";
}
0910動け動けウゴウゴ2ちゃんねる
垢版 |
04/11/22 23:29:27ID:lGHEU7j1
もう今はスクリプト配布してないんだっけ?
4.2ぐらいのころのは持ってるよ。
0911動け動けウゴウゴ2ちゃんねる
垢版 |
04/11/24 13:24:29ID:ZoS47VUx
MySQL使えないんでしょうか?
ファイルシステムでこの規模なんて自分では考えられないです。
DATを返すインターフェイス作っておけば問題ないと思うのですが・・・。
0915動け動けウゴウゴ2ちゃんねる
垢版 |
04/11/24 21:22:09ID:oKqt30OR
>>914
DMDM と MDMD の MD5 を算出して、DB(MySQL) と照らし合わせて合致すれば桶だと思うので、
その部分以外は使い回しかと思われんこん。
0917動け動けウゴウゴ2ちゃんねる
垢版 |
04/11/28 23:37:38ID:LLgV0enQ
>>911
過去ログ検索とかではDBは有効だけど、ライブスレッドなら
ファイルのが負荷少ないしベストな選択のように思うけど、
どうなんだろう。
0919動け動けウゴウゴ2ちゃんねる
垢版 |
04/11/28 23:59:22ID:6IOqzKJj
>917
ファイルシステムにするとキューだのロックだのを同期する必要がある。
MySQLだと、そのあたりはデータベースに任せられる。

また、MySQLをバックエンドにして、閲覧系を複数にして負荷分散するのが非常に楽になる。
0920917
垢版 |
04/11/29 00:10:17ID:h4Qkpn0t
そうか書き込みのことを忘れてた・・・スマソ
MySQL速いらしいいいかもね。
0924動け動けウゴウゴ2ちゃんねる
垢版 |
04/11/29 20:55:08ID:4MCabMvy
そーゆーんじゃなくってさ、
bbs.cgi の改良でだいぶよくなる気がする。
だって何あのソース??
おっきく仕様変えなくても。。
0925動け動けウゴウゴ2ちゃんねる
垢版 |
04/11/29 22:24:47ID:ePnTCL4s
>923
Perl DBIでインターフェースを作っとけば、仮にCで書きなおしたりしてもインターフェース部分だけ変えればよいと。
んでDBはDBで切り離してチューニングが出来ると。
閲覧系のキャッシュ同期とかがけっこうノウハウあるらしいので高負荷サイトはそれなりに難しいらしいけど。
0926動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/01 21:55:38ID:fVLVA0+J
関連ページをクリックして、Pingを発射したとき
どう足掻いてもスレッドのURLの末尾の/が相手先に送れないのですが
この問題もこちらでよろしいでしょうか?
2ちゃんねるpingβのスレがあるといいのですが、見あたらないので・・・
0929FOX ★
垢版 |
04/12/02 14:59:24ID:???
これから質問しまくるんで
優しく教えてください。

つまり Perl を知らないぼんくらなんです
0930FOX ★
垢版 |
04/12/02 15:02:26ID:???
sub bbs_main
{
our$version = "BBS.CGI - 2005 (for SpeedyCGI)";

&DispError2("FOX ★","<font color=green>FOX ★ ふふふっ</font>");
return;
}

とやって $version を DispEooro2 というサブルーチンで参照したいのですが
どうすれば参照できるんですか?

$version は SpeedyCGI に対応した、いわゆるグローバルな変数ではなく
ローカルな変数です。

ちなみにこうやって失敗しています(500 error)

print <<EOF;
version = $version
EOF
0932▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/12/02 15:25:56ID:WBZMaSLu
>>930
この例だと
-------------------
#! /usr/local/bin/speedy --r1

our $version = "BBS.CGI - 2005 (for SpeedyCGI)";

sub bbs_main
{

&DispError2("FOX ★","<font color=green>FOX ★ ふふふっ</font>",$version, $errnum);
return;
}
-----------
Dispの第2引数にversionを渡すようにしています。
errnumはエラー番号(たとえばapacheのエラーコードとか)
0933root▲ ★
垢版 |
04/12/02 15:27:12ID:???
FOX ★
FOX ★ ふふふっ

ホストHOST
FORM{'subject'}
名前: FORM{'FROM'}
E-mail: FORM{'mail'}
内容:
FORM{'MESSAGE'}

こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。

アクセス規制・プロキシー制限等規制は、2ちゃんねるビューアを使うと回避できることがあります。BBS.CGI - 2005 (for SpeedyCGI)

が出る時と、出ないで500 Internal Server Errorになる時がありますね。
0934▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/12/02 15:30:00ID:WBZMaSLu
>>930
あ、まちがい、ローカル変数だったですね。スマソorz

# 実は私もperlはあまり詳しくない・・・むしろPHPのほうが強い

printはdisperror内でですかね。
0936FOX ★
垢版 |
04/12/02 15:53:29ID:???
いやー

まったく

たいへんたいへん
0938FOX ★
垢版 |
04/12/02 15:58:54ID:???
http://dso.2ch.net/test/bbs.txt

現時点での全ソース

今つまずいているところ【2】
$NOWTIME がローカルな変数になっていない
起動されるたびに変わらない

私の言っているローカルと一般的に言うローカルの意味が違うのかも、
別に私が言っているわけじゃないけどサ
0939FOX ★
垢版 |
04/12/02 16:10:39ID:???
でも、たまに変わるなぁ
ちょっと時間を置くと換わるのか?

http://dso.2ch.net/myanmar/

ここでやってます
0940root▲ ★
垢版 |
04/12/02 16:13:12ID:???
>>939
1分以上バックエンドにリクエストがないと、バックエンドをexitするようにしてあるので、
その時には元に戻ります。

やめる場合、bbs.cgiの1行目の-t60をやめればよいです。
0941FOX ★
垢版 |
04/12/02 16:14:49ID:???
なるほど、

-t60 なしでデバッグしたほうがいいっすね、
0942FOX ★
垢版 |
04/12/02 16:15:43ID:???
#!/usr/local/bin/speedy -- -b1048576

にした
0943 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 16:31:19ID:yl4eb3hK
ぜんぜんわからんな・・・orz

http://www.google.co.jp/search?q=cache:Fh2W0Hmt6b8J:qtea.bne.jp/2004/+PersistentPerl+OR+SpeedyPerl+OR+SpeedyCGI+%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0&hl=ja&lr=lang_ja
あたりに原因があるようだ。CGIモジュールは、でかいからねえ。なので、SpeedyCGIを使うように変更してみたが、どうやら、グローバル変数の初期化をしてないようなので、reset 'a-z';を先頭行に追加してみた。これで、なんとなく、まともに動作しているようだ。
0945FOX ★
垢版 |
04/12/02 16:53:42ID:???
>>944
それやってみたけど、だめだったぞな
0946FOX ★
垢版 |
04/12/02 17:01:01ID:???
PID=$$ も書くようにした

当然のことながら、いつも同じPID、、、
さてさて〜、どうすればいいやら
0947root▲ ★
垢版 |
04/12/02 17:04:34ID:???
なるほど、、、。

常識的に(というか半ば無意識に)使っていたものが、使えなくなるですね。
代替手段は大体あるに違いないけど、こむずかしそうだ。
0948FOX ★
垢版 |
04/12/02 17:08:27ID:???
Time::time なんてのもあるんですか? < Perl
0949動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 17:20:37ID:YeLg7Dw8
こういうノリではいかがでしょうか。

&bbs_main;
exit;

sub bbs_main {
my $GB = {};
$GB->{version} = "BBS.CGI - 2005 (for SpeedyCGI)";
$GB->{NOWTIME} = time;#現在時刻
$ENV{'TZ'} = "JST-9";#日本
#$ENV はそのまま使う
my %FORM;
$GB->{FORM} = {};
&foxReadForm($GB);#$FORM を読み込む

&DispError2($GB, "FOX ★","<font color=green>FOX ★ ふふふっ</font>");
return;
}

sub DispError2
{
my ($GB, $title, $topic) = @_;

print "Content-type: text/html; charset=shift_jis\n\n";
#-----------------------------------------------------------------------
print <<EOF;
<html>
<head>
<title>$GB->{title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body bgcolor="#FFFFFF"><!-- 2ch_X:error -->
<font size=+1 color=#FF0000><b>$GB->{topic}</b></font>
<ul>
<br>ホスト<b>HOST</B><br><b>GB->{FORM}->{'subject'} </b><br>
名前: $GB->{FORM}->{'FROM'}<br>E-mail: $GB->{FORM}->{'mail'}<br>
内容:<br>$GB->{FORM}->{'MESSAGE'}<br><br>
</ul>
<center>こちらでリロードしてください。<a href="../$GB->{FORM}->{'bbs'}/index.html"> GO! </a><br>
分からないことがあったら<a href="http://info.2ch.net/guide/">2ちゃんねるガイド</a>へ。。。<br><br>
アクセス規制・プロキシー制限等規制は、<a href="http://2ch.tora3.net/">2ちゃんねるビューア</a>
を使うと回避できることがあります。
</center>
<p>
time=$GB->{NOWTIME}<br>
$GB->{version}
</body>
</html>
EOF
#-----------------------------------------------------------------------
exit;
}
0950FOX ★
垢版 |
04/12/02 17:30:39ID:???
>>949
おおっ そういうほうが好き好き

$GB は構造体(クラス)と思えばいいのかな?
要素(メンバー)を追加するのは、たんに $GB->なんとか
とやれば追加されるのかな?

んで my で宣言されていても使い方がグローバルなら
結局はグローバルな変数になっちゃうということなのかしら?
0951動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 17:33:45ID:WZTWIT/v
sub init_onceを書いて、初期化ルーチンを押し込めましょう。

そして初期化ずみフラグを見てrace condition回避も忘れずに。
0953 [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 17:37:57ID:yl4eb3hK
SpeedyCGIインストール完了

なんとなく離してみた
なぜか動いた
なぜだ〜〜〜

my $NOWTIME;#現在時刻
&bbs_main;

exit;

#########################################################
sub bbs_main
{
my $version = "BBS.CGI - 2005 (for SpeedyCGI)";
$NOWTIME = time;#現在時刻
0954FOX ★
垢版 |
04/12/02 17:53:42ID:???
>>952
なんでしょうねぇ
my しても、実際に使い方が悪かったらどっかに(CS?) 実態が
作られちゃうんでしょうねぇ
0955動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 17:56:29ID:WC2kwP6B
んもう、書き直すならオブジェクト指向で書き直せばいいのに。
オブジェクト指向ならmod_perlの道が見えるのに。
0956FOX ★
垢版 |
04/12/02 17:58:44ID:???
>>955
それは大変すぎるですよ、私にとっては
次の世代の方々への贈り物ということで、

SpeedyCGI でかなり改善することが知りたいというのが目的なもんで
「かなり改善」が望めないならお蔵入りという話し。
0957FOX ★
垢版 |
04/12/02 18:00:25ID:???
http://dso.2ch.net/test/bbs998.txt

現在の bbs.cgi

こまっているところ【3】
&foxReadForm($GB);#$FORM を読み込む
安易に代入しただけじゃ駄目なの?

$GB->{FORM} = %FORM;  ← この部分

0959FOX ★
垢版 |
04/12/02 18:12:56ID:???
やってみるです
0960FOX ★
垢版 |
04/12/02 18:16:02ID:???
sub foxReadForm
{
my ($GB) = @_;

my $query_string = undef;
my (@m_elements, $m_element, $name, $value);
my %FORM = $GB->{FORM};

で駄目だった。 (my $FORM だと 500 error だった)
0961動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 18:17:51ID:YeLg7Dw8
うひょ。

sub foxReadForm
{
my ($GB) = @_;

my $query_string = undef;
my (@m_elements, $m_element, $name, $value);
my $FORM = $GB->{FORM};

#環境変数からPOSTのでーたをもらう〜
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
@m_elements = split(/&/, $query_string);
foreach $m_element (@m_elements) {
($name, $value) = split(/=/, $m_element);
$value =~ s/\0//g;
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\r\n|\r|\n/<br>/g;
$value =~ s/<br>/ <br> /g;
$value =~ s/[\0\x00-\x1f]//g;

$FORM->{$name} = "$value";
}
}


#1行データからは改行を削ってタグを閉じます
$FORM->{'subject'} =~ s/\#//g;
$FORM->{'subject'} =~ s/ <br> //g;
$FORM->{'subject'} =~ s/&//g;

$FORM->{'FROM'} =~ s/"/"/g;
$FORM->{'FROM'} =~ s/ <br> //g;
$FORM->{'mail'} =~ s/"/"/g;
$FORM->{'mail'} =~ s/ <br> //g;

$FORM->{'bbs'} =~ s/\|//g;
$FORM->{'bbs'} =~ s/\\//g;
$FORM->{'key'} =~ s/\|//g;
$FORM->{'bbs'} =~ s/\.//g;
$FORM->{'key'} =~ s/\.//g;
$FORM->{'bbs'} =~ s/&//g;
$FORM->{'key'} =~ s/&//g;
$FORM->{'time'} =~ s/\D//g;
$FORM->{'bbs'} =~ s#/##g;
$FORM->{'key'} =~ s#/##g;


$FORM->{'subject'} =~ s/&r//g;
$FORM->{'FROM'} =~ s/&r//g;
$FORM->{'mail'} =~ s/&r//g;
}
0962FOX ★
垢版 |
04/12/02 18:18:47ID:???
勘違いしているかな?

もう一回挑戦
0963FOX ★
垢版 |
04/12/02 18:19:32ID:???
>>961
どもども
コピペさせてもらいます、
0964FOX ★
垢版 |
04/12/02 18:21:55ID:???
わーい
うまくいった。

次へ行こう。
0965▲:/usr/local/bin/ch2 -o i686 ◆P8fXJj6wwo
垢版 |
04/12/02 18:22:08ID:WBZMaSLu
>>955
さすがにつらすぎるでしょう。

でも最終手段としての書き直しは軽く心に留め置いておいたほうがいいかもしれないと振ってみる
0966FOX ★
垢版 |
04/12/02 18:31:09ID:???
sub bbs_main
{
use CGI::SpeedyCGI;
my $sp = CGI::SpeedyCGI->new;
my $spv = $sp->i_am_speedy ? 'yes' : 'no' ;

$ENV{'TZ'} = "JST-9";#日本
#$ENV はそのまま使う
my $GBX = {};
$GBX->{version} = "BBS.CGI - 2005 (SpeedyCGI = $spv)";
$GBX->{NOWTIME} = time;#現在時刻
$GBX->{PID} = $$;#pid
$GBX->{FORM} = {};#
&foxReadForm($GBX);#$FORM を読み込む

require "./bbs-main.cgi";

&DispError2($GBX,"FOX ★","<font color=green>FOX ★ ふふふっ</font><br><br>これが表\示されるということは・・・<br>本体requireしたのにそっちへ行かないと、、、");
print "Content-type: text/html; charset=shift_jis\n\nWOWOWOWOWOW-----\n";
return;
}
0967FOX ★
垢版 |
04/12/02 18:32:14ID:???
require "./bbs-main.cgi";
で本体に処理を移そうとしたら・・・

最初の起動時は本体へ行った
しかーし、二回目以降はだめだった、、、

どうする?
0970FOX ★
垢版 |
04/12/02 18:49:18ID:???
>>968
わたし・・・
理解不能なんです

>>969
そんなふうにしてみた

sub bbs_honati
{
my ($GB) = @_;

&DispError2($GBX,"FOX ★","<font color=green>FOX ★</font> いよいよ本体");
}

1;

んで &bbs_honati ; で呼び出してみた。
0971風俗王
垢版 |
04/12/02 18:55:14ID:lxr8SelU
今栃木県の宇都宮でトップのでりは???
0972 [―{}@{}@{}-] j101097.ppp.asahi-net.or.jp
垢版 |
04/12/02 19:02:21ID:yl4eb3hK
ホストが違う・・・

ERROR:ユーザー設定が消失しています!

ホストU178***.ppp.dion.ne.jp

名前:
E-mail:
内容:



こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。

アクセス規制・プロキシー制限等規制は、2ちゃんねるビューアを使うと回避できることがあります。
0975桃太郎 ★
垢版 |
04/12/02 19:12:04ID:???
僕ちんは
ERROR:サブジェクトが存在しません!だた。
0978FOX ★
垢版 |
04/12/02 19:15:53ID:???
いろいろやっているだす

sub bbs_hontai
{
my ($GB) = @_;
my $FORM = $GB->{FORM};
my $NOWTIME = $GB->{NOWTIME};

&DispError2($GB,"FOX ★","<font color=green>FOX ★</font> いよいよ本体($GB->{FORM}->{bbs} , $FORM{'bbs'})");

$FORM{なんたら} ってのが沢山あるんで
my $FORM = $GB->{FORM};
と関数に入ったところで宣言してそのまま使おうと思ったんだが・・・
うまくいかんのだ

どすればいいのだろう
0980動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 19:30:03ID:YeLg7Dw8
$GB->{FORM} は「ハッシュ」じゃなくて「ハッシュへの参照」なので
$FORM{なんたら} を $FORM->{なんたら} に変えないとダメっす。
0981FOX ★
垢版 |
04/12/02 19:31:37ID:???
>>979
やったけどだめだったっす、、

>>980
やっぱそうなんすか・・・
死ぬほどあるんだよなぁ
一気に置き換えるのは恐いしなぁ
0982動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 19:36:35ID:X6CTMNgw
>>981 50%乙

FOX★氏はiijか・・・

ERROR:ユーザー設定が消失しています!

ホストh***.p***.iij4u.or.jp

名前: FOX ★
E-mail:
内容:
ffffcce
ffffcsvxxxxx
fffff
gggg
hhhh
0983FOX ★
垢版 |
04/12/02 19:37:21ID:???
ぐおっ
こわっ
0987FOX ★
垢版 |
04/12/02 19:40:50ID:???
>>984
一気に置換しちまったです
0989FOX ★
垢版 |
04/12/02 19:44:58ID:???
しかーし

結局 ホスト情報やらhtml名やらは元々グローバルだったから
ちゃんと $GB に入れてやら無いとまずいという話しかな、

結構大変そうだ、

まずは HOST 関係だけやってみよう。
0991桃太郎 ★
垢版 |
04/12/02 19:49:18ID:???
>990
じゃああたすが代表して立てましょ
0995FOX ★
垢版 |
04/12/02 20:00:41ID:???
たたけ たたけ たたけ〜♪
1000動け動けウゴウゴ2ちゃんねる
垢版 |
04/12/02 20:05:16ID:X6CTMNgw
ワロタ




どのような形の削除依頼であれ公開させていただきます


2ちゃんねる(+Samba)       
アニメ | CM | ゲーム | 映画 | 音楽 | テレビ | 日記(+Samba)
       アニメ | CM | ゲーム | 映画 | 音楽 | テレビ |
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。

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