• ベストアンサー

GDの画像変換でサーバーに負荷

phpで画像処理するのにGDを利用しています。 しかしアクセスが増えるとすぐにapacheの負荷が上がってしまいLoad Averageが一気に増えてしまいます。 主に携帯サイトで使っていますが、負荷を下げるにはどのような手段がありますか? 試しにAPCを入れてみたのですがいまいちでした。 よろしくお願い致します。

  • yes87
  • お礼率74% (29/39)
  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • yuuki0229
  • ベストアンサー率70% (33/47)
回答No.2

>キャッシュの設定はGDで行うのでしょうか、それともApache側でしょうか。 GDやApacheだけでは難しいかもしれません。 アプリケーションのコード側で対応できます。 以下はイメージです。 $params = array("x" => "x"); // 出力画像を決定できるパラメータ $cachePath = "..."; // $paramsを元に保存パスを一意に決定 if (!file_exists($cachePath)) { // キャッシュが無い時だけ実行して$cachePathに出力 outputImage($params, $cachePath); } // 保存済み画像を出力する readfile($cachePath); 上記とは別に定期的にキャッシュを削除する処理も必要になります。 HTTPリクエストに対して画像を直接返却してる構造なら、キャッシュ可能なリバースプロクシを上手く挟めばアプリ側の修正を入れずに対応もできそうです。 #PHPとは離れますが…

yes87
質問者

お礼

補足して頂きありがとうございます。 しかしちょっと私には難しすぎるかも・・・

その他の回答 (1)

  • yuuki0229
  • ベストアンサー率70% (33/47)
回答No.1

基本的な手法として出力のキャッシュがあります。 全く同じ画像を生成するケースが多いならこれでかなり改善すると思います。 まだ試してないので効果があるということではないですが、個人的には以下のことを試してみたいと思いました。 ・サムネイル作成のみとかならGDではない他のライブラリを使ってみる ・画像にTTFフォントで文字を書き込んでるなら、それを透過PNGに予め書いておいて重ねるだけで済むようにしておく ・携帯に不要なほど大きい画像を素材として読み込んでるなら、素材を事前に必要最低限に縮小してみる ・同様に事前にできる処理があるならやっておく ・Apacheのプロセス上ではなく、新規にPHPプロセスを立ち上げてそっちで処理してみる and/or Apache MPMの調整など

yes87
質問者

補足

色々なアドバイスありがとうございます。 一番気になるのが、基本的な手法としての出力キャッシュです。 可能であればサーバー上に画像のキャッシュを保持して、それ以降のアクセスはキャッシュを参照するようにしたいです。 キャッシュの設定はGDで行うのでしょうか、それともApache側でしょうか。 サーバーに関して浅学なので具体的な対処法を教えて頂けると助かります。

