★負荷軽減対策委員会(Perl、PHP)★
■ このスレッドは過去ログ倉庫に格納されています
0001ジークハルト ◆VUxx/EwNXI
02/10/15 10:33ID:ifgLRUybならないのはサーバへの「負荷」。
負荷の高いCGIの使用は削除対象となるのが目に見えてます。
負荷を軽減させるにはどうすればいいか?
どういう書き方をすればいいか?
そんな委員会を開設しました。
0654nobodyさん
04/10/25 05:44:32ID:XKm5So8L0655nobodyさん
04/10/25 14:51:34ID:???0656nobodyさん
04/10/25 15:08:33ID:???0657nobodyさん
04/10/25 15:35:37ID:???0658nobodyさん
04/10/25 17:09:16ID:???NEWマーク表示できないくらいしか思い浮かばん
いらん機能だし
0659nobodyさん
04/10/25 17:26:29ID:7ozi48tg出来る。
0660nobodyさん
04/10/25 17:29:59ID:7ozi48tg0661nobodyさん
04/10/25 23:10:16ID:???ファイル数も結構増殖していくし。
それくらいかの。
0664nobodyさん
04/10/27 10:01:04ID:???operaやMozillaだと文字化け起こすぞ
0665nobodyさん
04/10/27 10:20:49ID:???実際そうだし2chもそうだからいいかな、と。
0666nobodyさん
04/10/27 10:40:24ID:GQQpVWEo拡張子無しで/bbsってなってるのが昔から不思議で。
googleなんかのuri表示で見ると、
http://xxx.teacup.com/yyyy/bbsだと、
www.tcup-.com/xxx/yyyy.htmlが本体らしいんだけど。
0667nobodyさん
04/10/27 11:17:53ID:???みんな妥協派ですか?
0668nobodyさん
04/10/27 11:57:31ID:???http://pc5.2ch.net/test/read.cgi/php/1095633323/
0670nobodyさん
04/10/27 16:51:51ID:pygimpYU( ´,_ゝ`)プッ
0671nobodyさん
04/10/27 22:34:47ID:???http://www.google.co.jp/search?sourceid=navclient-menuext&ie=UTF-8&q=%E6%8B%A1%E5%BC%B5%E5%AD%90%E3%81%AA%E3%81%97%E3%81%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%A7%E3%81%8D%E3%82%8B%E8%A8%AD%E5%AE%9A
0672nobodyさん
04/10/27 23:34:24ID:???投稿時ならともかく。
0673nobodyさん
04/10/27 23:38:06ID:???0674nobodyさん
04/10/27 23:48:20ID:???切替ならそれぞれリンクを用意するだけで済むのでは?
閲覧時のクッキーってストーキング用途しか思いつかない。
0677nobodyさん
04/10/28 06:29:55ID:???0678nobodyさん
04/10/28 07:03:35ID:aCWpvFRR動的にやればインタラクション的にも手軽になんでも出来るし。
0679nobodyさん
04/10/28 07:20:03ID:???0680nobodyさん
04/10/28 08:43:20ID:???HTMLにすんのとしないのとじゃけっこう差出るの?
0681nobodyさん
04/10/28 09:01:31ID:???一概に○○なら△△とはいえない。
まあ、統計的に、そのページが更新されるまでに10回以上アクセスされるとわかれば、
一般的にはhtml化した方がいいだろうな。
式にすれば
html化するコスト << html化しない場合のCGI起動コスト * not modify間での平均アクセス数
の場合は、html化のメリットが大きい
0682nobodyさん
04/10/28 14:03:48ID:???0684nobodyさん
04/10/28 15:05:59ID:???0685nobodyさん
04/10/28 16:23:56ID:???本当に負荷を下げたいならCGIなんか使わずサイト丸ごと圧縮しておくのが一番だろうし。
俺はCGIを作る側だけど実は↑これが一番好き。
0686nobodyさん
04/10/28 19:02:58ID:???まあ両面作戦だね。
0687nobodyさん
04/10/29 00:44:55ID:???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だの)
等の問題が発生してめんどくさい。クライアント依存の処理はやはり気持ち悪い。
0688nobodyさん
04/10/29 07:10:04ID:???これって数字高い方がいいってことなの?
ベンチマークに無知でスマソ
確かに文字化けるんだよな・・・
ユーザにHTMLとCGIモードを選ばせるようにしたらいいかも
0689nobodyさん
04/11/04 17:30:49ID:???0691nobodyさん
04/11/10 01:11:49ID:???んだよ、ほれ。
http://pc5.2ch.net/php/dat/1034645635.dat
サニタイジングもregist時にやってるな。
2chは書き込みも多いが、それ以上に読み込みが凄まじいからな。
0692nobodyさん
04/12/23 11:27:06ID:???0693nobodyさん
05/01/07 17:35:04ID:qgEKEyAAリンクトレードproやThe Roomのランキングリンクのようなエロサイトによくあるランキングを
PHPで作ってみました。ユーザーごとに情報を1行CSVに保存させて、それがカウントファイルも兼ねてます。
表示部分は静的です。
出来上がったところで、上司に負荷かかりそうだからDBにしてよと言われ、MySQLで作り直してみたところ、
現在ユニーク1万/日くらいのサイトであっというまにMySQL接続数多杉エラーが出ました。
サーバ管理者にMySQLの接続数多すぎと出ましたと言ったところ、
設定変えることもできるけど、トラフィック多いサイト目指すならPostgreSQLにしたほうが良いといわれました。
今とりあえず素直にPostgreをサイト見ながらソース書き直してますが、
一体どの方法がベストなんでしょうか。
ちなみにPHPは趣味レベル、DBの経験は今年からなのでソースに問題があるのかもしれません・・
0694halc
05/01/07 18:03:52ID:???postgresにすれば良いってわけじゃないような。
ユニーク1万/日ぐらいだと、squidでリバースプロクシを導入してみるとかは?
0696halc
05/01/07 18:22:54ID:???同時接続数を増やせないなら、1接続あたりの接続時間の短縮をやらんといけない訳で。
もうクエリを発行しないと分かった時点でコネクション切断とか、
そのレベルの最適化はやってるよね?
初心者らしいから言ってみると、WHERE句、LIMIT, OFFSETで取得数を限定して、
DBから取得したけど使わず捨てているデータを削りこむとかやってみそ。
0697693
05/01/07 18:56:00ID:???やってるつもりなんですが、、
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}");
これだけです。これで動いたんですが、やっぱり記述おかしかったりしますかね、、?
0698nobodyさん
05/01/07 19:50:01ID:???0699nobodyさん
05/01/07 21:06:14ID:???ランクカウント以外の部分(順位の表示とかカテゴリ参加数の表示とか)はどう処理してる?
もしリアルタイムでやってるなら、静的なHTMLで処理するとかcronで処理させるとかすると、
劇的にコネクト数は減るよ。
ユニーク1万にも耐えられないならDB使う意味ないし、Postgresにすりゃいいってもんでもないと思ふ。
やはり、設計段階からの見直しが必要かと。。
毎秒何回ぐらいqueryの発行あるか分かるなら書いてみて。
0700693
05/01/07 21:46:52ID:qgEKEyAA>>699
順位他の処理は、3600秒ごとに静的に書き出してテキストファイルをrequireしてます。
cronではなく、テキストファイルにタイムスタンプ書き出してアクセスごとにチェック、前の書き出しから+3600秒以上経っていたらランキング再書き出し、という感じです。
>ユニーク1万にも耐えられないならDB使う意味ないし、Postgresにすりゃいいってもんでもないと思ふ。
ですよね。。
毎秒何回query発行あるか、どこで見れば良いんでしょう。。
とりあえず今はサイト止まってしまうので旧テキストファイル版に戻してしまいました。
0701nobodyさん
05/01/07 22:16:37ID:???やはりそれぢゃったか
mysql_pconnect して DB に接続すると
mysql_close しても
スクリプトが実行を終了しても
それどころかクライアントがブラウザを閉じた後も
DB接続が切断されずに残り続けるんぢゃよ
つまり今の状態だと mysql_close が全く効いておらん
これは接続をプールして再接続の負荷を減らすためのGJな機能なんぢゃが
DB接続数上限が逼迫している状態では逆に足を引っ張ってしまう両刃の剣
素人にはお薦めできないとまでは言わないが、注意して使わんといかんのぢゃ
mysql の最大接続数を apache の MaxClients より大きく設定する、とかぢゃな
とりあえず mysql_pconnect を myqsl_connect に変更すれば
mysql_close で接続が切断されるようになるので
かなり状況が改善するんぢゃないかのう
0703693
05/01/08 01:09:47ID:???きっとそれっぽいですね。
大変勉強になります。ありがとうございました。とりあえずそれを試してみます。
0704halc
05/01/08 04:03:06ID:???なんてか、削り込み以前にDBMSの本をちゃんと読もうよ。。
header("location:{$homeurl}");
と、リダイレクト先URLしか要らないのに、
$tabledata = mysql_query("SELECT * FROM usr_table",$db);
ここで全テーブルデータをぶっこ抜いているのがそもそもの間違い。
ここは
$tabledata = mysql_query("SELECT * FROM usr_table WHERE usrid = \"$usrid\" ",$db);
と必要な行以外は抜いてこないように直すべき。
0705halc
05/01/08 04:13:11ID:???入門書から取ってきたんだと思うけど、このやり方、小さな個人サイトなら
またしも10万PV/日のサイトに使える方法じゃない。
という訳で入門書以外のDBMS専門書を読むことを勧める。
0706nobodyさん
05/01/18 10:29:13ID:???データーベースオープン
全データーを配列にコピー
データーベースクローズ
その後配列に対して処理色々なんてことをやってるスクリプトを見かけるが
全部読み込まなきゃいけない処理なら普通のファイルに保存したほうが軽くて速くないか?
0707nobodyさん
05/01/18 13:57:10ID:???早いかもしれないけど影響がでるほどの量だとすれば、
データの書き込み(更新)する必要がある場合dbでやる方が安全だと思う。
0709halc
05/01/20 23:11:44ID:???0710nobodyさん
05/01/29 14:37:47ID:8oiPQs40プレーンテキストからDBに移行するべきなのかという目安を考えるべきだと思う。
0711nobodyさん
05/01/29 15:49:02ID:???とりあえず思いつくのは
・アクセス頻度と平均処理時間から待ち行列を計算して「ヤバ」と判断したとき
・top の load average が 1 を超えたとき
・HDDのスワップ音が聞こえるとき
・体感的に「重い」と感じたとき
0712nobodyさん
05/01/30 01:18:32ID:???小規模でもデータはDBで管理した方が良いね。
0713nobodyさん
05/01/30 05:59:08ID:???0714nobodyさん
05/02/08 01:21:04ID:???0715nobodyさん
05/02/19 00:53:49ID:???0716nobodyさん
2005/05/06(金) 15:00:41ID:???こんな俺はきっと駄目なPGだ orz
0717nobodyさん
2005/05/06(金) 19:18:23ID:???http://wiki.43folders.com/index.php/Plain_text
どうでもいい;)
0718nobodyさん
2005/10/07(金) 14:59:04ID:???0719nobodyさん
2005/10/08(土) 16:41:55ID:???0720nobodyさん
2005/10/14(金) 03:04:33ID:???0721nobodyさん
2005/10/14(金) 18:19:58ID:???0722nobodyさん
2005/10/16(日) 01:53:02ID:???それはWebProgを走らせる「環境」の話だから。
ここは共有鯖で使うCGIの負荷を以下に下げるかの話するスレ(機能してないけど)
0723nobodyさん
2005/10/16(日) 12:07:20ID:???コメント行削ったら半分以下になった
0724nobodyさん
2005/10/17(月) 21:25:18ID:???CGIやPHPで大きなファイルなどのダウンロード速度の制限などを行えるのでしょうか。
検索してみても出てこなかったので
やはりサーバーの方で直接設定しないと出来ないものなのでしょうか。
0725nobodyさん
2005/10/17(月) 22:42:47ID:???0726nobodyさん
2005/10/17(月) 23:09:28ID:???スクリプトでファイルを読んで、pushするなら出来ないことも無い。
でも回線負荷は下がるかもしれんが、サーバの負荷軽減にはならんでしょ。
普通は>>725の通り。スクリプトでファイルを送り出すなんてしない(高負荷)。
0727nobodyさん
2005/10/17(月) 23:11:24ID:???0728nobodyさん
2005/10/17(月) 23:27:23ID:???やはりサーバー側で直接行う方がスマートで負荷低減になるのですね。
当方サーバー側をTelnet出来ない専用サーバーをレンタルしており
スクリプトでどうにかならないか考えておりました。
SQLite機能がついており、ファイル制限が出来るらしいのですが
DBもやめた方がよいとのことで、
ありがとうございました。
0733nobodyさん
2005/10/27(木) 22:33:36ID:???ちょっと覗かせてもらったらapacheのプロセスがひとつ毎に10MBほどもメモリーを消費しちゃってるんで、一瞬、え?っと思ったんですが
当方phpもpostgresもあんまり詳しくありませんのでもしかしたらこの構成だと普通の状況なのかな?とも思いまして質問させていただきました
phpはapache2.のモジュールとして組み込んで有ります。
それくらいふつうだろとか、直感的になんかあやしいとか、プログラムがタコだとそうなるとか、感想をお願いします
0735nobodyさん
2005/10/28(金) 00:30:42ID:???0736nobodyさん
2005/10/28(金) 00:31:21ID:???要約するとapacheのモジュールとして組み込まれたphpからpostgresqlを使ったらメモリーを10MBガメるのは普通ですか?
ってことだな
0737nobodyさん
2005/10/28(金) 00:32:58ID:???0740739
2005/10/28(金) 00:50:20ID:???>phpはapache2.のモジュールとして組み込んで有ります
のような状況の場合、普通。
(PHPのエクステンションを極力動的に組み込めば減るけど)
0741nobodyさん
2005/10/28(金) 02:09:42ID:???もしかしてCGIから動かしたほうがいい?
0743nobodyさん
2005/10/28(金) 11:45:46ID:???その代わりPHPを使うリクエストがくる度にロードすることになるから
今度はCPU負荷が高くなるよ。まあサイトの特性で考えれ。
共有サーバなんかはセキュリティを高めるにはCGIで動かすしかないしな。
(例えリクエストの度にロードされてレスポンスが悪くなるデメリットがあるとしても)
0746nobodyさん
2005/11/05(土) 02:38:22ID:???0747nobodyさん
2005/11/05(土) 08:52:03ID:mQF7x1FD間違ってたらスマソ
0748nobodyさん
2005/11/05(土) 09:39:48ID:???$a = $b ってしてもその瞬間にはコピーされない.
0749nobodyさん
2005/11/06(日) 12:33:12ID:???だから、PHPでは「パフォーマンス重視の参照渡し」は
ほとんど無意味ってことかな。
0750nobodyさん
2005/11/06(日) 12:35:31ID:???0751nobodyさん
2005/11/06(日) 12:37:26ID:v9ryuHmW■ このスレッドは過去ログ倉庫に格納されています