X



★負荷軽減対策委員会(Perl、PHP)★

0001ジークハルト ◆VUxx/EwNXI
垢版 |
02/10/15 10:33ID:ifgLRUyb
サーバ上にPerlやPHPを置く場合、何よりも重視しなければ
ならないのはサーバへの「負荷」。
負荷の高いCGIの使用は削除対象となるのが目に見えてます。
負荷を軽減させるにはどうすればいいか?
どういう書き方をすればいいか?
そんな委員会を開設しました。
0415
垢版 |
03/07/04 19:40ID:???
>ちゃんと実験したサイト行って、見て来い。

ああいう非現実的な試行環境に統一して対照されても参考にできないよね、、
まだmsがやったベンチ結果のほうがdqnぽくない
PHP5のケース別ベンチやってくれんかな
個人では実験環境が作れないしzendの情報だけでは激しく不安だし、、

話は変わって、itboostのtips「効率的な処理」に、phpのループ構造は遅いから、
コールバック関数を繰り返し呼び出すとphpではなくcレベルでループが走ってくれるて
いいよってネタがあるけど、これはどうなん?
(あれはcountを一度にすれば大差ないような気もしつつ、、。
個人で実行速度を計測するといえば、ループ処理のことだと言ってもいいかと
おもうんだけど、これってphp特有の問題?
0416411
垢版 |
03/07/06 09:05ID:???
>>412
ハンドラ好きにさせるのはもってのほかなので
Apache::RegistryかApache::PerlRunを提供するしかないと
おもうのですが、前述の問題があり、自分の知識内では
不可能と判断しています。
(他に良い方法がないか探してるのですが...)

>>414
FastCGIも、共有サーバだとデーモンプロセス上がりまくりで
現実的では無いような気がしますが^^;

0417nobodyさん
垢版 |
03/07/06 09:07ID:???
>>ちゃんと実験したサイト行って、見て来い。
>ああいう非現実的な試行環境に統一して対照されても参考にできないよね、、
どこのサイトを見てるんですか?

0420
垢版 |
03/07/06 23:45ID:???
>417
そのへんはコミュニケーションギャップを楽しむところだと思ったり。
0422山崎 渉
垢版 |
03/07/15 11:10ID:???

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0425nobodyさん
垢版 |
03/07/26 17:01ID:???
ageんでも保守はできるでしょ

?>
<html><head><title><?=$title=></title></head>
<?php



echo << end
<html><head><title>$title</title></head>
end;

はどっちが軽いんだろうね・・・
0426nobodyさん
垢版 |
03/07/26 17:02ID:???
あぁ、 < がひとつ足りないし・・・
0427nobodyさん
垢版 |
03/07/27 01:37ID:???
このスレいつも大変参考にさせていただいています。
0429nobodyさん
垢版 |
03/07/27 10:38ID:???
>>428
私もそんな気がして、なるべく上の方使うようにしてる
でも変数が多いところとかは下のやつ使ってる
0430nobodyさん
垢版 |
03/07/28 05:31ID:???
PHPに、テキスト中に変数があるかどうか判断させる後者よりも、
明示的にする前者がやっぱ速いかな?特に変数が多いほど。

でも、PHPモードに入ったり抜けたりする負荷(と言えるかな?)を考えると前者のような気もする…
0431nobodyさん
垢版 |
03/07/28 11:41ID:???
echo '
<html><head><title>'.$title.'</title></head>
';

これでいいべ
0432nobodyさん
垢版 |
03/07/28 16:40ID:???
>>431
長い場合、echoを大量に書くわけにもいかんでしょ
HTMLのフッタ部分は定型に近いから?><?phpを使ってるんだけど
さほど変わらないのかなぁ・・・
0434山崎 渉
垢版 |
03/08/02 02:24ID:???
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
0435ぼるじょあ ◆ySd1dMH5Gk
垢版 |
03/08/02 04:52ID:???
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
0436nobodyさん
垢版 |
03/08/08 18:33ID:???
mod_perlで動かすと、速いときはバカみたいに速いが、
遅いときはイライラするぐらい遅い。

普通こんなにバラツキがあるものなのですか?
0438nobodyさん
垢版 |
03/08/15 12:34ID:???
>>436
新しいhttpdの子プロセス上がった時とかキャッシュがないからでは?
重そうなモジュールは起動時に読み込むようにするとかして
コンパイル時間短くしたら?

0439nobodyさん
垢版 |
03/08/20 12:11ID:???
speedyCGIで負荷が高くなると、InternalServerErrorが出るのですけど、
私の書き方が間違っているだけなんですかね?
0440nobodyさん
垢版 |
03/08/20 12:21ID:???
>438
mod_perl1.2使ってたとき、モジュールのキャッシュ無視して、別空間にロードされる場合も。
最近のバージョンで改善されているかどうかは不明ですが。
0441nobodyさん
垢版 |
03/08/20 14:50ID:???
>>440
モジュールの更新日が変わってるとか%INC消してるとかでなく?
どうやってその現象確認しました?
0442440
垢版 |
03/08/21 18:44ID:???
>>441
初回にロードした時間を記録するクラス作って、何度かリロードして確かめた記憶が。
他にも、子プロセス関係で何かしたと思ったけど、忘れた。
%INC消さなくても、ロードされる時はされてましたよ。
ライブラリモジュールに限らず、同一ファイル、同一パッケージ名の空間も
複数のキャッシュが存在してしまうこともしばしば。
それ知って以来、mod_perlは一切使ってませんが。

で、最近のバージョンはどうなんでしょう?
0443nobodyさん
垢版 |
03/08/22 04:06ID:???
>>442
webDBで、mod_perlを導入したが、遅い。
まだSpeedyCGIの方がパフォーマンスが良い。

ただ、>>439 の言う通り負荷が高くなると不安定なんだよなぁ。
なんか回避方があったら、教えて欲しいよ。
0444nobodyさん
垢版 |
03/08/22 13:11ID:???
>>443
私もWebとPostgresqlで組んでいるのですが、
mod_perlだと、速度のバラツキが尋常でなくて採用を辞めましたよ。
SpeedyCGIが安定さえしてくれれば、何も心配ないのですけどね。
0445nobodyさん
垢版 |
03/08/22 15:05ID:qLHm82v9
PHP使えよ。。
0446nobodyさん
垢版 |
03/08/22 16:34ID:???
>>444
DBI.pm使ってるからじゃないの?
それはmod_perlのせいじゃないような気が。
0449nobodyさん
垢版 |
03/08/22 23:56ID:???
>>447
>>446じゃないが、DBIは遅い気がする。

あとDBIじゃなかったかな?サーバー名にIPアドレスじゃなくて
FQDN指定するとident投げるのって。
identが繋がらないとタイムアウトするまで固まるんだよな。
0450nobodyさん
垢版 |
03/08/23 00:30ID:???
そういえば、PostgreSQLの日本語サイト見てたら、以外にも
Perl/CGIで利用しているところが多いのにビビりました。
DBMS使う以上、何らかの効率性を望んでいるのだと思うけど、何故Perl/CGIなんだと問いつめたいよ。
0451nobodyさん
垢版 |
03/08/23 00:44ID:12CD5sBt
>>450
逆に、Perl/CGIだと何がだめなのか説明してみてください。
0453nobodyさん
垢版 |
03/08/23 09:33ID:???
>>450
漏れはMysq;でPerl/CGIしてるけど、移植元がperlだったから単純に鯖の負荷軽減が目的だったりしたが・・・
それに、Phpだと複雑なソース書ききれんかったろうってのもあるわけだが、お前さんはなにでやれと?
0455nobodyさん
垢版 |
03/08/23 16:29ID:IynKNpCX
perlなんだが。
ある位置から数行くらい読み込む時、
10kbくらいのファイルと、300kbくらい(要するにでかい)ファイルでは
負荷に違いってあります?

open IN, ...;
for($i=0; $i<10; $i++){
$line = <IN>;
...処理
}
close IN;

みたいなプログラムでつ。
0456nobodyさん
垢版 |
03/08/23 16:46ID:???
>>455
どうやって「ある位置」までファイルポインタを移動させるかに依る。
行単位で空読みさせて移動するよりは seek 一発の方が速い。
その例だとファイルの先頭からだから変わらん。
0457nobodyさん
垢版 |
03/08/23 19:02ID:V3x8NgSH
>>453
Perlで書けてPHPで書けない「複雑ソース」って何?
0459nobodyさん
垢版 |
03/08/23 19:20ID:???
>>457
最近あまり追ってないんだが、
PHPってtermiosによる端末制御できたっけ?
fork()は出来るけどpipe()は出来たっけ?

あと、PHPはスコープが滅茶苦茶だから(まぁPerlも変だけど)
あまり大きいソースを多人数で書くのには向いてないと思う。
0460455
垢版 |
03/08/24 10:10ID:XoFfp7Kp
>>456 サンクス
1行の文字数が不定なんでseekで飛ぶことが難しいんす。
2chログのように301-400だけ表示みたいな場合は
やっぱ空読みしてるんかな。
0462455
垢版 |
03/08/25 11:33ID:???
でもどうやってx行目を見つけ出すの?
適当にread系のcgiを漁ってみたけど、やっぱ空読みしてるみたいだわ。
0463nobodyさん
垢版 |
03/08/25 12:48ID:???
>>462
1000行程度なら空読みでいいと思う。
万単位になったら、インデックスと作るとか対策考えろ。
0464nobodyさん
垢版 |
03/08/25 13:26ID:???
>>462
1、行ごとのファイルポインタを記録してある。
2、一定件数ごとに、ファイルポインタを記録してある。
3、2chは入力値の長さが決まっているから、固定長フォーマットにしてある。

これだけのアクセス数があるところで、空読みは考えにくいな。
板のトップで、数千行単位で空読みされるのですか?
0465nobodyさん
垢版 |
03/08/25 14:55ID:JfnblB1o
>>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より呼び出される回数は圧倒的に少なく
それほど問題にならない気が。
0467nobodyさん
垢版 |
03/08/27 01:27ID:???
useって宣言した場所によって読み込まれる時期が違うの?
それならJcodeなんかは先頭でuseせずに
送られてきたデータのチェック済ませてから読み込ませた方が良いのかな。
#チェックにJcode使うなら別だけど
0470nobodyさん
垢版 |
03/09/05 00:46ID:???
SpeedyCGIでどうやったら、負荷が高いときのエラーが無くなるんだろう。
もう訳がわからん。
0472nobodyさん
垢版 |
03/09/06 18:14ID:???
>>471
負荷を軽減させるために、>>470がspeedyCGIを入れたんだろ。
ここは、負荷軽減の為のスレだよ。
0474nobodyさん
垢版 |
03/09/17 21:25ID:Rf3lCYFV
PHPの掲示板なんですができるだけ負荷がかからないログの読み込み方法ってどんなのがありますか?
今は書き込みや読み込みの時にfile()で全部取得しているんですがログが増えると負荷が大きくなりそうな気がするので。
0476nobodyさん
垢版 |
03/09/17 22:15ID:Rf3lCYFV
DB使う以外にうまいやり方無いですか?
0477nobodyさん
垢版 |
03/09/17 22:24ID:???
>476
ないですね!
逆に、なんでDB使うのいやなんですか?!
0479nobodyさん
垢版 |
03/09/17 22:55ID:???
>478
474が悩み事の矛盾に気がつかないからだよ!
0480nobodyさん
垢版 |
03/09/17 22:59ID:???
>>477
2ちゃん程度の規模でもDBなぞ使ってないんだが。
ていうか、逆に2ちゃんをDBで書き直したらえらい事になると思うが・・・。

普通のBBSって書き込みはFIFOだし、読み出しはシリアルだから
逆にDB使うほうが負荷が大きくなる。
0481474
垢版 |
03/09/18 00:06ID:???
DB使うのが嫌っていうか使ったことないので
DB使わずにfile()以外のやり方ないかと思ったんですが
0482
垢版 |
03/09/18 00:52ID:???
>481
スレ読めよ。
0485483
垢版 |
03/09/18 07:46ID:???
「スレ読めよ」か。「スレタイ読めよ」と勘違いした。
0486nobodyさん
垢版 |
03/09/18 09:35ID:???
>474

データ構造を固定長にしてバイナリファイルに格納しておき
fseek fread fwrite などを使えば部分処理が出来るから負荷は
減ると思うよ
0487nobodyさん
垢版 |
03/09/18 15:34ID:???
SpeedyCGIでエラーが頻発したので、PerlからCに移植した。
えらく辛かったが、めちゃくちゃ速くなった。
0488nobodyさん
垢版 |
03/09/24 13:10ID:???
apacheの軽量化が威力あると言うが、
具体的にどういったモジュールを消せば良いのだろう。
0490nobodyさん
垢版 |
03/09/24 13:56ID:???
>488

とりあえずスレ違いと思われ

スクリプト上で解決可能な話題が主題かと思う
0493nobodyさん
垢版 |
03/09/25 07:19ID:???
人よりちょっと知識の多い香具師が少ない香具師を馬鹿にするスレはここですね。
0494nobodyさん
垢版 |
03/09/25 10:11ID:???
>>490
apacheもスクリプトも両方チューニングして、
「負荷軽減対策委員会」と呼べるような気がするのだが…
0495nobodyさん
垢版 |
03/09/25 10:39ID:???
>>1を見る限りそうとは思えないけどな
方針変更という事で・・・
0496nobodyさん
垢版 |
03/09/25 16:05ID:???
Apacheのチューニングはスクリプトの有無や出来とは関係なく
できることだし、別問題じゃないか?
0498nobodyさん
垢版 |
03/09/25 18:44ID:???
ループは負荷が増えるので禁止
0499nobodyさん
垢版 |
03/09/26 05:39ID:???
足りない?
mod_mime_magic,mod_dir,mod_auth,mod_access,mod_cgi,mod_log_config,(mod_env)
(mod_perl)
0500500
垢版 |
03/09/26 12:46ID:???
500
0502nobodyさん
垢版 |
03/09/29 13:04ID:???
>>501
速度重視ならDSOを使わな方が良いという話で良い?
0503とおりすがり
垢版 |
03/09/29 17:18ID:???
>>502
そういうこったな(w

>>501
「あぱちのmoduleとして動作させると」とか
書いとけばつっこまれなかったのにな
0504nobodyさん
垢版 |
03/09/30 17:47ID:???
素直に専用鯖借りてmod_perlとgzip圧縮でも使いなさい。
0509nobodyさん
垢版 |
03/10/18 19:58ID:???
変数より定数使ったほうがやっぱ軽いのかなぁ・・・

あとは定数と直接数値を書き込むのはどっちが軽いのだろうか
0510nobodyさん
垢版 |
03/10/19 00:18ID:???
>>509
ぐだぐだいう前にベンチしろ、このヴォケが
0511nobodyさん
垢版 |
03/10/29 01:38ID:???
ね、みんなローカルでPerlをテストする時、何のソフト使ってるの?
0512nobodyさん
垢版 |
03/10/29 01:46ID:???
何のソフトとは?エディタ?ブラウザ?
0513nobodyさん
垢版 |
03/10/29 01:48ID:???
私はペギーパッド使ってます
0514nobodyさん
垢版 |
03/10/29 01:55ID:???
Winで簡単なPerlだったらプロンプトで十分だけど。
Perlを始めよう、ならエディタから直接プロンプト起動できるし良い。
俺はtxt,HTML,Perl,PHP,SQL,C,Java,XMLなど全部ひとつのエディタで
やりたいからEmEditor3を使ってる。
レスを投稿する