関連するQ&A

  • PHPでGD(画像処理)を使うには、どうしたら良いんでしょうか?

    すいません、現在私は、PHP4.3.10を利用しているんですが、 この環境でGD(画像処理)を使いたいんですが、GDを使うにはどうしたら良いんでしょうか?

    • ベストアンサー
    • PHP
  • サーバ負荷を考慮した処理

    apache2, PHP4.1, MySQL4でECサイトを構築しています。OSはLinux。 注文情報をMySQLのテーブルに格納した後、MySQL以外にも別にDBが存在しており、そちらにも同時にXML形式で渡して格納しています。 しかし負荷が上がると別DBへのアクセスがボトルネックになっているようで、ECサイト側のLoad Averageが高くなっているところまで判明しました。 MySQLと別DBは完全同期でなくてもかまわないので、できれば、ブラウザのアクセスとは切り離した形で、テーブル内の情報を別DBにポツポツアップしていきたいのですが、どのようなやり方が最適でしょうか。

  • phpのGDで画像の特定色だけを他の色に塗りつぶし

    一応環境です centos5.5 apache 2.2.3 php 5.3.3 phpのGDで画像の特定色だけを他の色に塗りつぶすことはできるでしょうか? 例えば、白(R:255 G:255 B:255)の部分だけをすべて他の色に変更する。といったことがしたいのですが、GDでは難しいでしょうか?

    • ベストアンサー
    • PHP
  • gdを用いた画像生成

    ・php4.3.11 ・gd2.0.33 上記の環境で作成しているのですが、画像の透過処理にて行き詰っていまして、imagecreatefromgifで読み込んだ 不透過gifの一部の色を透過色にしたいのですが、なにかよい方法はありますでしょうか。 ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • サーバー・サイジング・負荷分散について。

    曖昧な質問で申し訳ないんですが、、 webシステムのサイジングってどうやればよいんですかね? 推奨サーバ構成は・・・?とクライアントに聞かれて困っています。 広告配信システムで、 同時アクセス  300/秒 ←この数字が未知の世界なんです。 ほどは見込んでいます。 かなり重いです。サーバ運営に関しては素人なので、 困っています。最適なサーバ構成案ってどう作ればいいんでしょうか? バナー配信、アクセスカウントが特に重いので、そこだけ切り離して、 web/app(php)サーバ【バナー配信用】×n web/app(php)サーバ【ユーザ転送・統計処理用】 databaseサーバ の構成かな、、、とか思うんですが、いかがでしょうか? 広告配信鯖は特に強い鯖を用意する必要があると思うのですが、 どの程度のマシンが最適でしょうか? また、どのように見積もればよいでしょうか? また複数台に負荷分散した場合、その管理はどの程度 複雑なものになるのでしょうか? 一応テスト環境 (AMD Sempron2600 cpu 1.8G) にて、模擬プログラム(画像配信)をテストしたら、ロードアベレージ4ほどでした。 この手の問題は初めてですので、困っています。 是非是非、よろしくお願い致します。

  • サーバーの負荷テストをしたい

    自宅で、WEBサーバーとDBサーバーを立ち上げています。 サーバーには、PHPやPerlで書かれたWEBアプリが入っています。 最近、アクセスが増えて300人位のユーザーが一斉にアクセスすると、レスポンスが遅くなるようになりました。落ちたこともあります。 このサーバーはこのプログラムで、どの程度の負荷にまで耐えられるのか、また余裕をもって動かすならどの程度の増強(サーバーの追加など)をしたらいいのか、わからないので負荷テストをしてみたいと思いました。 負荷テストの経験は全くありません。 一通り、ネットや本屋も見たのですが、よくわかりませんでした。 また、OSは、Cent OS3、WEBサーバーはApache2.2、DBはMySQLおよびPostgreSQLを使っています。 サーバーの負荷テストの方法について、教えていただけないでしょうか? よく解説しているサイトなどでも助かります。

  • GDライブラリが使えない・・・

    当方fedora8にてApache2とphp4.4.9にてwebサーバーを構築しております。 Apacheはyumにてphpは4をインストールしたい加減からソースからコンパイルしてインストールしました。 configure時に下記のようにしてインストールしております。 './configure' '--prefix=/usr/local/php-4.4.9' '--enable-mbstring' '--with-apxs2=/usr/sbin/apxs' '--with-pgsql=/usr/local/pgsql' '--with-dg' '--with-zlib' '--with-jpeg-dir' phpinfo()を見ても上記のように設定されております。 しかし、phpinfoにgd関係の表示がされないのですがなぜでしょうか? phpのエラーログにはこうありました。 Warning: Unknown(): Unable to load dynamic library './php_gd2.dll' - ./php_gd2.dll: cannot open shared object file: No such file or directory in Unknown on line 0 php.iniのgd2のコメントアウトは消してあります。 必要なライブラリ関係はyumにてすべてインストール完了しております。 どなたか教えてください。 ではよろしくお願いいたします。

  • ★xamppでGDを使いたいです。

    ★xamppでGDを使いたいです。 (※ Windowsへのインストール) \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ まずはXAMPP[バージョン:PHP: 5.3.1]をインストールして、phpなどいろいろなものが一括インストールされる。 C:\xampp 内のxampp-controlでApacheを起動する。 インターネットエクスプローラでXAMPPが正しくインストールされていれば、 http://localhost/xampp/ のページが表示される。 ↓階層はこんな感じです。 C:\xampp\htdocs\index.html C:\xampp\htdocs\index.php C:\xampp\htdocs\xampp\???(PHPファイルやフォルダ C:\xampp\apache C:\xampp\php ・ ・ ・ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ C:\xampp\phpの場所にphp.ini(構成設定)があります。 ↓内容 (略) extension=php_bz2.dll ;extension=php_curl.dll ;extension=php_dba.dll ;extension=php_dblib.dll extension=php_mbstring.dll extension=php_exif.dll extension=php_fileinfo.dll extension=php_gd2.dll   //コメントは最初からありませんでした。 extension=php_gettext.dll ;extension=php_gmp.dll extension=php_imap.dll (略) php.ini の場所は↓の通りです。 Loaded Configuration File | C:\xampp\php\php.ini \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ http://tsuttayo.jpn.org/php/gd/ このサイトで、 GDが利用できるか確認 phpinfo()で「GD Support」が「enabled」になっているか確認してください。こうなっていればGDが利用できます。 とありますが、「GD Support」が見当たりません・・・ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 不備な点があると思うので「ここはどうなっていますか」などの回答もお願いします。

    • ベストアンサー
    • PHP
  • サーバー負荷テストはどのようにしていますか?

    サーバー負荷テストはどのようにしていますか? 始めまして。私は現在、WEBでの開発をしております。開発内容はモバゲー向けのソーシャルアプリとして提供する某会社のキャラクターが日本全国を自由に旅行できるGPS連動ゲームです。 現在テスト環境に実装はできていて、ニフティクラウドに負荷テスト用のサーバ(ロードバランサ(AP:mod_dosdetector,ipvsadm,keepalived,httpd)×1+APサーバ×2(Apache:httpd)+ロードバランサ(DB:ipvsadm,keepalived)×1+DBサーバ(マスタ:mysql)×1+DBサーバ(スレーブ:mysql)×2の7台構成です。 更新処理ではDB(マスタ)、参照処理はAPサーバからロードバランサ(DB)を介して、DB(ステーブ)を見ています。 この環境でサーバーの負荷テストをしたいと思っているのですが、まったくノウハウがありません。 サーバーの事についてあまり知識がなく、これからどのようにしたらできるのかまったくわからない状態です。 説明不足で申し訳ないですが、サーバー負荷テストの方法について、ご教授頂けないでしょうか? 何卒、宜しくお願い致します。

  • PHP4+GDでの画像の減色処理

    携帯で写真を見るときに自動的にリサイズして 表示するスクリプトを作成しています。 PHP+GDで画像の減色処理は可能でしょうか? 色数を32~64くらいまで減色する方法が解りません jpg書き出しの場合は比較的サイズが小さくなるので 問題はないのですがauの古い機種の場合にはpngを 書き出すようにしていますがファイルサイズが 大きくなってしまい表示しきれません。 よろしくお願いします

    • ベストアンサー
    • PHP