★負荷軽減対策委員会(Perl、PHP)★
■ このスレッドは過去ログ倉庫に格納されています
0001ジークハルト ◆VUxx/EwNXI
02/10/15 10:33ID:ifgLRUybならないのはサーバへの「負荷」。
負荷の高いCGIの使用は削除対象となるのが目に見えてます。
負荷を軽減させるにはどうすればいいか?
どういう書き方をすればいいか?
そんな委員会を開設しました。
0623nobodyさん
04/03/17 17:24ID:???試しにnph ソースを作って、Content-Length を送信するようにしたら、
チャンクコーディングされなかったけど、接続が毎回切れるみたい。
どっちが良いのか微妙っぽい。
0624nobodyさん
04/04/20 20:30ID:yfis5kmt0625nobodyさん
04/05/16 04:46ID:2fTgoYEJB.. $aa=~/x/?($pa=1,$pb=1):($pa=0,$pb=0);
等価らしいです
ソースは、ttp://ww4.tech.nu/?d=653
たしかにコードは短くできるので試したところ
レスポンスが悪く、重くなった気がします
0626nobodyさん
04/05/16 04:54ID:???http://perldoc.com/perl5.8.4/lib/Benchmark.html
0629nobodyさん
04/05/20 12:34ID:NShBOzWM�@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)マークのユダヤ教にでも、入信せよ!
0630nobodyさん
04/05/20 13:06ID:9F0Z79In0631nobodyさん
04/05/20 14:55ID:???データ構造とアルゴリズムを見直せ
次にCPUをグレードアップしろ
それでもダメならCか汗ブラで
0632nobodyさん
04/05/20 15:38ID:???0633nobodyさん
04/05/20 16:08ID:???Personal Home Page の略?
0634nobodyさん
04/05/20 16:11ID:cgjPprlD0635nobodyさん
04/06/24 13:00ID:???0636nobodyさん
04/07/18 20:12ID:Sl8hc8ID0637nobodyさん
04/08/11 03:33ID:2sgdWAV8データベースに入れてしまうのってよろしくないの?
最後の方を読む時とかに早いと思うんだけど。
0638nobodyさん
04/09/07 11:18ID:???0639nobodyさん
04/10/04 17:10:56ID:???0640nobodyさん
04/10/12 03:56:07ID:???index.htmlとsubback.htmlの更新・ソートを省略できて負荷軽減に繋がらない?
と思ったけどレス数表示のために更新しなきゃならないか…。
もう少し工夫すればなんとかなる気がする。
0641nobodyさん
04/10/17 09:28:30ID:???0642nobodyさん
04/10/17 10:04:16ID:???マジレスするとそんな低レベルの操作をしたら
処理中は他の処理が出来なくなるだろうが
0643nobodyさん
04/10/20 23:44:33ID:gn/p6wba0644nobodyさん
04/10/21 19:27:52ID:vF6/MaNcスクリプトをあれこれこねくり回す前に試してみれ。
0645nobodyさん
04/10/21 19:55:41ID:???誰に対してのレス?
0646nobodyさん
04/10/22 21:15:01ID:???0647nobodyさん
04/10/23 23:24:38ID:???0650nobodyさん
04/10/24 14:11:54ID:???0651nobodyさん
04/10/24 18:28:23ID:???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の負荷を以下に下げるかの話するスレ(機能してないけど)
■ このスレッドは過去ログ倉庫に格納されています