★負荷軽減対策委員会(Perl、PHP)★
サーバ上にPerlやPHPを置く場合、何よりも重視しなければ ならないのはサーバへの「負荷」。 負荷の高いCGIの使用は削除対象となるのが目に見えてます。 負荷を軽減させるにはどうすればいいか? どういう書き方をすればいいか? そんな委員会を開設しました。 >>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 画像使うんなら消しちゃダメでしょ。 read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる