★負荷軽減対策委員会(Perl、PHP)★
■ このスレッドは過去ログ倉庫に格納されています
0001ジークハルト ◆VUxx/EwNXI
02/10/15 10:33ID:ifgLRUybならないのはサーバへの「負荷」。
負荷の高いCGIの使用は削除対象となるのが目に見えてます。
負荷を軽減させるにはどうすればいいか?
どういう書き方をすればいいか?
そんな委員会を開設しました。
0075nobodyさん
02/10/16 13:02ID:???0078nobodyさん
02/10/16 14:02ID:YPyufUJwhttp://www-105.ibm.com/developerworks/education.nsf/web-onlinecourse-bytitle/729C6A8BF14CE7F086256BF1006711EA?OpenDocument
0079nobodyさん
02/10/16 14:22ID:???−−−−−−−−−−このスレッドは終了しました−−−−−−−−
0080nobodyさん
02/10/16 14:23ID:???和塩含めて、負荷軽減はかなり追求してるから
0081nobodyさん
02/10/16 15:40ID:???0082nobodyさん
02/10/16 15:52ID:???mod_perlより、普通のcgiのほうがトータルのスケーラビリティは
上という場合もある。
いらないモジュールは全て削る。
モジュールはスタティックにコンパイルする。
あと、httpd.confの書き方も重要。
perlで言えば、超軽量のhttpd+speedyCGI
これが最もサーバーに負荷をかけない。
0084nobodyさん
02/10/16 16:49ID:???0085nobodyさん
02/10/16 18:00ID:8AIPTE76unset()されるのでしょうか。
たとえば、メソッド内でファイルを読み込んだ入りして、
場合によっては$hogeのサイズが100k超えたりするわけです。
それから、HTMLに書き出す内容をすべて変数に入れちゃって、あとでまとめて
echoする方法をとっていたりすると、結構その変数のサイズ大きくなりますよね。
ご教授お願いします。
0086nobodyさん
02/10/16 19:21ID:???んで、出力するのだけ、メモリに入れればオッケーと思います
0087デフォルトの名無しさん
02/10/16 21:33ID:???要するに、いろいろな要因の絡み合いだから、場合によってってところだね。
0)使用言語の選択
1)プログラム(スクリプト)の設計
1-1) メモリ領域
1-2) CPU時間
3)アクセス数
4)サーバのキャパシティ
5)他には?
これをうまく図で表せればいいですね。僕はまだ習ってません。
0088デフォルトの名無しさん
02/10/16 21:35ID:???だから、軽くなっても長くかかるのはどうかなぁと。
アクセス数が少ないサイトなら重くても速いのがいいんじゃぁと。
0089nobodyさん
02/10/16 22:25ID:???0090nobodyさん
02/10/16 22:33ID:vfA8qHJl私は今、チャットの負荷軽減を頑張っています。
使用しているのはKENT-WEBのYY-CHAT。
現在は分割処理で
ログ表示CGI
フォーム部分CGI
書き込みCGI
退室CGI
入室前CGI
に分割させ、いらない機能はすべて取り外しました。
さらにこれから
(1)そのスクリプトをC言語化
(2)新規発言のみを読み込むJavaプログラムを追加
させようと考えています。
0091nobodyさん
02/10/16 22:43ID:QZ0dtDWe$hoge = "<img src=\"$foobar\">\n";
と書くのと、
$hoge = "<img src=\"". $foobar ."\">\n";
と書く方法がありますが、
どちらがよいのでしょうか。
私は、エディタのハイライト機能で変数の色を変えていため、後者を使っています。
でもいっぱい変数を使う文字列だと、前者のほうが便利だね。
0093nobodyさん
02/10/16 23:21ID:YIcW4FL9単純に、後者の方が動作が速いとどこかで聞いた記憶があるので、
いつも後者にするようにしてます。
0095nobodyさん
02/10/16 23:44ID:wbW/xBZmどっちが速いかなんて、体感じゃわからないでしょ。
ちなみに俺は
$hoge = '<img src="'.$foobar.'">';
こんな感じで書いてる。改行はつけないよ。
改行をつける場合は
$hoge = '<img src="'.$foobar.'">'."\n";
こんな感じ。他と分離させる。一目でわかりやすいから。
0096nobodyさん
02/10/17 00:08ID:vMdIvLO81ぎょうづず読み込んでも大して長くはならないけど?
メモリがパッツンパッツンサバでも、メモリ空間を節約出来るから、結果的に早くなるんです
0098nobodyさん
02/10/17 00:21ID:UE/uqZMn漏れは掲示板のログファイルなんかは
1行づつ読み込んで、いるモノだけ配列に渡す。
インデックスのための小さなファイルなどは file()で一気に読み込む。
適宜使い分けている。
でも、上にもあるように、100KB位なら、一気に file() で読み込んでしまっても
いいのではないかと思ってしまう。
あとPHPで
while (!feof($fp)) {
$buffer = fgets($fp, 2048);
}
とかやってるんだけど、
fgetsせずに行をスキップするにはどうしたらいい?
0099nobodyさん
02/10/17 01:31ID:vMdIvLO8100KBで一気にですか、、、すごいですね。。。
負荷軽減対策委員会という意味ではなしかと。。。
>while (!feof($fp)) {
> $buffer = fgets($fp, 2048);
>}
>とかやってるんだけど、
>fgetsせずに行をスキップするにはどうしたらいい?
fgetcsvか、fseekしてfread。
0100nobodyさん
02/10/17 07:49ID:???0101ジークハルト ◆VUxx/EwNXI
02/10/17 09:04ID:???あいたたた・・・
じゃせめてこのスレの内容まとめて
負荷軽減対策委員会の公式サイトでも起ちあげますか・・
0102nobodyさん
02/10/17 12:39ID:CzH1ES8fサーバへの負荷はどうなると思いますか?
gzip処理をすることでサーバへ負荷がかかるとしたら
何kbを越えるくらいをめどにgzip処理を施すのが妥当でしょうかね?
例えば2kb程度を転送するくらいならgzip処理は必要ないでしょうか?
ご享受願います。
0104nobodyさん
02/10/17 14:09ID:CzH1ES8fすいません、意味が分かりません。
サーバの負荷を考えるとgzip圧縮処理は必要なのでしょうか?
0105nobodyさん
02/10/17 14:11ID:???2ちゃんねるのログ(300K)
↓
サーバで圧縮(100K)
↓
HTTPで転送(転送量1/3でウマー)
↓
ブラウザーで解凍、表示
0107nobodyさん
02/10/17 14:23ID:frKHjIQw>>>103
>すいません、意味が分かりません。
禿同。
サーバ負荷軽減だけでなく、帯域の負荷を減らすことで
単位時間内のリクエスト数を伸ばすことが出来るのでgzipが
有効な場合もある。
0108nobodyさん
02/10/17 14:32ID:???転送「量」でしょ、ご「教授」でしょ。
日本語大丈夫ですか?って書こうかと思ったがよ。
漏れは、そんなに更新が激しいデータじゃなきゃ、
1回のgzipで何人分かができて、転送のためにファ
イルアクセスされる時間が減るから、gzipした方が
いいと思って言ったんだけどね。解凍するのは、
ユーザだから知ったこっちゃないし(藁
0109nobodyさん
02/10/17 14:44ID:C3AsJ9gC(ある程度のシェアがあると言われているMacのIEでも対応していないのがある)
無圧縮のやつも作らなくてはいけないのが不便
これとは別に、PHPで、出力をダイナミックに圧縮、非圧縮とかえるには
どうしたらいい?
0110nobodyさん
02/10/17 14:54ID:???output_handler = ob_gzhandler
昔のバージョンだと駄目だが、4.2.xなら
Accept-Encoding: gzipの有無に依って
圧縮、非圧縮をダイナミックにおこなってる。
マニュアルみれ。
0111nobodyさん
02/10/17 14:55ID:lo6hZWi4gzip圧縮処理ってリアルタイムじゃないの?
(調べもせずにものを言ってみました)
0112nobodyさん
02/10/17 14:59ID:???リアルタイムはpopenとか使って出力をgzipにパイプしたときでしょ?
>>108が言っているのはgzip圧縮されたファイルのことじゃない?
0113112
02/10/17 15:01ID:???アップ後はtelnetから解凍。
0114nobodyさん
02/10/17 15:11ID:???無圧縮のものも作った場合、どうやって振り分けているの?
「文字化けするようなら〜から入ってくれ。」と入り口に書いておくの?
0117109
02/10/17 15:27ID:???ブラウザ(モジラ)で確認してみたら、
Content-Type が text/htmlのままなんですけど。
gz転送されているのかな?
0118nobodyさん
02/10/17 17:06ID:???0119102
02/10/17 17:22ID:PB+UxjCoご指導、ありがとうございました。
享受の方は素で間違えていました。
gzip圧縮処理の流れは>>105さんの
分かりやすい説明どおりに把握しているのですが
まだ詳しい内容は無知なので理解できませんでした。
調べてみようと思います。
チャットのように更新の頻度が多いものについては
gzip圧縮はしない方がいいということですね。
0120102
02/10/17 17:26ID:PB+UxjCoNPHスクリプト化はやらないよりやった方がいいと思います。
あと、チャットにおいて私は負荷を抑えられると思い、
jcode.plをrequireしていません。(文章おかしくてすいません)
これは不具合が出るものなのですかね?
0121nobodyさん
02/10/17 17:28ID:???0122102
02/10/17 17:29ID:PB+UxjComod_perlとか耳にしますがよく分からないのです。
共用サーバでも使用可能なのでしょうか?
0123102
02/10/17 17:30ID:???ここはブックマークしておくのでまた、参考にさせてもらいます。
0124nobodyさん
02/10/17 20:52ID:???0125K
02/10/17 20:55ID:???俺は転送量下げるために自作したよ。
更新の少ないものはキャッシュすれば良い。
でも、mod_gzipで良いんだよな……。
つーか、ob_gzhandler知らなかったYO(自爆
0126nobodyさん
02/10/17 21:22ID:???ob_start("ob_gzhandler");
これは、html出力をバッファしてgzip圧縮して送信するものだから、
鯖側は圧縮の分負荷が高く、ブラウザ側も徐々に表示されず一気に表示する(少し待たされる印象)
その代わり、転送量が減る・回線が細くても多少マシという利点がある。
ケースバイケースだが、負荷を減らそうというスレの趣旨には合わないんじゃないか?
#つか、1行追加するかしないかだけの話だがね。
0127nobodyさん
02/10/17 22:14ID:???表示は体感できるほど速くなったよ
リロードしても、ちらつきが無いと言うか、
圧縮無しだと、まばたきする感じなんだが、それが無くなった。
鯖負荷は、MRTGやTOPコマンドじゃ解らなかった。(多分ほとんど負荷無し)
チャットは計6部屋で共有鯖なら追い出される位の参加人数。
いちお、Perlでgzip対応ブラウザかどうか調べて、対応してたら圧縮してる。
でも、どっかのサイトに、「鯖に余裕があるならgzipをするべし」
みたいな事書いてたから、圧縮に多少負荷がかかるんだろーね
0128109
02/10/17 22:14ID:???マニュアルのコメントによると
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.
っていわれてるけど
0129109
02/10/17 22:15ID:???0131nobodyさん
02/10/17 22:21ID:???0134nobodyさん
02/10/17 23:24ID:???ブロードバンド特有のホスト名が付いてるトコってあるじゃん?
調べまくって自分でデータベースを作る。
すっごい時間と労力がいるけどね…
0135109
02/10/17 23:48ID:???最初にアクセスしたときに、リモホをとってPINGしたりして
疥癬の早さを調べる。それでgzするかしないかを決めて、
その結果をクッキーで食わせる。
0136126
02/10/17 23:58ID:???CGI側で判断するものではないだろう?
0137102
02/10/18 01:03ID:???ここのAbicorporationという掲示板と居酒屋チャットというチャット、
ソース見ただけで頭が痛くなるのは俺だけだろうか。
0139102
02/10/18 01:23ID:???負荷がすごそうっていいたいのですw
シェアウェアで爆弾売ってるようなものっすね。
ちなみに俺がCGIチャットで一番、負荷をかけないのは
「ぞのちゃっと」だと思うのですがどうでしょう?
0140nobodyさん
02/10/18 03:17ID:???俺のチャットが一番軽いと思う。
PHPだし、面倒だから配布はしてないけど。
でも、現在のメンバーを表示すると重くなるね。
FlashやJavaAppletの方が良いに決まってるからsage。
0141ジークハルト ◆VUxx/EwNXI
02/10/18 09:48ID:???負荷軽減につながりますかね?
0143nobodyさん
02/10/18 12:46ID:GnEXGk2/すごく興味があります。
ぞのちゃっとはC言語ですがphpはそれよりも軽いのでしょうか?
0144nobodyさん
02/10/18 13:57ID:LQtlqqOK設計によるけど、単純に負荷軽減つながるはず
0145144
02/10/18 13:59ID:LQtlqqOK0146nobodyさん
02/10/18 18:55ID:3gkhdVf3やっぱりフロート型って、負荷大きいですよね。
(書き込む人夜読む人の方があっと言う的に多いので、)
htmlファイルを生成したのだが、名前部分のクッキーが読み出せない
仕方なくJSで読んだのだが、文字化け。
PHPで食わせたクッキーはJSで読むとうまくいかないのか?
0148146
02/10/18 19:52ID:3gkhdVf3サンクス。MBCS関連充実してきたので、UTF-8で試してみます。
しかしまあ、urlencode-decode間でしてくれるうえにグローバル変数に自動的に入る
PHPに比べて、JSはめんどくさいですね。
0149nobodyさん
02/10/18 21:31ID:???0150nobodyさん
02/10/19 00:01ID:???ま、146は単語もまともに打てないほどの面倒くさがり屋さんと言う事で。
0151デフォルトの名無しさん
02/10/19 01:35ID:???いいじゃん、「あっと言う的」、2典に登録しようよ。
0152nobodyさん
02/10/19 02:17ID:???0153126
02/10/19 18:09ID:???0154102
02/10/19 23:31ID:???0155\
02/10/20 10:09ID:ASG3cWoM消さないと負荷って凄いですか?
0156nobodyさん
02/10/20 10:37ID:???0157nobodyさん
02/10/20 10:38ID:???あなたの「凄い」がどの程度なのかわからないけど、
その掲示板のコードにもよるんじゃない?
掲示板のログで500kbだと3000行近くなってるんじゃない?
読み込んだり書き込んだりするのに、3000回ループする様なコードを書いてるんだったら、
考えモンだね…
ファイル丸ごと読み込んでるんだったらメモリも食うし
0158レンタル掲示板”管理”者
02/10/20 11:59ID:???キミ最高だね。ほんとアホ以外の何物でもない。しねよ。
0159102
02/10/20 12:08ID:q/B8ESF1例えば500kb(300行)のログファイルがあって
open(IN,"ろぐふぁいるぱす");
@lines=<IN>;
close(IN);
というように配列に内容を入れた場合
ファイル丸ごと読み込んでることになるのでしょうか?
0161デフォルトの名無しさん
02/10/20 12:24ID:/npcfUW0Perl初心者コーナーで一行ずつ読み込んで処理するのと
どっちが早いか議論してたさ。readで読み込むのも比較
してたで。2・3日前だっけな。
0162nobodyさん
02/10/20 13:32ID:???Perlを開発している人たちなら分かるだろうけど。
0163nobodyさん
02/10/20 13:41ID:???>以前に使っていた領域が開放されているかどうか
以前に使っていた領域って、変数のことだろ? 1行ずつ代入しては処理を
繰り返してるから変数に代入されてる分は領域だろ? 開放もなにもないだろ
0165164
02/10/20 13:47ID:???0168nobodyさん
02/10/20 15:09ID:???こういうことが言いたいのか?
http://www.mikeneko.ne.jp/~lab/perl/tuning/
0169nobodyさん
02/10/21 20:11ID:???0170nobodyさん
02/10/22 00:30ID:???0171nobodyさん
02/10/22 03:41ID:???0172nobodyさん
02/10/22 04:31ID:???0173カミ
02/10/22 13:51ID:haL4weU7さあ、何でも聞いてよ。
0174カミ
02/10/22 13:54ID:haL4weU7時間がなくなったので帰ります。
■ このスレッドは過去ログ倉庫に格納されています