★負荷軽減対策委員会(Perl、PHP)★
サーバ上にPerlやPHPを置く場合、何よりも重視しなければ ならないのはサーバへの「負荷」。 負荷の高いCGIの使用は削除対象となるのが目に見えてます。 負荷を軽減させるにはどうすればいいか? どういう書き方をすればいいか? そんな委員会を開設しました。 掲示板はYahooのジオボードでも使っているように.htmlファイルを作成するようにする データベース系はGoogleのように検索されたものを必ずキャッシュして次回同じ語が検索された時に備える いちいち負荷を気にしてるようじゃァ、やらないこった! >>2 なるほど、、、 >>3 負荷を気にする人のためのスレよ 負荷軽減と速度アップは相反することが多い。 アルゴリズムの工夫なら速度アップにつながる事が多い。 負荷かかる順番としては Ruby>>Java>>Perl>>PHP>>>>>>>>>C++ と考えていい? PHPでもXREAの凍結対象になる程かなり負荷かかるんですが 何かいい方法は? やっぱPerlで掛け算とかは負荷になるのかな? 内部でOPコードが処理してるのなら足し算も掛け算も一緒だろうけど。 >>8 XREAってモジュールのやつはなくなったの? >>13 XREAの規約に ●PHPの動かし方がわからないのですが? public_html内で動作させる場合は、CGIとしてのみご利用可能です。 shared_htmlで動作させる場合は、モジュール版PHP(SafeMode付き)で 実行できます。 ってあったから shared_html内に入れれば負荷は軽減できるはず。 >>15 まさかモジュール版とCGI版で同じソース使う気か? (((( ;゚Д゚)))ガクガクブルブル >>15 ,>>16 shared_htmlって所に入れましたが同じソースで何か問題あるんですか モジュール版ってCGIに比べてどれくらい負荷軽減出来るの? 3分の1くらいか? やっぱ、重要なサイトは押さえておきたいな。 http://www.math.tohoku.ac.jp/ ~kuroki/WWW/HowToLighten.html 他にある? >>18 http://perl.apache.org/start/tips/registry.html の下の方に、hello.cgiがmod_perlだと、243/7.3倍に なるそうだ。hello.cgiのコードも書いてあるけど、まあ、相当な もんだなや。 >>19 某無料スペースで掲示板CGIを2500個設置したら 2日で消された 負荷軽減の極意 (1)Perlを使うなPHPで書け (2)PHPはApacheのモジュールを使え >>22 FTPへのアップに一晩かかったってのに(泣 負荷かかる順は Ruby>>Perl>>PHP>>>>>>>>>>>>Java か? >>24 (プ 被害者は君じゃなくて"某無料スペース"の方。 >>21 2500個もの掲示板を何に使うんだ? 俺は都道府県掲示板っつーのを作った事があるが、掲示板タイトルを それぞれ都道府県名に変えるだけでもウンザリしたよ。 >>17 問題ありますねぇ この辺りはマニュアルを読んだ方がいいと思う ソースを変更しないならshared_htmlに置かないで普通にCGIとして動かした方がいい >>29 専用サーバ借りてください。 つーか回線も要るけどな。 お前みたいな厨はホント邪魔。 レンタル掲示板するにしても、 2500個て・・・ 1ユーザー、1スクリプトなんだぁw >>34 1ユーザ1スクリプトが当たり前でしょ? それ以外何があるのさ >>21 その掲示板にバグが見つかったら、2500個すべて直すのか? どうせ広告貼ってるんでしょ? その広告がボツになったり、もっと良い広告があったら 2500個すべて張り直すのか? 申し込みがある度にアップするのもメンドイ 簡単な例をあげると 「魔法のあいらんど」 ttp://ip.tosp.co.jp/i.asp?i=ユーザー名 元は「i.asp」一個だけ >>40 あ・・・・・ 今気付いた・・・・・ どうしよう・・・・・ 複数設置用を1個用に改造するのって簡単かな・・・・? 清々しいまでに阿呆だ。 まぁ取り合えず専鯖借りれ。話はそれからだ。 >>27 都道府県ということは47個だろ?なら5000個なんてとんでもない個数だな。。。 とうとう21は自分が禿であることをカミングアウトした訳だが。 −−−−−−−−−−このスレッドは終了しました−−−−−−−− つか、掲示板スクリプトにちょっと手直ししてやるだけで1つだけで複数の掲示板が使えるじゃん。 ファイル名、タイトル名などの情報をデータファイルに書き込んで、変数で取得したユーザーIDと一致すれば それを適用すりゃいいんだし。 >>53 同意。どうせ汚染チェックすらしない糞スクリプトが出来るだけ。 mod_gz使って転送するかどうか迷っています。 gz読めるブラウザって、どのくらいの割合なんでしょうか。 また、gzする負荷と疥癬の負荷を考えると。ううむ ケースバイケースですね。 軽い掲示板はここ行って http://www.i-say.net/cgi/ これで検索しる。 HTML html シンプル、ツリー、iモード掲示板をチェックしてor検索ね。 sub{ } を 全部 別ファイルに 分けるのは どうかな? >>60 大して知識も無いのに発言するのは止めたほうがいい 大多数の一般人に誤解を与えかねん 質問していいですか 仮に2500個の掲示板を設置するとして、 共用サーバでそれやったらアホだけど 専用サーバなら何の問題も無いかな? ダウンしたりしないかな? 重くならない? >>21 君はもうここに書かない方がいいよ。 君のためにも他の人のためにも。 荒らしまがいの糞レスが散らばってますが、 負荷軽減ってそもそも誰かのために不利になることってあります? その筋の荒らしではないかと小一時間。 ソース書き直す必要がでてきたらめんどいってことかな。 >>62 あのお。なんのために「制御構造」とがあって、「くりかえし」ができるようになっているのか考えてことがありますか? >>65 共有サーバ使ってる時負荷大きいと同じサーバ上の他会員が迷惑すると思うが >>67 つーか意味わかんないんだけど こちら小学生なんでもっとわかりやすく頼みます 実際に自前で鯖立ててやってみ。 そこまでできるようになったら知識もついて もうちょっとましな方法が思いつくだろ。 >>70 幼女ならJAPU氏が優しく教えてくれるかもしれませんよ(藁 >>70 俺はオトコだ 名前は橋本秀明 年は11 鹿児島県在住じゃけぇ >>76 「負荷軽減対策」っつってんでしょ レンタル掲示板関係はよそ行って下さい −−−−−−−−−−このスレッドは終了しました−−−−−−−− 兎に角Yahooに倣え 和塩含めて、負荷軽減はかなり追求してるから apache軽量化するのが一番効果ある。 mod_perlより、普通のcgiのほうがトータルのスケーラビリティは 上という場合もある。 いらないモジュールは全て削る。 モジュールはスタティックにコンパイルする。 あと、httpd.confの書き方も重要。 perlで言えば、超軽量のhttpd+speedyCGI これが最もサーバーに負荷をかけない。 phpでメソッド呼び出したときの内部変数って、メソッドが実行し終わったら unset()されるのでしょうか。 たとえば、メソッド内でファイルを読み込んだ入りして、 場合によっては$hogeのサイズが100k超えたりするわけです。 それから、HTMLに書き出す内容をすべて変数に入れちゃって、あとでまとめて echoする方法をとっていたりすると、結構その変数のサイズ大きくなりますよね。 ご教授お願いします。 大量のレコードを処理するときは、一行づつ読み込こめば、軽くなるよ んで、出力するのだけ、メモリに入れればオッケーと思います 小学生またまた乱入。 要するに、いろいろな要因の絡み合いだから、場合によってってところだね。 0)使用言語の選択 1)プログラム(スクリプト)の設計 1-1) メモリ領域 1-2) CPU時間 3)アクセス数 4)サーバのキャパシティ 5)他には? これをうまく図で表せればいいですね。僕はまだ習ってません。 >>86 だから、軽くなっても長くかかるのはどうかなぁと。 アクセス数が少ないサイトなら重くても速いのがいいんじゃぁと。 まあアクセス増えた後自分の首絞めたいならどうでも良いよ。 このタイトル、ひかれますね。 私は今、チャットの負荷軽減を頑張っています。 使用しているのはKENT-WEBのYY-CHAT。 現在は分割処理で ログ表示CGI フォーム部分CGI 書き込みCGI 退室CGI 入室前CGI に分割させ、いらない機能はすべて取り外しました。 さらにこれから (1)そのスクリプトをC言語化 (2)新規発言のみを読み込むJavaプログラムを追加 させようと考えています。 PHPですが、 $hoge = "<img src=\"$foobar\">\n"; と書くのと、 $hoge = "<img src=\"". $foobar ."\">\n"; と書く方法がありますが、 どちらがよいのでしょうか。 私は、エディタのハイライト機能で変数の色を変えていため、後者を使っています。 でもいっぱい変数を使う文字列だと、前者のほうが便利だね。 >>91 単純に、後者の方が動作が速いとどこかで聞いた記憶があるので、 いつも後者にするようにしてます。 >>91 $hoge = "<img src='$foobar'>\n"; という方法もある(たいしたこと無いが 書きやすいとか、なれている方でいいんでないの。 どっちが速いかなんて、体感じゃわからないでしょ。 ちなみに俺は $hoge = '<img src="'.$foobar.'">'; こんな感じで書いてる。改行はつけないよ。 改行をつける場合は $hoge = '<img src="'.$foobar.'">'."\n"; こんな感じ。他と分離させる。一目でわかりやすいから。 >>88 1ぎょうづず読み込んでも大して長くはならないけど? メモリがパッツンパッツンサバでも、メモリ空間を節約出来るから、結果的に早くなるんです >>96 漏れは掲示板のログファイルなんかは 1行づつ読み込んで、いるモノだけ配列に渡す。 インデックスのための小さなファイルなどは file()で一気に読み込む。 適宜使い分けている。 でも、上にもあるように、100KB位なら、一気に file() で読み込んでしまっても いいのではないかと思ってしまう。 あとPHPで while (!feof($fp)) { $buffer = fgets($fp, 2048); } とかやってるんだけど、 fgetsせずに行をスキップするにはどうしたらいい? >>98 100KBで一気にですか、、、すごいですね。。。 負荷軽減対策委員会という意味ではなしかと。。。 >while (!feof($fp)) { > $buffer = fgets($fp, 2048); >} >とかやってるんだけど、 >fgetsせずに行をスキップするにはどうしたらいい? fgetcsvか、fseekしてfread。 たまに、初期設定で設定される変数の内容だけで、数十KBにもなるものがあるが、その方が問題だったりして。 >>92 あいたたた・・・ じゃせめてこのスレの内容まとめて 負荷軽減対策委員会の公式サイトでも起ちあげますか・・ gzip処理をすると転送料は減りますが サーバへの負荷はどうなると思いますか? gzip処理をすることでサーバへ負荷がかかるとしたら 何kbを越えるくらいをめどにgzip処理を施すのが妥当でしょうかね? 例えば2kb程度を転送するくらいならgzip処理は必要ないでしょうか? ご享受願います。 >>102 FEPか表示フォントの設定大丈夫ですか? 圧縮ファイルだって未圧縮ファイルだって転送時には 同じバイト列でしょ。 >>103 すいません、意味が分かりません。 サーバの負荷を考えるとgzip圧縮処理は必要なのでしょうか? >>103 2ちゃんねるのログ(300K) ↓ サーバで圧縮(100K) ↓ HTTPで転送(転送量1/3でウマー) ↓ ブラウザーで解凍、表示 >>104 >>>103 >すいません、意味が分かりません。 禿同。 サーバ負荷軽減だけでなく、帯域の負荷を減らすことで 単位時間内のリクエスト数を伸ばすことが出来るのでgzipが 有効な場合もある。 >>104 転送「量」でしょ、ご「教授」でしょ。 日本語大丈夫ですか?って書こうかと思ったがよ。 漏れは、そんなに更新が激しいデータじゃなきゃ、 1回のgzipで何人分かができて、転送のためにファ イルアクセスされる時間が減るから、gzipした方が いいと思って言ったんだけどね。解凍するのは、 ユーザだから知ったこっちゃないし(藁 htmlの場合、gzに対応していないブラウザのために、 (ある程度のシェアがあると言われているMacのIEでも対応していないのがある) 無圧縮のやつも作らなくてはいけないのが不便 これとは別に、PHPで、出力をダイナミックに圧縮、非圧縮とかえるには どうしたらいい? >>109 output_handler = ob_gzhandler 昔のバージョンだと駄目だが、4.2.xなら Accept-Encoding: gzipの有無に依って 圧縮、非圧縮をダイナミックにおこなってる。 マニュアルみれ。 >>108 gzip圧縮処理ってリアルタイムじゃないの? (調べもせずにものを言ってみました) >>111 リアルタイムはpopenとか使って出力をgzipにパイプしたときでしょ? >>108 が言っているのはgzip圧縮されたファイルのことじゃない? サイト丸ごとアップするときはtar+gzipでアーカイブにしてからアップしています。 アップ後はtelnetから解凍。 >>109 無圧縮のものも作った場合、どうやって振り分けているの? 「文字化けするようなら〜から入ってくれ。」と入り口に書いておくの? >>110 サンクス とりあえずスクリプトの先頭に ob_start("ob_gzhandler"); を入れてみました。 すんません ブラウザ(モジラ)で確認してみたら、 Content-Type が text/htmlのままなんですけど。 gz転送されているのかな? >>108 ご指導、ありがとうございました。 享受の方は素で間違えていました。 gzip圧縮処理の流れは>>105 さんの 分かりやすい説明どおりに把握しているのですが まだ詳しい内容は無知なので理解できませんでした。 調べてみようと思います。 チャットのように更新の頻度が多いものについては gzip圧縮はしない方がいいということですね。 連続の投稿ですいません。負荷軽減対策において、 NPHスクリプト化はやらないよりやった方がいいと思います。 あと、チャットにおいて私は負荷を抑えられると思い、 jcode.plをrequireしていません。(文章おかしくてすいません) これは不具合が出るものなのですかね? mod_gzip とか mod_deflate 使ってる? >>121 mod_perlとか耳にしますがよく分からないのです。 共用サーバでも使用可能なのでしょうか? バイトの時間が来てしまいました。レジをうってきます。 ここはブックマークしておくのでまた、参考にさせてもらいます。 mod_deflate って 2.0 からなのか〜(残念 >>111 俺は転送量下げるために自作したよ。 更新の少ないものはキャッシュすれば良い。 でも、mod_gzipで良いんだよな……。 つーか、ob_gzhandler知らなかったYO(自爆 >>116 と同じで、俺もスクリプトの先頭でgzip圧縮転送をしている ob_start("ob_gzhandler"); これは、html出力をバッファしてgzip圧縮して送信するものだから、 鯖側は圧縮の分負荷が高く、ブラウザ側も徐々に表示されず一気に表示する(少し待たされる印象) その代わり、転送量が減る・回線が細くても多少マシという利点がある。 ケースバイケースだが、負荷を減らそうというスレの趣旨には合わないんじゃないか? #つか、1行追加するかしないかだけの話だがね。 俺は試しにチャットのログ表示部をgzipしたけど、 表示は体感できるほど速くなったよ リロードしても、ちらつきが無いと言うか、 圧縮無しだと、まばたきする感じなんだが、それが無くなった。 鯖負荷は、MRTGやTOPコマンドじゃ解らなかった。(多分ほとんど負荷無し) チャットは計6部屋で共有鯖なら追い出される位の参加人数。 いちお、Perlでgzip対応ブラウザかどうか調べて、対応してたら圧縮してる。 でも、どっかのサイトに、「鯖に余裕があるならgzipをするべし」 みたいな事書いてたから、圧縮に多少負荷がかかるんだろーね >>126 マニュアルのコメントによると For just a small bit of processor time, you can DRASTICALLY reduce the bandwidth requirement of your scripts. There are very few circumstances in which this should not be used. っていわれてるけど それに、ブラウザでの表示の方法は、ブラウザのbehaviourじゃない? >>126 「負荷」はプロセッサの「負荷」も回線の負荷も両方考えるべきでは? WebProgでは特に >>130 そうだね。あとはメモリを無駄に使わないという所かな。 >>131 出来ない。家を出発前に渋滞を予想できないのと同じ(か?) >>131 鯖がナローバンドだったらわかるかな クライアントならわからん ホストで調べるとか… ブロードバンド特有のホスト名が付いてるトコってあるじゃん? 調べまくって自分でデータベースを作る。 すっごい時間と労力がいるけどね… 思いついた。 最初にアクセスしたときに、リモホをとってPINGしたりして 疥癬の早さを調べる。それでgzするかしないかを決めて、 その結果をクッキーで食わせる。 UIがあるなら、圧縮転送する/しないを選択させれば良いじゃん。 CGI側で判断するものではないだろう? http://www.abi-station.com/ ここのAbicorporationという掲示板と居酒屋チャットというチャット、 ソース見ただけで頭が痛くなるのは俺だけだろうか。 >>137 それはABI言語で書かれていますw ってかスレ違い? 負荷が凄そうって言いたいの? >>138 負荷がすごそうっていいたいのですw シェアウェアで爆弾売ってるようなものっすね。 ちなみに俺がCGIチャットで一番、負荷をかけないのは 「ぞのちゃっと」だと思うのですがどうでしょう? >>139 俺のチャットが一番軽いと思う。 PHPだし、面倒だから配布はしてないけど。 でも、現在のメンバーを表示すると重くなるね。 FlashやJavaAppletの方が良いに決まってるからsage。 CGIスクリプト&ログの、ファイル容量を減らすことって 負荷軽減につながりますかね? >>140 すごく興味があります。 ぞのちゃっとはC言語ですがphpはそれよりも軽いのでしょうか? >141 設計によるけど、単純に負荷軽減つながるはず 今、2チャンネル型のスクリプトをPHPで作っているのですが、 やっぱりフロート型って、負荷大きいですよね。 (書き込む人夜読む人の方があっと言う的に多いので、) htmlファイルを生成したのだが、名前部分のクッキーが読み出せない 仕方なくJSで読んだのだが、文字化け。 PHPで食わせたクッキーはJSで読むとうまくいかないのか? >>146 化けない文字コードでクッキーを焼く。 ブラウザのお口に合うクッキーを食わせる。 など… >>147 サンクス。MBCS関連充実してきたので、UTF-8で試してみます。 しかしまあ、urlencode-decode間でしてくれるうえにグローバル変数に自動的に入る PHPに比べて、JSはめんどくさいですね。 JavaScript なのか JScript なのか…… JavaServletかもしれんぞ。 ま、146は単語もまともに打てないほどの面倒くさがり屋さんと言う事で。 >>150 いいじゃん、「あっと言う的」、2典に登録しようよ。 さがっているねぇ。この板の負荷にならないようにしているって事なのかなぅ(上出来 PHPの掲示板でログファイルが500kBあるんですが 消さないと負荷って凄いですか? >>155 あなたの「凄い」がどの程度なのかわからないけど、 その掲示板のコードにもよるんじゃない? 掲示板のログで500kbだと3000行近くなってるんじゃない? 読み込んだり書き込んだりするのに、3000回ループする様なコードを書いてるんだったら、 考えモンだね… ファイル丸ごと読み込んでるんだったらメモリも食うし >>21 キミ最高だね。ほんとアホ以外の何物でもない。しねよ。 すごい厨房な質問ですいません。 例えば500kb(300行)のログファイルがあって open(IN,"ろぐふぁいるぱす"); @lines=<IN>; close(IN); というように配列に内容を入れた場合 ファイル丸ごと読み込んでることになるのでしょうか? >>159 Perl初心者コーナーで一行ずつ読み込んで処理するのと どっちが早いか議論してたさ。readで読み込むのも比較 してたで。2・3日前だっけな。 一行ずつ処理したとしても、Perlでは本当に以前に使っていた領域が開放されているかどうかはわからんな。 Perlを開発している人たちなら分かるだろうけど。 >>162 >以前に使っていた領域が開放されているかどうか 以前に使っていた領域って、変数のことだろ? 1行ずつ代入しては処理を 繰り返してるから変数に代入されてる分は領域だろ? 開放もなにもないだろ ちなみに領域というのはメモリー上に確保した領域のこと。 >>164 >C言語でも勉強してきて。 ( ´,_ゝ`) プッ >>120 NPHスクリプト化でnph-chat.phpは可能ですか? NPHはPHPでも使えるのでしょうか? >>164 こういうことが言いたいのか? http://www.mikeneko.ne.jp/ ~lab/perl/tuning/ 俺はZ80とかFortrunとか変な言語でCGI作るのが趣味なんだ キタ━━━━(゚∀゚)━━━━ッ!!キタ━━━━(゚∀゚)━━━━ッ!!キタ━━━━(゚∀゚)━━━━ッ!! さあ、何でも聞いてよ。 カエッタ━━━━(゚∀゚)━━━━ッ!!カエッタ━━━━(゚∀゚)━━━━ッ!!カエッタ━━━━(゚∀゚)━━━━ッ!! 時間がなくなったので帰ります。 >>175 じゃあ、Z80は言語じゃない、なんて突っ込みも許されるかひ? >>171 Fortrun という言語について、詳しく教えて下さい。 >>177 Z80は言語じゃない、ガラスです ttp://www.watch.impress.co.jp/av/docs/20021022/sharp.htm Perlの一般的なスクリプトの場合、 ログを読み出すとき出力を直接printで表示しているけど、 出力を$buffer .= "〜";というように一つの変数にまとめておいて 最後にprint $buffer;とした方が速いのかな。 imode用のスクリプトはContent-lengthヘッダを出すためにそうしてるけど。 変な日本語でスマソ 最初が表示されてから最後が表示されるまでは速いだろうが、 最初を表示するまでが遅くなるだけじゃねーの? imode程度なら良いけど、メモリ食うだけじゃない? >>180 2chのread.cgiがまとめて表示だったら嫌だ。 >>180 出力する量にもよるだろうけど、最後に一気に出力の方が早いって事は無いんじゃないかな。 Content-Lengthが必要ないならあえて選択する方法じゃないね。 思ったんですけどKENTさんのYY-BOARDって無駄な処理が多くないでしょうか? レスのトップソートがある場合、ない場合とかもっとスマートにできそう。 >>184 ガイシュツすぎる Kentの使わないで自分でいいやつ組むのがよろし。 >>185 そうなんですか。KENTさんもバージョンアップの繰り返しで 無駄な処理を省くのが面倒なんでしょうね。 今、YY-BOARDを元に新しい掲示板を作っています。 Kentを元にするなって。 最初から作った方が、良いものが作れる。 ニュースCGI(読み込む時に常に1MBのlog.csvを読み込む)を、 ログの容量減らす以外でこのスクリプトの負荷を軽減する方法を いくつか教えてください。 又、これってApacheのモジュール版PHPに変えたら負荷はなくなりますか? >>189 の方法が一番負荷が減るけど。 後は、何で全部表示するのにcsvにするの?最初からhtmにしとけばぁ。 ほいで、前から議論に出てるgzipで固めればぁ。 何かのキーで検索するんなら、DBMにすればぁ。 早いし全部ファイルを総なめにする必要ないから負荷激減だね。 >>189 いや、つーか・・ええ!? >>190 CGIの拡張子をHTMLにしてもだめですかね ダメですよね・・・ 負荷下げたいならapache2.0+mod_perlでいいんじゃねーの? 要はプロセス作成が重いんだし。 あとは、スクリプトのアルゴリズム次第。 >>187 open(IN,"?????")||&error("情報ファイルを開くことが出来ませんでした"); ($no,$ip,$time)=split(/<>/,IN); $no++; close(IN); 最後にこれくらいの処理だけが面影として残ってる場合は著作権表記は必要ないと思いますか? >>194 コードの面影が残っていなくても 設計の面影が残っていたら著作権表示は必要(だと思う) しかし、現行の著作権法では、「アイデア」には著作権はなく、 具現化されたモノにのみ著作権があるので、大丈夫かな。 しかし、著作権以外の知的所有権はあるね。 まあ、ここは、KENTにどのくらい「リスぺくと」してるかによって 自分で決めればいいんじゃない? …と勝手なことを逝ってみる >>194 >>193 の部分を記述がめんどくさいのでコピっただけなのですがね。 参考になりました。スレからすれてすいません。 >>196 >スレからすれてすいません。 ( ´_ゝ`) >>197 画像使うんなら消しちゃダメでしょ。 2chみたいのじゃなくていわゆる普通の掲示板で HTML吐き出しタイプの場合、「次のページ」とか 「次の10件」とかの処理どうするの? 『ログ保存数/1ページ表字数』回HTML出力したら 余計負荷かかりそうだし。 >>202 ??? ユーザがデータ追加する度に「次の10件」って変わるのか? >>202 トップページだけHTML表示にすればいいと思うよ。 全ページをHTML表示するのにはあまり意味はないと思います。 次バージョンで修正した方がいいかな〜と思った点について >>0- や >>1-100 などとした場合、返信数が多いとサーバに負担がかかる(例えば返信数が80件あると80回も表示処理を繰り返すことになる)と思いますので、例えば20件で表示を中止させる、といった処理を加えた方がいいと思います。 ------------------------------------------------- Re: v1.2 レポート ( No.38 ) 日時: 2002/10/28 19:22 名前: abc >>37 改造物を作り配布しょうとガンガって居る者がなんつー・・ スレッドログの容量分を反映させる訳だから、余程パンパンに膨れ上がった文字数で書かれているスレッドじゃない限り、デフォルトの100件maxとしても1スレッド500KB前後を読み込むだけかと。 うーん。勘違いしてますの。 こんなやり取りを見つけたんだけどどう思う?前者は100件を 一気に表示させるのはサーバに負荷がかかるだろうから制限した方がいいといって 後者はそれを否定している。 一般的にどれぐらいの負荷でサーバから文句言われるの? 箱庭諸島とか禁止ってる所多いけど 普通の掲示板ごときでサーバに負荷なんてかかるもんなんでつか? Pentium4 1.6GHz RAM512MBの専用サーバなら FF Adventureをいくつぐらいまで設置できますかね? 参加人数が1つの設置につき50人ぐらいとして。 >>212 どういう計算で3個という数が出たんですか? FFAdventureのPHP版(Apacheモジュール版)を作ろうと思ってるんですが それならその2倍くらい置けそうですよね? >>215 それとIE以外のブラウザで戻るボタン多用。 Pen4 1.6GHzよりもPen3 1GHz×2の方がいいわな。 Pen4よりもPen3かCeleronの方がCGIがサクサク動くよ。 厨行為がなくても負荷は掛かりやすい。 ・同時プレイ人数が多い(多いところだと10人以上) ・ゲームという性質上、計算など処理量が多い。 チャットも上の性質を満たすが、それ+αなわけだ。 でも、デフォルトのFFAの更新頻度は10分になっているから それならば本来、そんなに負荷は掛からないはずなのだ。 ただ、最近CGIを全然知らない負荷を意識しない奴が 平気に「短い方が良いに決まってるじゃん」という 理由で更新頻度を30秒とかにしちゃってるから問題になってるわけだと思う。 異常にレベルの低い議論が続いてますね。 TOCでも勉強するといい ボトルネック見極めないで憶測で議論しても意味ナイ ping -f pc.2ch.net . . . . . . 今日も快適だ 掲示板とか運営するならCGIはログ読み込み+書き込み、だけやらせて、 タグ付けはクライアントサイドでやらせる、 負荷軽減 >>202 全てのデータをXMLで吐かせておいて、 XSL+JavaScriptで表示、これで解決 >>224 そうするとかちゅーしゃ等を使うのが一番手っ取り早いね。 ブラクラって何ですか? 体験させられはしたんで、何の略かを知りたいのでそ。 >>234 そか、検索ね。アリガd。 ttp://www.coara.or.jp/~tkuri/BCC/faq.htmは、よかった。 browser crusher / crasherってなってるけど、crashなんてねーぞ。 いっけね。あったよ。crashの方がコンピュータがクラッシュするって いつも使ってるやつね。crushは、もみつぶす。俺の英語力もとほほや。 逝ってくる データの転送量さえ少なければCGIの負荷ってかからないよね? コバルトサーバ → CGI不向き Pentium III → CGI可 Pentium IV → CGI最適 の図式で合ってる? コバルトサーバ → CGI不向き Pentium → CGI最適 と考えてよろしいか? >>238 Pentium使ってるCobalt serverはどうなるの perlでHTMLとか吐くとき ヒアドキュメント使うのと全部printで表示するのはどっちがいいんですか? >>242 表示したい文字列を全て一つの変数に入れて、最後にprintする >>244 ところでHTML::Templateって結局>>243 だよね。 $tmpl->output(\*STDOUT); みたいにしてテンプレートに変数流し込むそばから すぐprintできるとうれしい…。 つーか @RANKING = $RANKING[ sort {$tmp1[$b] <=> $tmp1[$a] or $tmp2[$b] <=> $tmp2[$a] } 0 .. $#tmp1]; ってなperlの部分をphpになおしたいんだが だれか教えてくれないでしょうか? @tmp1 を主キー @tmp2 を副キーにしてソートしてるだけのような。 >>214 FFAのPHP版がもう少しで できそうです。 漏れ様の貧弱なマシンではよォ、use DBI;で0.20[s]もオーバーヘッドがかかりやがる。 use Pg;で0.13[s]なんだ。。。 やっぱApacheDBIにしたほうがよさげ? 最近、ここのYomi-Searchを改造してPath Infoに対応させた。 ロボット型検索エンジンからの直リンクが多いので、デコード処理をしない分 負荷軽減になるとおもうけど、どうおもう? >>252 じゃあこのスレにもひっそりと宣伝。現在配布に向けてテスト中。 あまり大々的にしてないので、参加者が少ないです。 もし暇な方とかいたらよろしく。 http://www.s55.net/ ~paka/ >>255 PHPにしたからって普通の鯖屋が 「FFA、箱庭は禁止ですがPHP版であれば設置可能です」なんて 言うと思えんとこがつらいな。 >>255 例えば自分が設置しているS55netさんだと、 本来ゲームなどの高負荷CGIは+1000円になるのですが、 同じ料金のままにしてもらってます。 具体的に負荷をチェックしてみてくださいって言ってみるといいかもね。 それでも負荷が多かったら禁止されてもしょうがないし。 ああ、でもFFA禁止って言うのは負荷だけじゃなくて 改造による暴走の危険性も考えてのことかな・・・ そうするとつらいかも。 >>245 perldoc HTML::Template したら、 > You may optionally supply a filehandle to print to > automatically as the template is generated. This may > improve performance and lower memory consumption. > Example: > > $template->output(print_to => *STDOUT); > > The return value is undefined when using the "print_to" > option. だって。エラー処理のことを考えたら、>>243 のやり方がいいとは思うけど。 http://member.nifty.ne.jp/hippo2000/perltips/html/template.htm はちょ と古いね。 あの、漏れもFFAを軽量化しようと改良してるところ。 メインの画面のhtmlとかをJavaScriptで生成して2回目からは クライアント側でキャッシュできるかな?と 思ってますがかなり軽量できますかね? >>261 師匠、いくらプログラムをいじったってパソコンは軽くならないですよ。 電源から電気をもらっているわけで HDの容量が変わると電荷の分増えたりしないのか? 2ショットサイト作成中なんですが、チャットってログはテキストより SQLにした方が負荷は低いですか? チャット自体はモジュールのPHPで動かす予定なんですが。 >>266 ログは多くても100件保存できればOKでしょ? だったらテキストの方が良いに決まってる。 >>266 チャットは mod_perlで常駐させて 配列にログ入れて ファイルアクセスをなくすと めっちゃ早かったでつ。 んで、保存ログは20行以下に切り詰めて ブラウザ側でJavaScript使ってログを保存・表示させていく方式が よろしかろう・…というか、よろしかったでつ。 >>276 チャット一つあたりのログは精々10〜20件ぐらいですね。 他に管理者用のコソーリ覗き見スクリプト(ログ全件保存)ってのも 作ってあったりしますが^^; >>268 mod_perlは普通に動くスクリプトをそのまま動かせるんだったら 試してみようとも思うんだが。お手軽さならPHPに流れちゃうね。 そういえば自分、JavaScriptは全然わけわかめだった^^; >>244 1ページ分を1つの変数に入れたとしてもせいぜい50KB。 たいしてメモリを食わないと思うんだがどうだろう? 辞典みたなものをCGIで作ろうと思ってるんだけど、データをHTMLで保存するか ログファイルに保存して毎回CGIで表示するか迷ってる。 CGIサーバが5MBしか容量ないので保存データ量を節約したいけど負荷が気になる。 1日500件もアクセス無いはずだから別にいいかな? >>271 辞典の更新頻度、検索の手段によるのでは 質問です。 Windows2000 Apache 1.3.26 win32 ActivePerl 5.6.1 でCGIのテストをしているのですが、 CGIの負荷を数値等で表示してくれるツールってないですか? 今は、タスクマネージャーで見ているのですが、 もっと詳細に負荷の具合を調べたいのですが、 ご存じの方、よろしくお願いします。 あのー、 Perlで、myやlocalをほとんど使っていないってのは、 どのくらいの負荷要因でしょうか?ベスト1? >>278 それで変数のコピーを抑えれば効率的と言えるかも。 >>278 perlの実行ファイルで既に1M近くあるし、モジュールとか読んだら、 もっと増える。 気にするやつは馬鹿。自己満足。知症。 たとえれば、ボルトを全部チタンにして100gの軽量化に成功!とか言ってる 車オタと同類。 プログラムとデザインをわけようとして、 テンプレート読み込み型のデザインをしていたんだけど、 そのせいなのかなー、急に重くなった気がする >>283 データ更新の機会がそれほど発生しないものならば、動的にHTMLを生成する のではなく、データ更新時、静的HTMLを随時生成するのに切り替えるのも一つの 手かと。 Perlで3MくらいのCSVを読み書きするのって、 かなりの負荷? あと、ここのみなさんは、どうして負荷について知識があるんでしょうか? 経験上? >>291 一回しかやらないのなら 大した負荷にならないが BBSのログとかだったら負担になるかもね >>291 DBM使え。簡単だぜ。 郵便番号ファイル(郵政省--いま何たっけ--の)で速度5倍だぜ。 http://www.ichikoro.com/webp/bk/00060.html のベンチマーク。 あれ、2Mくらいじゃなかったっけ? >>288 そうそう。よほど非常識なことをしなければ、スクリプト言語で効率を考えるのはナンセンス。 >>296 >>295 にあるように効率はいつも考えるべき。 >>297 そうだね。コードの一つ一つで効率を考えることによって、 全体としてそうとうの負荷軽減になる。例えば、 http://www.mikeneko.ne.jp/ ~lab/perl/numerical_transform/#h4を ベンチマークで検索してみれ。 >>292 そうかー、ちょっと反省。 ところでどなたか、↓の質問答えてほしいです。。。 >あと、ここのみなさんは、どうして負荷について知識があるんでしょうか? >経験上? あと、負荷軽減について詳しい本(の一部とか雑誌でも)ないでしょうか? 負荷がどうとかと言う人ほど、use strictしたままリリースしそう。 use strict すると負荷がかかるんですか? >>302 検査する時間が増えるだろ、アクセスごとに検査させるのか。 Cでいえばassert有効にしたままリリースってのに似ているな。 わざとそうしている人もいるみたいだけど・・・ 負荷を測るのってどうすればいいの。 自分のPCで動かしてもよーわからん。 メモリについて質問させて下さい。 例えば $x="abc"; の後、 $x=""; という記述なしに $x="def"; とした場合、メモリは、 abcの○○○分と、defの○○○分の ○○○○○○分が確保されてしまいますか? $x="abc"; $x=""; $x="def"; にすれば メモリ確保は○○○だけになると思うのですが。 >>307 たぶん・・・ 変数へ上書きしたら、ちゃんと初期化(開放)してから、 代入してくれると思ふ。 >>308 そうですか。 では$x="";は無駄ですね。 ありがとうございます。 Perlは最初に確保したメモリ空間を開放しません。 たとえ、ゼロに初期化しても。undefなら別。 http://www.mikeneko.ne.jp/ ~lab/perl/tuning/ >>310 すんまそん。 メモリ確保を解放するかしないかは分かります。 メモリ確保は○○○分で済むのか、○○○○○○分確保してしまうのかを聞きたいのです。 詳しく知りたかったら、Perlのソースを読むしかないと思うけど。 >>315 >>310 の記述を見ると、3バイト分しか確保しないように思えたけども。 apacheのログ2,3日分。約4M。PHP。極貧マシン。 while & fgets & copy -> 処理50秒前後 メモリ使用4M前後 CPU100% file & foreach(or list&each) & copy -> 処理60秒前後 メモリ使用15M前後 CPU100% fread & copy -> 処理0.5秒前後 メモリ使用4M前後 CMP100% ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━― ファイルをコピーする時って open(IN,"Src.txt"); #コピー元ファイル Src.txt をオープン while(<IN>){ # 一行毎の読み込みループで変数$Bufに読み込む $Buf .= $_;} close(IN); #ハンドル IN が不要になったので閉じる ◇デソースに書き出す open(OUT,"> Dst.txt"); #コピー先ファイル Dst.txt をオープン print OUT,$Buf; #ソースの内容($Buf)を書き出す close(OUT); のように一行ずつ読み込んでく場合と @line=<IN>; みたいにいっきに配列に入れてしまうのはどちらが処理としてはいいのでしょうか? >>324 open IN, '<' . $src or die; open OUT, '>' . $dst or die; my $buffer_size = 1024; # 適宜調整 my $buffer; print OUT $buffer while read IN, $buffer, $buffer_size; close OUT; close IN; >>325 さん それが最適なのですか。 勉強になります…。 サイズ1024は何を意味しているのだろう… >>326 1024 byte は 1 kbyte だろ? コンピュータの基礎じゃねえか。 ま、俺だったらFile::Copyモジュールを使うかも。 バグがあるかも知れないソース書くより楽だし。 my $buffer_size = 1024; # 適宜調整 すいません。 これを記述することで何が得なのかを知りたいのでした。 >>329 実行エンジンにもよるんだけども、メモリを確保する場合、8byte単位とかそういうのが多いから (アライメント)。 Perlだとどうだか?って気もするけども。 >>329 微妙に意味がわからんな…… 推測をして回答してみる。 1.$buffer_sizeを設定することで、何バイトずつコピーするのかの設定が可能になる。 この数値を小さくすると、コピー回数が増えるが、メモリーへの負担は減る。 この数値を逆にすると、その逆。 サーバーの具合を見て適宜調整することができる。 2.わざわざ変数を一つ設定することの意味は、変数の名前をわかりやすくすることで、 その変数が何に使われているのかをわかりやすくする。 「昨日の自分は他人」の言葉どおり、後から見た時になんでその数値にしたのか等が判断しやすくなる。 何が聞きたいんだろう…… 3. 設定(定数)と実働部分はできるだけ分離する。 >>324 のコード片がスクリプトのどこに埋もれていても、 変数 $buffer_size としてスクリプトの頭の方で定義しておけば 簡単にバッファサイズを変更できる。定数で埋め込んでしまうと 変更したい時にいちいち探し回る事になる。 Perlは最適化とかしないのかな? @buf = <IN> のほうが早かったりして。 open(IN, $src); open(OUT, '>'.$dst); print OUT while(<IN>); close(IN); close(OUT); こう書くかも。 readで読み出すバイト数は多い方が速いと思う。当然だけど。 ただ多過ぎるとそれはそれでメモリくったり。 >>335-336 ベンチ取れば分かる事だが、@buf = <IN> はメモリを一気に 確保する = System CPU time を食う。行入力演算子による 取得は「行末」を探す = 可変長入力なので潜在的に read より遅い処理。もちろん扱うデータのフォーマット & 量次第 だけどね。 どうしても行入力演算子でやりたければ $/ = \1024; while (<IN>) { ... } で 1024 byte 単位で読めるけど、素直に read 使った方が 速かったかと。 たしかにそうですね。 改行コードを探しながら進むので遅いと。 ∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉 ファイルの書き込みを追記にしたばあいの負荷ってどうなるんですか。 たとえば書き込むものは同じとして、 追記先のファイルが1行のときと1000行のときでは CPUメモリ負荷はどうなるんでしょう。 追加するだけだから大して変わらないかなと思ったんですけど。 $kazu=(((($my_tech-int(rand($my_tech/4)))*$job_dmg[$job])*$tarou)/$mstamina)*$stamina; このように一気に計算させるのと、 いくつもに分けて計算させていくのでは 負荷は変わるのでしょうかね? 変わるのならどちらが軽いと思いますか? >>341 追記の場合、元のファイルの大きさはほぼ影響しない。 Cをやっている人間ならわかる(はず)だが、 追記と言うのは、ハードディスク上のファイルの終端を探し出して、 そこから新たなデータを埋めて行き、最後にファイルの大きさを示す数値を変更する作業だ。 従って、ファイルの終端を探し出す作業だけが、ベンチマークに影響する。 >>343 メモリの占有率を調べたいなら、そういうソフト入れてベンチマーク取ればわかる。 そして結果を発表すると皆から感謝される。 むしろ、その式は人間が見やすいかどうかを考慮した方がいいと思う。 下記の中で最も負荷が少ないのはどれでしょうか? 1.printを使い一行ずつ出力 2.ヒアドキュメントで出力 3.別ファイルを作り読み取らせて出力 3は後々便利そうだけど、負荷が気になる…。 >>346 負荷が少ないって、どっちの? 「省メモリ」? それとも「CPU占有の少なさ」? >>346 >3.別ファイルを作り読み取らせて出力 >3は後々便利そうだけど、負荷が気になる…。 じゃあ外部ライブラリとかあまり使わない方がいいよ。CPANもね。 >>346 1.出力処理が遅い。 2.出力処理は早い。 3.良識ある人間のやること。 一般に、メモリ占有量の低いものの方がウェブには向いているよ。 >>350 そうか?次々とくる要求に迅速に対応するために処理速度を優先しない? webプログラムは、サーバへの負荷も気をつけないといけないと思うけど、 それよりも、トラフィックを一番に考えてる俺は間違ってますか? そんな細かい事ぐらいでサーバーから言われる事はまず無いので 私も処理速度を優先させるべきだと思うねぇ。 というか、気にするほど大して変わらない。 基地外なほど膨大なデータを扱うならまだしも。 想定同時アクセス1000くらいの小さな案件で、 鯖を用意してやるなら、保守性を一番においても問題ないと思う。 >>355 >想定同時アクセス1000 これって小さいの? 秒間同時アクセス数1000ってことだよね? 共有メモリを活用する、繰り返し使用する正規表現はlexで、 大きなプロセスは常駐させてローカルソケットでCGIと通信してCGIは小さく作る、 データベースは下手に使わない、巧く使える場合にだけ使用する。 >>354 サーバーがつんでるメモリーの量によってどっち優先かは変わると思われ。 メモリー使い切ったらswapのオーバーヘッドがかかってかえって遅くなるし。 まあ、最近のサーバーはメモリーを湯水のように持っているからそんなこと考える必要ないのかな? Perl5からPerlでもコンパイルした状態で設置できるようになったと読んだんですがどうすればできますか? >>359 perlccを使う。 使ってどの程度早くなるかは知らんけれどね。 >>358 共有鯖ならいくらメモリ積んでいようと割り当てられるのは 微々たるもの >>360 散々言われてていることだが、perlccではモジュールはろくすっぽ使えないので注意。 >>360 早速やってみたところかなり速くなりました。 でもサイズが2kちょいから800kほどに... >>363 perlcc使ったことあるけど、2kじゃなくて2MBになったよ mod_perlだと数倍早くなるのに perlcc だと1割くらいじゃない? ダブルクオートを極力使わないだけで結構速くなるらしい。 理由は説明しなくてもわかるよね? >>368 '"'でくくると中に'$'が入っているかを検査してるから? >>371 Yes she does! PHP のメーリングリストなんかでも、 速度を少しでも稼ぎたいときの小技として紹介されることがあるね。 すべてのルーチンを一つのファイルにまとめてしまうのより、 ひとつひとつルーチン毎にファイルを分けて、 一度に呼び出す方が負荷が大きいですか? >373 漏れもそれ思うんだが、ファイルをまとめようが分割しようが、 結局たいした大きさじゃないので、どっちもオンメモリってことない? 使わないコードを解釈させない為に分割するんであって、 分割しても常に全部使うのなら、まとめた方がシステムコールが 減っていいと思う。 Perl だったら CGI.pm でやってる遅延読込が参考になるかと。 あれはあれでメモリ食いそうだけど。 >>375 それじゃ、useでモジュール呼び出すより、 requireで、必要な所で呼び出す方が良いって事ですね。 >>376 別に必要になったところでuseすればいいんでないかい? そうそう、SelfLoaderかまして起動時には一部しか読み込まれないように工夫しないといかんね。 requireはそこに来た時点で読み込まれる。 function hoge() { require('hoge.php'); } hoge(); らなければ読まない。 Perlも同じく。 コメントを山ほど書いたら負荷になります? スクリプト自体軽くした方がいいんでしょうか。 >>382 富士山ほどのコメントを書いたら負荷になります。 >>382 わかるほどの差は出ないからちゃんと書いといたほうがいいよ >>386 体感できるほどの差ではない、つまり実質0 正直言って、コメントなんか処理速度に関係なんかない。 そりゃ、数百Mとかのコメントとか入れてたら、 メモリへロードするのが遅くなるだろうが、 処理速度そのものは、何の影響もない。 え???? コンパイル時に無視されて、コンパイル結果もキャッシュされる わけなんだから、全く影響しないんじゃ? >>394 コンパイル結果に反映されないのは当たり前 コンパイル時に無視するためには最低限の判定が必要 要はコメントかどうか判定するフラグが少ないに越したことがないのか という話でしょ CgiPerl , CgiPHP , mod_php のうち速度が一番なのはmod_phpなのは知ってるけど 負荷が掛からないのはどれ? >>396 その中に、なぜmod_perlがないんだ? printで一行づつ出力するか、 変数にデータを入れて、printで一気に出力するかどちらが負荷少ない? それともヒアドキュメント使うか。 どれよ? >>398 そうそう、オレも知りたい。結構悩むんだよなー。みんな その辺の使い分けはどうしてるの? printよりechoのが速いってのは聞いた事あるけどね。 そういえばPerlにCのfflushのような関数はないのかな? $|=1;print "";$|=0;とやるしかない? >>398 変数作って一気に出力する。 エンコード自由に変換して掃き出せるようなものの場合はどうしてもこうなる。 ヒアドキュメントは $aya=<<EOL; あやや あひゃひゃ EOL で変数ぶち込めるし。 echo " うほっ いい男! "; これでいいだろ >>399 mod_phpも同じだ。 >>401 速度は、 mod_perl > mod_php > CGI Perl > CGI php の順。ちゃんと実験したサイト行って、見て来い。 >>408 >mod_phpも同じだ。 PHP可を謳っている鯖屋はmod_php可という意味で、CGI可(※)を謳っている鯖屋は、 CGI/Perl可という意味で謳っていると思うのだがどうだろうか? CGI可に比べてPHP可の鯖屋が少ないのは事実だが、mod_Perlを使える 鯖屋を見た事がないのは、漏れの調べ方が甘いからなのか・・・ ※)一般的にCGI=Perlという認識があるのでこのような書き方をあえてしたが・・・ つまり何が言いたいかと言うと、mod_php使える鯖がそんなに非一般的では ないんではないかという事だ。 mod_php っていう言い方、あんまきかないんだけど、 cgi版じゃない普通(というか一般的というか)のphpってこと? >>409 適当な拡張子をApache::Registry上で 動くようにする事自体はむずかしくないんだけど ユーザーのモジュールの名前空間に制限がかけれないので userAが use lib (/home/userA/lib/); use myPackage; としる状態で userBが use lib (/home/userB/lib/); use myPackage; とかしてくれちゃうと、動作がめちゃくちゃになってしまうので ユーザーにmod_perlな環境を提供できません(´Д`;) >>410 mod_phpでない場合(サーバー組み込みで無い場合) 「php対応(ただしコマンドライン版)」という表記をみかけます >>411 レン鯖(共有鯖)ではmod_perlを提供できないって事? って事は一般的な環境ではPHP>perlつー事? でもな、Perlには、FastCGIとかもあるからな。 >ちゃんと実験したサイト行って、見て来い。 ああいう非現実的な試行環境に統一して対照されても参考にできないよね、、 まだmsがやったベンチ結果のほうがdqnぽくない PHP5のケース別ベンチやってくれんかな 個人では実験環境が作れないしzendの情報だけでは激しく不安だし、、 話は変わって、itboostのtips「効率的な処理」に、phpのループ構造は遅いから、 コールバック関数を繰り返し呼び出すとphpではなくcレベルでループが走ってくれるて いいよってネタがあるけど、これはどうなん? (あれはcountを一度にすれば大差ないような気もしつつ、、。 個人で実行速度を計測するといえば、ループ処理のことだと言ってもいいかと おもうんだけど、これってphp特有の問題? >>412 ハンドラ好きにさせるのはもってのほかなので Apache::RegistryかApache::PerlRunを提供するしかないと おもうのですが、前述の問題があり、自分の知識内では 不可能と判断しています。 (他に良い方法がないか探してるのですが...) >>414 FastCGIも、共有サーバだとデーモンプロセス上がりまくりで 現実的では無いような気がしますが^^; >>ちゃんと実験したサイト行って、見て来い。 >ああいう非現実的な試行環境に統一して対照されても参考にできないよね、、 どこのサイトを見てるんですか? mod_perlとmod_phpの比較は、ここな。 http://www.linc.or.jp/ ~takaaki/Family/takaaki/Labo/dynamic_page.shtml >417 そのへんはコミュニケーションギャップを楽しむところだと思ったり。 __∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄ ageんでも保守はできるでしょ ?> <html><head><title><?=$title=></title></head> <?php と echo << end <html><head><title>$title</title></head> end; はどっちが軽いんだろうね・・・ >>428 私もそんな気がして、なるべく上の方使うようにしてる でも変数が多いところとかは下のやつ使ってる PHPに、テキスト中に変数があるかどうか判断させる後者よりも、 明示的にする前者がやっぱ速いかな?特に変数が多いほど。 でも、PHPモードに入ったり抜けたりする負荷(と言えるかな?)を考えると前者のような気もする… echo ' <html><head><title>'.$title.'</title></head> '; これでいいべ >>431 長い場合、echoを大量に書くわけにもいかんでしょ HTMLのフッタ部分は定型に近いから?><?phpを使ってるんだけど さほど変わらないのかなぁ・・・ >431-432 http://www.php.net/manual/ja/language.basic-syntax.php にもあるとーり結局内部的には echo で処理されてるから あとは可読性の問題じゃないかねぇ。 ∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ mod_perlで動かすと、速いときはバカみたいに速いが、 遅いときはイライラするぐらい遅い。 普通こんなにバラツキがあるものなのですか? >>436 新しいhttpdの子プロセス上がった時とかキャッシュがないからでは? 重そうなモジュールは起動時に読み込むようにするとかして コンパイル時間短くしたら? speedyCGIで負荷が高くなると、InternalServerErrorが出るのですけど、 私の書き方が間違っているだけなんですかね? >438 mod_perl1.2使ってたとき、モジュールのキャッシュ無視して、別空間にロードされる場合も。 最近のバージョンで改善されているかどうかは不明ですが。 >>440 モジュールの更新日が変わってるとか%INC消してるとかでなく? どうやってその現象確認しました? >>441 初回にロードした時間を記録するクラス作って、何度かリロードして確かめた記憶が。 他にも、子プロセス関係で何かしたと思ったけど、忘れた。 %INC消さなくても、ロードされる時はされてましたよ。 ライブラリモジュールに限らず、同一ファイル、同一パッケージ名の空間も 複数のキャッシュが存在してしまうこともしばしば。 それ知って以来、mod_perlは一切使ってませんが。 で、最近のバージョンはどうなんでしょう? >>442 webDBで、mod_perlを導入したが、遅い。 まだSpeedyCGIの方がパフォーマンスが良い。 ただ、>>439 の言う通り負荷が高くなると不安定なんだよなぁ。 なんか回避方があったら、教えて欲しいよ。 >>443 私もWebとPostgresqlで組んでいるのですが、 mod_perlだと、速度のバラツキが尋常でなくて採用を辞めましたよ。 SpeedyCGIが安定さえしてくれれば、何も心配ないのですけどね。 >>444 DBI.pm使ってるからじゃないの? それはmod_perlのせいじゃないような気が。 >>447 >>446 じゃないが、DBIは遅い気がする。 あとDBIじゃなかったかな?サーバー名にIPアドレスじゃなくて FQDN指定するとident投げるのって。 identが繋がらないとタイムアウトするまで固まるんだよな。 そういえば、PostgreSQLの日本語サイト見てたら、以外にも Perl/CGIで利用しているところが多いのにビビりました。 DBMS使う以上、何らかの効率性を望んでいるのだと思うけど、何故Perl/CGIなんだと問いつめたいよ。 >>450 逆に、Perl/CGIだと何がだめなのか説明してみてください。 >>450 漏れはMysq;でPerl/CGIしてるけど、移植元がperlだったから単純に鯖の負荷軽減が目的だったりしたが・・・ それに、Phpだと複雑なソース書ききれんかったろうってのもあるわけだが、お前さんはなにでやれと? perlなんだが。 ある位置から数行くらい読み込む時、 10kbくらいのファイルと、300kbくらい(要するにでかい)ファイルでは 負荷に違いってあります? open IN, ...; for($i=0; $i<10; $i++){ $line = <IN>; ...処理 } close IN; みたいなプログラムでつ。 >>455 どうやって「ある位置」までファイルポインタを移動させるかに依る。 行単位で空読みさせて移動するよりは seek 一発の方が速い。 その例だとファイルの先頭からだから変わらん。 >>453 Perlで書けてPHPで書けない「複雑ソース」って何? >>457 最近あまり追ってないんだが、 PHPってtermiosによる端末制御できたっけ? fork()は出来るけどpipe()は出来たっけ? あと、PHPはスコープが滅茶苦茶だから(まぁPerlも変だけど) あまり大きいソースを多人数で書くのには向いてないと思う。 >>456 サンクス 1行の文字数が不定なんでseekで飛ぶことが難しいんす。 2chログのように301-400だけ表示みたいな場合は やっぱ空読みしてるんかな。 でもどうやってx行目を見つけ出すの? 適当にread系のcgiを漁ってみたけど、やっぱ空読みしてるみたいだわ。 >>462 1000行程度なら空読みでいいと思う。 万単位になったら、インデックスと作るとか対策考えろ。 >>462 1、行ごとのファイルポインタを記録してある。 2、一定件数ごとに、ファイルポインタを記録してある。 3、2chは入力値の長さが決まっているから、固定長フォーマットにしてある。 これだけのアクセス数があるところで、空読みは考えにくいな。 板のトップで、数千行単位で空読みされるのですか? >>464 今は知らないけど、今までのVerでは思いっきり空読みしてるよ。 ↓以前のread.cgi空読み部分。 else { if(nn_st && lineNo < nn_st) continue ; if(nn_to && lineNo > nn_to) continue ; if(nn_ls && line < lineMax - nn_ls) continue ; } ファイルのオープンってI/Oの負荷がでかいから、 ファイルポインタを記録/読出しするのも結構な負荷になる。 あぼーんの処理も面倒になるし1000行空読みの負荷がたいしたこと ない(実際やってみ)事を考えると、大してメリットはないと思われる。 ちなみに2chは固定長フォーマットではないし、板のトップは書き込み時 に更新されるだけだから、read.cgiより呼び出される回数は圧倒的に少なく それほど問題にならない気が。 useって宣言した場所によって読み込まれる時期が違うの? それならJcodeなんかは先頭でuseせずに 送られてきたデータのチェック済ませてから読み込ませた方が良いのかな。 #チェックにJcode使うなら別だけど SpeedyCGIでどうやったら、負荷が高いときのエラーが無くなるんだろう。 もう訳がわからん。 >>471 負荷を軽減させるために、>>470 がspeedyCGIを入れたんだろ。 ここは、負荷軽減の為のスレだよ。 PHPの掲示板なんですができるだけ負荷がかからないログの読み込み方法ってどんなのがありますか? 今は書き込みや読み込みの時にfile()で全部取得しているんですがログが増えると負荷が大きくなりそうな気がするので。 >476 ないですね! 逆に、なんでDB使うのいやなんですか?! >478 474が悩み事の矛盾に気がつかないからだよ! >>477 2ちゃん程度の規模でもDBなぞ使ってないんだが。 ていうか、逆に2ちゃんをDBで書き直したらえらい事になると思うが・・・。 普通のBBSって書き込みはFIFOだし、読み出しはシリアルだから 逆にDB使うほうが負荷が大きくなる。 DB使うのが嫌っていうか使ったことないので DB使わずにfile()以外のやり方ないかと思ったんですが 「スレ読めよ」か。「スレタイ読めよ」と勘違いした。 >474 データ構造を固定長にしてバイナリファイルに格納しておき fseek fread fwrite などを使えば部分処理が出来るから負荷は 減ると思うよ SpeedyCGIでエラーが頻発したので、PerlからCに移植した。 えらく辛かったが、めちゃくちゃ速くなった。 apacheの軽量化が威力あると言うが、 具体的にどういったモジュールを消せば良いのだろう。 >488 とりあえずスレ違いと思われ スクリプト上で解決可能な話題が主題かと思う 人よりちょっと知識の多い香具師が少ない香具師を馬鹿にするスレはここですね。 >>490 apacheもスクリプトも両方チューニングして、 「負荷軽減対策委員会」と呼べるような気がするのだが… >>1 を見る限りそうとは思えないけどな 方針変更という事で・・・ Apacheのチューニングはスクリプトの有無や出来とは関係なく できることだし、別問題じゃないか? 足りない? mod_mime_magic,mod_dir,mod_auth,mod_access,mod_cgi,mod_log_config,(mod_env) (mod_perl) >>501 速度重視ならDSOを使わな方が良いという話で良い? >>502 そういうこったな(w >>501 「あぱちのmoduleとして動作させると」とか 書いとけばつっこまれなかったのにな 素直に専用鯖借りてmod_perlとgzip圧縮でも使いなさい。 変数より定数使ったほうがやっぱ軽いのかなぁ・・・ あとは定数と直接数値を書き込むのはどっちが軽いのだろうか >>509 ぐだぐだいう前にベンチしろ、このヴォケが ね、みんなローカルでPerlをテストする時、何のソフト使ってるの? Winで簡単なPerlだったらプロンプトで十分だけど。 Perlを始めよう、ならエディタから直接プロンプト起動できるし良い。 俺はtxt,HTML,Perl,PHP,SQL,C,Java,XMLなど全部ひとつのエディタで やりたいからEmEditor3を使ってる。 ね、みんなローカルでPerlをテストする時、何のソフト使ってるの?? 自分は エディタ・・・秀丸 ブラウザ・・・アパッチ 特に深いことは考えてない。 エディタ:QX(慣れてる&コマンドラインに渡せるから) サーバー:ANHTTPD(既に入れてたから) なんだけど、やっぱ、アパッチの方がいいかね? ……スレ違いだけど、この話題続けていいもんかね。 負荷軽減にはあまり関係ない。 エディタはPerlエディタスレ、サーバ話は何処が良いんだ。 無難に初心者質問スレでも薦めておくか。 ところでブラウザがアパッチって凄いな。 あ、ごめん、サーバの間違え >>512 がブラウザ?って・・・ テストサーバーで、JAVAみたいに「;がありません。」など、 エラーの内容を出力してくれるサーバーって無いの? >>521 例えばCGIでエラーを標準出力に表示するのは? >>522 え?そんなのあるの?知らなかった・・・・ やり方は? >>523 言語にもよるけど、rubyならこんなかんじで begin # 例外が発生する可能性がある処理 rescue 例外 puts "#{$!} (#{$!.type})" puts $@.join("\n") end perlはよく知らないけどこれでできるかな? eval 'なんかの処理'; print $@ if($@); 巷に出回る perl CGI って、 1. グローバル変数多し、my レキシカル変数使わず 2. 関数分割せず、ベタ書き 3. ヒアドキュメントを使わず、print '' の嵐 なものが多い。こんな手法が負荷軽減に貢献すんのか? 意見求む。 >>526 > 2. 関数分割せず、ベタ書き について負荷軽減との関連性についてのご教授お願いします。 軽減はしますよ。 でも、HTML を軽くするために、すべての改行を取り払ってサイズを小さくしよう的な アプローチですにゃ。そこまで必死な人は、すればいいにゃ。 ベタ書きのほうが負荷はかからないのは言うまでも・・・ ブラウザゲーム作るならやっぱりphpのほうがええかな? >>531 負荷を考えれば、そうだけど。 普及を考えれば、どうかにゃあ。 ヒアドキュメントってprint"と変わらないんじゃなかったっけか? ケース1:print 文の嵐 print '<HTML>'; print ......... print '</HTML>'; ケース2:print 文いっかいだけ print '<HTML> ....... </HTML>'; ケース3:ヒアドキュメントで print 文いっかいだけ print <<'END of HTML'; <HTML> ......... </HTML> END of HTML こういうのを比べてるってこと? ヒアドキュメントかどうかは関係がないと思うけど。 ケース2とケース3は、(ヒアドキュメントの末尾の改行を除けば)等価でしょ? じゃなかったら首つるです。 違いが出てくるとすれば、パース・・構文解析にかかる時間。 それも有意差は出ないでしょう。 異論ありますかにゃ? >>535 ttp://boobar.hp.infoseek.co.jp/bench/print.txt PHPAってどのくらい早くなるんだろうか。 …測定はやはり浮動小数点か何かでやったらいいのだろうか。 PHPAってコンパイルキャッシュするだけか。 (´・ω・`)ケイゲンサレタノカ、ヨクワカンナカッタ。 >>540 PHPA、だいぶというかかなり違うようですが。 Turck MMCacheってのを使ってる奴いますか? http://turck-mmcache.sourceforge.net/ 能書きのとおりなら「最速」だそうだが。 >526 my 変数の方が速いの? 速度とか関係無しにstrict通るようにした方が良いだろうって話は置いといて。 >>544-545 ttp://boobar.hp.infoseek.co.jp/bench/scope.txt メモリにかかる負荷を測定するってことは出来ますかね。 ああ俺もそれ調べたい。 と言うかメモリ使用量とかどうやって調べてるんだろ…。 測定用のモジュールとかあるのかな? >>547-548 OS に依る。Linux や *BSD なら vmstat(8) とか top(1) で 別ターミナルから測定。 Winは無理っすか。 タスクマネージャみたいな監視ツール作ってログ取るようにすれば良いんかな…俺にゃ無理だけど…。 掲示板とかのスクリプトでHTMLを吐き出してそれにアクセスさせるってあるけど ログファイル自体をHTMLにするって効率悪いよねぇ。 >>551 変換するのは1回だがアクセスされるのは何度もあるからいいのよ 逆にアクセス解析とかカウンターとかは変換するだけ無意味って言うか ログなんて管理人しか見らんし。 今日、会社休みます。。。 会社の負荷を減らすためにネ! 堕スレ化したの? でも、結局負荷軽減ってアルゴリズム考えた方が、 myがどーの、ヒアドキュメントがどーの、言うより意味あるよね。 言語選択ではある程度答え出てるし、このスレの意義って。。。 ちょっとした負荷を減らすために非常に参考になりました やっぱ表示速度を優先するか サーバの負荷を優先するか。 きわどいな… > [ネットランナー] > ベスト・オブ・ツール 2002 > サーバ&コミュニティ部門 掲示板CGIカテゴリー > (祝) 金賞受賞 これはすごいことなの? >>570 「ネットランナー」って読んだことないです とりあえずぐぐってみたら、 http://www.zdnet.co.jp/internet/runner/ > 超ヘビーユーザーになるためのインターネット活用誌 ( ゚д゚)ポカーン >>571 厨房の愛読書だよ 賞もCGIの人気とか上っ面だけしか見てないで取ったりして、 作る人から見たらひどいソースのものも入賞してる うるせぇよ、年末の賞の審査員は有名サイト管理者を寄せ集めてるんだから、 それには文句いうの(・A・)イクナイ!! まあ、実際使う側からしてみれば、 たいていのやつがソースなんてどうでもいいんだがな。 ちょっと使ってみた 重(・A・)イイ!! 返信で無制限にファイルをアップロードできた ファイルタイプの判別を拡張子のみでやってる 設定でどうにかなるかもしれないけど とりあえず気になったのはこんなところ ていうか、コード酷すぎ。 配列の使い方すらわかってないように見えたし、変数全部グローバルだし。 関数の使い方も変だし。 ネットランナーとかいう雑誌のレベルがわかっちゃうな >>566 ネットランナーとやらでは金賞かもしれんがバグ放置はまずいと思うぞ。 常にSTDINから無条件で受け入れる仕様。 投稿記事がある状態で-Tを付けて起動するとrtn_gnrl.plで起こる無限ループ。 管理用ページ→基本設定→「記事ページ最大表示数」を空にして設定保存→掲示板へ戻ると Lib_gnrl.plで0除算して二度と起動しなくなる事で負荷を下げるエレガントな仕様、等他大量。 >>581 > 負荷を下げるエレガントな仕様 禿しくワロタ [Tue Dec 02 20:31:53 2003] [error] [client 127.0.0.1] Illegal modulus zero at ./routine/Lib_gnrl.pl line 514. [Tue Dec 02 20:31:53 2003] [error] [client 127.0.0.1] Compilation failed in require at bbs.cgi line 35. こんなとこで陰口たたいててもしょうがない。 直接言ってやらないと。 Linuxサーバ、topで調べてみたら 毎晩httpdにCPU20〜89%くらい使用量があって サーバが激重なんですが、原因がはっきりしない… Apacheやネットワークの設定をどうにかこうにかして 負荷を減らす方法無いですか? >>587 どのようなスクリプトを実行させているか、で話は変わってくる。 >>587 非力なwwwサーバで山ほどモジュール組み込んで激重CGIでも置いてるんだろ >>589 2ショットチャットとか画像アップローダとか・・。 >>590 えーっとサーバは確かPenIVの2GB、RAM1GBだったかな。 PenIVの2GB PenIVの2GB PenIVの2GB PenIVの2GB PenIVの2GB すれ違いと言われたのでここにきました。 my($a,$b,$c); とするのと my($a);#コメント my($b);#コメント my($c);#コメント と書くのでは、処理速度や負荷に差がありますか? 配布とかメンテを考えると後者で書きたいんですが。 全体で150KBくらいになるCGIソースで 処理によってはルーチンのうちのほんの一部しか 使わないという場合、 処理をライブラリにしてrequireするのと 全体が1ファイルなのとどっちが効率いいのでしょうか? 計測ってどうやってやるんですか? でっかい実行ファイルを起動するのと ちっちゃいのを起動してrequireするのと どっちが軽いかという問題だと思うんですが。 >>606 負荷が気になるなら負荷を調べる方法ぐらい知っておいたほうがよろしいかと >606 そもそも、あなたの「軽い」ってどういう意味ですか? >>606 requireのとこまで来たら結局全部読み込まれるのではないかな? 処理順では通らない部分のrequireも スクリプト内にあるとrequireされるんでしょうか? requireを見つけてからrequireする? >>611 そんな簡単なことぐらい試せばわかるだろ #!perl if ( 0 == 1 ) { require './存在しないスクリプト.pl'; } exit; 一枚岩で作って、え〜となんだっけか名前わすれたけど 一回実行したらメモリー上にキャッシュして次回から高速実行するツール あれ使ったほうが軽さという面では圧倒的(ただしCPU負荷) 回線負荷は変わらんし大概先に満杯になるのは回線帯域のほうだ perl、phpの中でだろ? 共有鯖での利用を考えてる人もいるだろうし 7行プログラムってスレ、すごいねアレは。 でも、短くするために敢えて重い処理をしていることもあると思うんよ。 それでも短いから負荷は感じないわけだけれども。 単純に処理を軽くする以外にも、コードを小さくする負荷軽減もあるんやねぇ。 言ってること矛盾してるじゃん。 >短くするために敢えて重い処理をしている >コードを小さくする負荷軽減もある ドキュンやな。 翻訳を試みた。 ある処理をする際に A: 複雑な処理をする組み込み関数を使う B: 単純な処理をする組み込み関数をいろいろ組み合わせる の2種類の方法があるとして Aの負荷 < Bの負荷 ってこと? >>620 YES. そういう場合もあるんじゃないかと思ったので。 HTTP/1.1 のチャンクコーディングを忘れてない? 試しにnph ソースを作って、Content-Length を送信するようにしたら、 チャンクコーディングされなかったけど、接続が毎回切れるみたい。 どっちが良いのか微妙っぽい。 A.. if($aa=~/x/){$pa=1;$pb=1;}else{$pa=0;$pb=0;} B.. $aa=~/x/?($pa=1,$pb=1):($pa=0,$pb=0); 等価らしいです ソースは、ttp://ww4.tech.nu/?d=653 たしかにコードは短くできるので試したところ レスポンスが悪く、重くなった気がします >>625 三項演算子使ってるだけでしょ、普通に使うけど。 レスポンスは落ちるのかなぁ? PHP普及の原因は、イスラエル・Zend社のマーケティングの成功にある。 @Perlでは別インストールで多くの人が知らないデーターベース利用を標準で使用できるようにし、「データーベースが簡単に取り扱える」というイメージを特に強く植えつけた。 Aウェブサイト作成への特化。例えば、セッション管理がそうだ。 Bソースの隠蔽による著作権保護を可能にした。 データーベースを使いたいが、使い方がわからない。そこに、PHPなら使えるという情報が先に入る。これで、PHPに入った人もかなり多いはず。 PHPの言語仕様はZendに大きく左右される。 二年ほど前、PHPが出始めた頃には、変数のスコープがPerlとまったく同じ仕様だった。 もともと、Perlのソースコードを改編して作成されたPHP。 ↓PHPの歴史 http://php.planetmirror.com/manual/ja/history.php PHPには、Perlコードの退行による高速化の意図が言語のいたるところに見える。 マイクロソフトは、オブジェクト指向への対応というのが大義にVB6.0からVB.NETに言語仕様を大幅に変えた。 今後も大きく言語仕様が変わることはないのか? オープンソースとは言っても、Zend社の http://www.zend.com/management.php の数人のスタップによって大きく左右される。 再帰的定義とされる「PHP:Hypertext Preprocessor」という名前にも理由がある。これは、要するに、正確には、「Perl Hypertext Preprocessor」としたいところだが、GNUの「GNU is Not UNIX」という再帰的な定義をもじったものだ。 要するに、「GPLのフリーソフトのライセンスには違反していませんよ!」と一つには主張し、また、一つには、「PHP is Not Perl」とでも言って、Zendの社としての姿勢を、先人の「Perl開発者たち」から擁護する意図があったのだろう。 Nではなく、Hなのが、そのための味噌だ!Perl開発者たちは、当然、面白くないはずだ。 PHP信奉者は、六芒星(hexagram)マークのユダヤ教にでも、入信せよ! Cで組め。手っ取り早く最速で負荷を極力少なくできる。 負荷を少なくするならまず、 データ構造とアルゴリズムを見直せ 次にCPUをグレードアップしろ それでもダメならCか汗ブラで PHPって Personal Home Page の略? なんで掲示板をテキストファイルに出してるんだ? データベースに入れてしまうのってよろしくないの? 最後の方を読む時とかに早いと思うんだけど。 2chの話になるけどさ、sageで書き込みするとスレッド位置が変わらず、 index.htmlとsubback.htmlの更新・ソートを省略できて負荷軽減に繋がらない? と思ったけどレス数表示のために更新しなきゃならないか…。 もう少し工夫すればなんとかなる気がする。 >641 マジレスするとそんな低レベルの操作をしたら 処理中は他の処理が出来なくなるだろうが 掲示板なら静的HTML生成が一番簡単で一番効果がある。 スクリプトをあれこれこねくり回す前に試してみれ。 javaでクッキーを保存する方法が載ってれば全部HTMLにするのに >>644 それは理解した上で別の方法を模索するスレなのでは? javascriptでクッキー出力はできるけど・・・多分違うことなんだよな >>649 ようするにHTMLでクッキー機能できるようにすりゃいいってことでしょ? セットはcgiですればいいから、あとはそれをJavaScriptでゲットすればいいんだよ。 ファイルの読み書きはperlのキモの部分だから、せめてこれだけは理解しましょう。 javascriptでゲットする方法が載ったサイトきぼん htmlの不都合点とかあるかな? NEWマーク表示できないくらいしか思い浮かばん いらん機能だし HTMLの不都合は、たとえばSSI使わないとカウンターが表示できないとか。 オールHTML化するとレイアウトを変更したときが面倒なんだよなぁ。 ファイル数も結構増殖していくし。 それくらいかの。 HTMLでクッキーとか機能させるって言ってるけどIE以外は無視? operaやMozillaだと文字化け起こすぞ IE以外いいよってみんな思ってるんじゃない? 実際そうだし2chもそうだからいいかな、と。 tcupの掲示板てどうなってんだろう。 拡張子無しで/bbsってなってるのが昔から不思議で。 googleなんかのuri表示で見ると、 http://xxx.teacup.com/yyyy/bbs だと、 www.tcup-.com/xxx/yyyy.htmlが本体らしいんだけど。 javaだとIE以外じゃ日本語取得できないのかorz みんな妥協派ですか? 閲覧時にクッキー使ってなにがしたいの? 投稿時ならともかく。 お!早い。 切替ならそれぞれリンクを用意するだけで済むのでは? 閲覧時のクッキーってストーキング用途しか思いつかない。 >>674 それだけしか思いつかないおまいの脳に乾杯 >>664-667 あたり 2chで化けるのはbbs.cgiで発行してJavaScriptで取得してるからじゃ? つーか無理にHTML表示なんかせんでもいいよ。 動的にやればインタラクション的にも手軽になんでも出来るし。 掲示板の1ページ目だけだけど HTMLにすんのとしないのとじゃけっこう差出るの? htmlファイルに書き出すかどうかは、そのサイトへの訪問者の利用状況によって異なる 一概に○○なら△△とはいえない。 まあ、統計的に、そのページが更新されるまでに10回以上アクセスされるとわかれば、 一般的にはhtml化した方がいいだろうな。 式にすれば html化するコスト << html化しない場合のCGI起動コスト * not modify間での平均アクセス数 の場合は、html化のメリットが大きい まあHTMLよりCGIの方が負担少ないなんてことはないな まあHTMLにしないで負荷を軽減する方法を模索していくのもいいんでない? むしろHTML化できないからプログラムの負荷を下げる必要があるんじゃね? 本当に負荷を下げたいならCGIなんか使わずサイト丸ごと圧縮しておくのが一番だろうし。 俺はCGIを作る側だけど実は↑これが一番好き。 しかしコスト(時間や手間込み)単位での効果ならやはり静的HTML生成がベストチョイスなのも事実だし。 まあ両面作戦だね。 1, Requests per second: 2.67 [#/sec] (mean) perl/cgi 2, Requests per second: 17.53 [#/sec] (mean) mod_perl (1と全く同じソース) 3, Requests per second: 60.22 [#/sec] (mean) html (1,2のプログラムで出力された物をhtmlで保存した物) DBIやarchive等、結構重いモジュールを読み込んでDBにアクセスして表示するプログラム。mod_perlのDBアクセスは永続化している。 処理内容によって一概にいえないけど1つのパターンとして参考までに。 静的htmlだとカウンターだのダイレクトに表示出来ないしクッキーも文字化け(IEではunicode,xxxだとURLencodeだの) 等の問題が発生してめんどくさい。クライアント依存の処理はやはり気持ち悪い。 >>687 これって数字高い方がいいってことなの? ベンチマークに無知でスマソ 確かに文字化けるんだよな・・・ ユーザにHTMLとCGIモードを選ばせるようにしたらいいかも 書き込みのときjavascriptでクッキー発行すれば化けんよ。 「>>1 」 このアンカー、2chではタグをアクセスごとにつけてるんだっけ? >>690 んだよ、ほれ。 http://pc5.2ch.net/php/dat/1034645635.dat サニタイジングもregist時にやってるな。 2chは書き込みも多いが、それ以上に読み込みが凄まじいからな。 質問なんですが、 リンクトレードproやThe Roomのランキングリンクのようなエロサイトによくあるランキングを PHPで作ってみました。ユーザーごとに情報を1行CSVに保存させて、それがカウントファイルも兼ねてます。 表示部分は静的です。 出来上がったところで、上司に負荷かかりそうだからDBにしてよと言われ、MySQLで作り直してみたところ、 現在ユニーク1万/日くらいのサイトであっというまにMySQL接続数多杉エラーが出ました。 サーバ管理者にMySQLの接続数多すぎと出ましたと言ったところ、 設定変えることもできるけど、トラフィック多いサイト目指すならPostgreSQLにしたほうが良いといわれました。 今とりあえず素直にPostgreをサイト見ながらソース書き直してますが、 一体どの方法がベストなんでしょうか。 ちなみにPHPは趣味レベル、DBの経験は今年からなのでソースに問題があるのかもしれません・・ >>693 postgresにすれば良いってわけじゃないような。 ユニーク1万/日ぐらいだと、squidでリバースプロクシを導入してみるとかは? >>694 今後増える予定です。目標が10万PV/日くらいです。 >>695 同時接続数を増やせないなら、1接続あたりの接続時間の短縮をやらんといけない訳で。 もうクエリを発行しないと分かった時点でコネクション切断とか、 そのレベルの最適化はやってるよね? 初心者らしいから言ってみると、WHERE句、LIMIT, OFFSETで取得数を限定して、 DBから取得したけど使わず捨てているデータを削りこむとかやってみそ。 >>696 やってるつもりなんですが、、 inのカウント取得ファイルのソースをコピーしてみます。 http・・・xxx.php?usrid=$usridで叩いて、DB開き。 $tabledata = mysql_query("SELECT * FROM usr_table",$db); //配列に入れ while($row = mysql_fetch_array($tabledata)) {$usr_array[$row[usrid]] = $row;} //t1フィールドに直前IP記録&カウント if($rmhost != $usr_array[$usrid][t1]){ $incountup = mysql_query("UPDATE usr_table set incount = ceiling(incount + 1) where usrid = \"$usrid\""); $ipupdate = mysql_query("UPDATE usr_table set t1 = \"$rmhost\" where usrid = \"$usrid\""); } mysql_free_result($tabledata); mysql_close($db); if( !$db ) { print "接続できません。<br>\n"; exit; } header("location:{$homeurl}"); これだけです。これで動いたんですが、やっぱり記述おかしかったりしますかね、、? まさか mysql_pconnect とか使ってないよね? >>693 ランクカウント以外の部分(順位の表示とかカテゴリ参加数の表示とか)はどう処理してる? もしリアルタイムでやってるなら、静的なHTMLで処理するとかcronで処理させるとかすると、 劇的にコネクト数は減るよ。 ユニーク1万にも耐えられないならDB使う意味ないし、Postgresにすりゃいいってもんでもないと思ふ。 やはり、設計段階からの見直しが必要かと。。 毎秒何回ぐらいqueryの発行あるか分かるなら書いてみて。 mysql_pconnect思いっきりつかってますが、、それって駄目なんですか? >>699 順位他の処理は、3600秒ごとに静的に書き出してテキストファイルをrequireしてます。 cronではなく、テキストファイルにタイムスタンプ書き出してアクセスごとにチェック、前の書き出しから+3600秒以上経っていたらランキング再書き出し、という感じです。 >ユニーク1万にも耐えられないならDB使う意味ないし、Postgresにすりゃいいってもんでもないと思ふ。 ですよね。。 毎秒何回query発行あるか、どこで見れば良いんでしょう。。 とりあえず今はサイト止まってしまうので旧テキストファイル版に戻してしまいました。 >>700 やはりそれぢゃったか mysql_pconnect して DB に接続すると mysql_close しても スクリプトが実行を終了しても それどころかクライアントがブラウザを閉じた後も DB接続が切断されずに残り続けるんぢゃよ つまり今の状態だと mysql_close が全く効いておらん これは接続をプールして再接続の負荷を減らすためのGJな機能なんぢゃが DB接続数上限が逼迫している状態では逆に足を引っ張ってしまう両刃の剣 素人にはお薦めできないとまでは言わないが、注意して使わんといかんのぢゃ mysql の最大接続数を apache の MaxClients より大きく設定する、とかぢゃな とりあえず mysql_pconnect を myqsl_connect に変更すれば mysql_close で接続が切断されるようになるので かなり状況が改善するんぢゃないかのう うわー、、そうだったんですか。 きっとそれっぽいですね。 大変勉強になります。ありがとうございました。とりあえずそれを試してみます。 >>697 なんてか、削り込み以前にDBMSの本をちゃんと読もうよ。。 header("location:{$homeurl}"); と、リダイレクト先URLしか要らないのに、 $tabledata = mysql_query("SELECT * FROM usr_table",$db); ここで全テーブルデータをぶっこ抜いているのがそもそもの間違い。 ここは $tabledata = mysql_query("SELECT * FROM usr_table WHERE usrid = \"$usrid\" ",$db); と必要な行以外は抜いてこないように直すべき。 全テーブルぶっこ抜きの方法は、いわゆる「MySQLでかんたん掲示板」系の 入門書から取ってきたんだと思うけど、このやり方、小さな個人サイトなら またしも10万PV/日のサイトに使える方法じゃない。 という訳で入門書以外のDBMS専門書を読むことを勧める。 perl のDBMモジュールでも データーベースオープン 全データーを配列にコピー データーベースクローズ その後配列に対して処理色々なんてことをやってるスクリプトを見かけるが 全部読み込まなきゃいけない処理なら普通のファイルに保存したほうが軽くて速くないか? >>706 早いかもしれないけど影響がでるほどの量だとすれば、 データの書き込み(更新)する必要がある場合dbでやる方が安全だと思う。 >>707 いや、だから、あのさ(w db使うなら丸ごと読み込んだりしないだろう?普通 全ぶっこ抜きじゃトランザクション隔離のかけらも無いよなぁ 大前提として、どれくらいの規模(データと一日あたりのhit数)になったときに プレーンテキストからDBに移行するべきなのかという目安を考えるべきだと思う。 サーバスペックやスクリプトの作りにもよるからなあ とりあえず思いつくのは ・アクセス頻度と平均処理時間から待ち行列を計算して「ヤバ」と判断したとき ・top の load average が 1 を超えたとき ・HDDのスワップ音が聞こえるとき ・体感的に「重い」と感じたとき 表示用HTMLファイルとか作成しちゃうなら、場合によっては 小規模でもデータはDBで管理した方が良いね。 そうだな、俺もDBが動いてる環境なら規模によらず常にDBを使う DB使った方がコストが安くすむ…場合もあるからDB使っちゃうな。 こんな俺はきっと駄目なPGだ orz httpd.conf 最適化とかリバースプロキシとかの話はここではしてないの? >>721 それはWebProgを走らせる「環境」の話だから。 ここは共有鯖で使うCGIの負荷を以下に下げるかの話するスレ(機能してないけど) httpd.confみたいに説明書と設定ファイルが同じになってると萎える コメント行削ったら半分以下になった すいません、ちょっと負荷の意味が違うかもしれない質問なのですが CGIやPHPで大きなファイルなどのダウンロード速度の制限などを行えるのでしょうか。 検索してみても出てこなかったので やはりサーバーの方で直接設定しないと出来ないものなのでしょうか。 普通はmod bandwidthとか使ってやると思うけど・・ >>724 スクリプトでファイルを読んで、pushするなら出来ないことも無い。 でも回線負荷は下がるかもしれんが、サーバの負荷軽減にはならんでしょ。 普通は>>725 の通り。スクリプトでファイルを送り出すなんてしない(高負荷)。 となると,DBにファイル放り込むのはよくないのかな 教えていただき、ありがとうございました。 やはりサーバー側で直接行う方がスマートで負荷低減になるのですね。 当方サーバー側をTelnet出来ない専用サーバーをレンタルしており スクリプトでどうにかならないか考えておりました。 SQLite機能がついており、ファイル制限が出来るらしいのですが DBもやめた方がよいとのことで、 ありがとうございました。 >>727 管理上の必要があれば、DBに放り込むこと自体が悪いわけではない。 >>728 専用鯖なら負荷かかってもいいんじゃないの >>728 専用サーバなのにTelnetできないのかww ちょいと具体的な話でなくてもうしわけないんですがとあるWEBアプリケーション(phpからpostgresを使ってるらしい)について相談をうけまして ちょっと覗かせてもらったらapacheのプロセスがひとつ毎に10MBほどもメモリーを消費しちゃってるんで、一瞬、え?っと思ったんですが 当方phpもpostgresもあんまり詳しくありませんのでもしかしたらこの構成だと普通の状況なのかな?とも思いまして質問させていただきました phpはapache2.のモジュールとして組み込んで有ります。 それくらいふつうだろとか、直感的になんかあやしいとか、プログラムがタコだとそうなるとか、感想をお願いします >>734 要約するとapacheのモジュールとして組み込まれたphpからpostgresqlを使ったらメモリーを10MBガメるのは普通ですか? ってことだな ただ単にApacheに色々組み込みすぎて肥大化してるんじゃない? >>736 thx ただのリクエストで、どれだけ消費するか見てみないと、なんともいえないね。 >>733 >apacheのプロセスがひとつ毎に10MBほどもメモリーを消費しちゃってるんで 普通。 正しくは >phpはapache2.のモジュールとして組み込んで有ります のような状況の場合、普通。 (PHPのエクステンションを極力動的に組み込めば減るけど) PHPってメモリー食いなんですね もしかしてCGIから動かしたほうがいい? >>741 10メガ位でけちけちすんなよ 別プロセスで立ち上げると負荷かかって遅くなるし >>741 その代わりPHPを使うリクエストがくる度にロードすることになるから 今度はCPU負荷が高くなるよ。まあサイトの特性で考えれ。 共有サーバなんかはセキュリティを高めるにはCGIで動かすしかないしな。 (例えリクエストの度にロードされてレスポンスが悪くなるデメリットがあるとしても) >>743 >共有サーバなんかはセキュリティを高めるにはCGIで動かすしかないしな。 何故? データの無駄な二重化が無いから負荷は軽減すると考えてもいいんじゃ? 間違ってたらスマソ データがコピーされるのは,値が変更されるときでは? $a = $b ってしてもその瞬間にはコピーされない. らしいね。 だから、PHPでは「パフォーマンス重視の参照渡し」は ほとんど無意味ってことかな。 C ならともかく,スクリプト書きながらそういうレベルのパフォーマンス向上を考えること自体間違いな気もするね. むしろインタプリタだから「少しでも速度向上」を気にするのでは? >>741 eAcceleratorなんか使ったら相当違わない? >>751 要するに PHP を選択してる時点で既にパフォーマンスよりも開発効率を取ってる,ってこと. 速度上げたいなら重い処理だけ C/C++ 使うとか,あるいはハードウェアで解決するとかしたほうがいいんじゃないかな. アルゴリズムの最適化はもちろんするけど. アクセラレータつかったりFCGI化するだけで天と地ほど違うぞ インタプリタだからこそ工夫するというのはその通りだけど、 ざっくり体感に跳ね返ってくるレベルで考えたほうがいいと思う >>733 たかだか10Mだろ? そこメモリ何Mのマシン使ってんのよ? 32Mとか?w このスレッドで聞いていいかな・・・? DBサーバとフロントサーバを分ける場合、 両者はやはり同じLAN内に設置するのが基本ですか? 離れたところに置くと、レスポンスはけっこう遅くなります? >>758 物理的な距離とレスポンスは関係ない。 LANであろうが回線が遅ければ遅い。 WANであっても回線が速ければ速い。 マルチだけど答えておくか。 セキュリティを重視して分けておけ。 どもです。 同じLAN内に設置すべき、っていうわけでもないんですね。 でも普通はLAN内の方が回線は速そうですね。 >>761 何かLANとドメイン(≠インターネットドメイン)を 一緒くたにしてるように思えるけど。 インターネットを介さないという意味なら、プライベートIPアドレスで構成されたLANの中にウェブサーバとDBサーバを置くのが普通。 ウチはRFC1149準拠。夜間の速度が出ないのが悩み >>757 たかだか、というけど、メモリ上限のあるVPSとか借りてると結構辛いよ? 今更だが このスレって負荷軽減の邪魔する委員会なんだろ? PHP+MySqlでユーザー認証する時、DBにはユーザーのIDやパス他の情報があるとします。 仮にそれはもうめちゃくちゃユーザーが登録されていて(かなりの負荷)、DBの読み書きをする場合以下の2つのパターンだとどちらが負荷がかからないでしょうか? 速度の点についても知りたいです。 1.1つのテーブルに全員分登録しておき、普通に読み書きする。 2.ファイルに「ID+その人が使用するテーブル」を記述しておき、それを読み込んでから、複数用意されてるテーブルの中から指定されたテーブルを動的に選択して、読み書きする。 どうなんでしょ?質問+保守上げ。 あ、2の複数テーブルはまぁ10個くらいとします。 仮にデータが50000件あれば1つのテーブルは5000件で済むということになりますよね? >>776 試して測ってみんなに報告。これで皆幸せ。 多分1の方が効率的だと思うけど。 レスありがとうございます。やっぱり1ですかね。 2だと他に色々やりたい時不便になってきますよね。 地道にプログラム面を改善していった方がいいのかもしれませんね。 >>778 2chはテキストファイルベースです 言語はC >>776 1の方 DBの負荷を下げたいのなら、テキストファイルベースの処理を上手く使うといい 2chはperl+SpeedyCGIで、一部Cじゃなかったっけ? bbs.cgi=Perl read.cgi=C だったかと bbs.cgi=Perl; read.cgi=C; リレーションがいらないなら、フラットなただのテキストファイルが早いんだね。当然か。 掲示板の画像をダウソツールで根こそぎかっぱらっていく不届き者を特定した さて、貴方ならどのような方法でdenyする? アクセスポイント絞りの範囲指定で.htaccess。 >>788 ダウソツールとわかるUserAgentならまずそいつを403へ 次に一定間隔の連続or同時接続を503へ それでも懲りないならFWで叩き落す。 私も今、掲示板サイト作ってる途中なので、ちょっとカキコミさせてもらいますお JAVAなのでちょっとperl、PHPスレとは違うけど共通する部分はあるので。 私の場合、某フリーソースの掲示板を元々おいてたんですけど、レス数が3万をこえたあたりから ワード検索やレスのカキコミに非常に時間がかかるようになってしまいました。 そのCGI(PERL)はレスのログをテキストファイルに出力しているんですが、毎回何万行も読むんではそりゃ時間かかる なという感じになってしまいました。 そこで、新しく掲示板作る時には、DB使うべきなのか、それともログ出力用のテキストファイル使うべきなのか、HTMLファイルとして吐き出す べきなのか、どれがいいとおもいますか? 2chとかはオーバーヘッド対策でDB使わない仕様にしてると聞きました。 やっぱDBにするメリットはオーバーヘッド考えると皆無なんでしょうか? HTMLファイルに書き出すってのは軽そうだけど検索用のメソッドをHTMLファイルに走らせると早いのかどうか不安な部分もあるんです。 関係ないのでしょうか? 過去ログを小分けにすればいいじゃん。 2chだって1000レスか512kで別のスレ立てないといけないんだし。 >>792 DBのオーバーヘッドを心配しなければいけない程アクセスが予想されるなら、 表示はHTMLで出力、読み書きはテキストファイル(もちろん分割して)すればいいし、 そうでもないならDB使えばウンコみたいに楽ちん。 >>794 >>795 DB使わない前提で考えると ということは、1スレごとにHTMLファイルを作ったほうがいいんでしょうか? 1スレ、1ファイルにしたら何万ファイルもできちゃいっても大丈夫なんでしょうか? >>797 大変参考になりました。 こんなに役に立った外部リンクは初めてです。 本当にありがとうございます。 最初grep型の検索しか考えてなかった自分の低脳ぶりがはずかしいですw 結局、スレごとに1ファイル書き出して、Luceneを実装してこれでインデクシングして検索に対応することにしました。 Namazuに比べるとどうかな?と最初は考えてましたが、wikipediaでの採用実績を考えると問題ないとおもいましたので。 1スレ1ファイルをテキストファイルで生成して、XSLTで整形してHTML表示しようとおもいますが、YSTやGOOGLEのSEOを考えると、 最初からHTMLとしてファイル生成したほうがいいとおもいますか? テキストファイルで生成するとpageRANKつかないですよね? >>798 何いってんのかよくわかんねえけど ページランクはHTMLで書いてあれば、どんな形式でもつく。 おいコラ 1分おきに画像掲示板に底引き網かけてるやつ 死ね!おまえだよおまえ→.kngwnt01.ap.so-net.ne.jp 丸ごと永久規制してやってもまだやってやがる 何時間PC付けっぱなしなんだよ 火事になって死ね 質問させてください。 Webサーバ上にあるファイル(バイナリ含む)をファイルパス直接指定でダウンロードする(させる)のと、 以下のようにperlのcgiを通してダウンロードさせるのではどのくらい負荷が違うのでしょうか。 … binmode(STDOUT); while(1){ read(FILE, $buf, $bufsize); last unless (length($buf)); print $buf; } … 目的は、IEで日本語ファイル名のファイルをダウンロードするときに ファイル名が文字化けするのを防ぐためです。 つまりapplication/octet-streamやContent-Disposition: attachment; filename=を付けるためだけのCGIです。 もしダウンロードしている間ずっとCPU時間を使っていたら大変だと思いまして。 例えばファイルパス名指しで直接アクセスした場合の負荷を1として、 CGIを使うと10くらいになるのかあるいは1.1くらいなのかの目安が知りたいのです。 bufsizeは1024です。「bufsizeをこう変えたら負荷が減る」というアドバイスなどもあれば助かります。 ECサイトCGI(ZenCart)は CPU負荷が特別高いのでしょうか。 ご教授お願い致します。 究極の負荷削減はクライアントPCで処理をたくさん行わせる手法である ttp://minkara.carview.co.jp/userid/108766/profile/ やたーダウソツールで画像に底引き網をかけてる奴を .htaccessに放り込むスクリプトができたよー(^o^)ノ すべてのアクセスを拒否れば負荷はほとんどなくなるアルよ。 次のものは負荷はかかるでしょうか? ・ランキングは使わないが登録人数が300人を超すCGIゲーム(50分おきに送信) ・FLASHやJAVAを表示するCGI(1個約2MB、合計12個を1つずつ表示) >>814 の者です。 >>814 の疑問が解決しそうです。 ∧_∧ ( ・∀・) | | ガガッ と ) | | Y /ノ .人 / ) .人 < >_∧∩ _/し' < >_∧∩`Д´)/ (_フ彡 V`Д´)/ / ←>>434 / ←>>277 主食の 魚沼産コシヒカリ A5のサーロイン 大間のマグロ 高級メロン の軽減税率をお願いしますねwww 転職時の注意事項。 下記の条件が全て当てはまる会社にご注意下さい。 ・IT系 in Tokyo ・転職会議で2.5点 ・転職会議の「その他>2ch情報」の欄で過去の労基2chスレが表示される 誰でも簡単にネットで稼げる方法など 参考までに、 ⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。 グーグル検索⇒『半藤のブブイウイウレレ』 TM7C0LN4KO プログラミングを誰でも習得できる方法は、「前場アキドルのプログラミングマスター方法」というブログで見られるらしいよ。ネットで調べると見られるらしいです。 AKH0N プハァー ~~-v( =´o`=) 。o 〇 ○ read.cgi ver 07.4.7 2024/03/31 Walang Kapalit ★ | Donguri System Team 5ちゃんねる