「パフォーマンス」の版間の差分

提供:MoodleDocs
移動先:案内検索
(Done.)
 
(2人の利用者による、間の86版が非表示)
1行目: 1行目:
作成中です - [[利用者:Mitsuhiro Yoshida|Mitsuhiro Yoshida]] 2007年4月14日 (土) 22:15 (CDT)
少人数のユーザ、数千名のユーザでも、Moodle は快適に動作させることができます。パフォーマンスに関係する要素は、基本的に他の PHP ベースのデータベース主導型システムと同じです。 あなたのサーバを最適化するには「ユーザ数の多寡が大きな要素となること」に焦点を置いてください。例えば、相対的にみて、データベースにアクセスするユーザよりも閲覧するユーザが多い場合、ウェブサーバのパフォーマンスを改善してください。
 
Moodleは、少ないユーザでも数千名のユーザでも快適に稼動させることができます。パフォーマンスに関係する要素は、基本的にどのPHPベースのデータベース主導型システムとも同じです。 あなたのサーバを最適化するには、「ユーザに関して多くの差がある点」に焦点を置いてください。例えば、相対的にみて、データベースにアクセスするユーザよりも閲覧するユーザが多い場合、ウェブサーバのパフォーマンスの改善を試みてください。


==ベンチマークのベースラインを取得する==
==ベンチマークのベースラインを取得する==


最適化を試みる前に、あなたが改善しようと考えるシステムコンポーネントに関するベンチマークのベースラインを取得してください。Linuxの場合、[http://lbs.sourceforge.net/ LBS]をお試しください。Windowsの場合、パフォーマンスモニターを使用してください。システムに関する現在のパフォーマンスの数値データを取得することにより、あなたの変更がどれだけ実際のインパクトを与えたのか測定することができるようになります。
最適化を試みる前に、あなたが改善しようと考えるシステムコンポーネントに関するベンチマークのベースラインを取得してください。Linux の場合、[http://lbs.sourceforge.net/ LBS] をお試しください。Windows の場合、パフォーマンスモニターを使用してください。システムに関する現在のパフォーマンスの数値データを取得することにより、あなたの設定変更がどれだけ実際のインパクトを与えたのか測定することができるようになります。


パフォーマンスを改善するための全体的な照準は、RAM (キャッシング) の使用およびディスクベースの活動の軽減です。スワップファイルの使用を可能な限り削減することは特に重要です。あなたのシステムがスワッピングを開始した場合、さらにRAMを追加すべきだというサインです。
パフォーマンスを改善するための全体的な照準は、RAM (キャッシング) の使用量およびディスクベースの活動の軽減です。特にスワップファイルの使用を可能な限り減らすことは重要です。あなたのシステムがスワッピングを開始した場合、さらに RAM を追加すべきです。


一般的に「最適化の優先順位」は、第1に記憶装置 (RAM)、第2に記憶装置 (速いハードディスク/ハードディスク設定の改善)、プロセッサ (個数および速度) です。
一般的に「最適化の優先順位」は、第1に「記憶装置 (RAM)」、第2に「記憶装置 (速いハードディスク/ハードディスク設定の改善)」、第3に「プロセッサ (個数および速度)」です。


==スケーラビリティ (拡張性)==
==スケーラビリティ (拡張性)==


(明確なアプリケーション層の分離により、Moodleは強力に拡張可能な設定を行うことができます (詳細は[[Moodleの大規模インストール]]をご覧ください)。
アプリケーション層を明確に分離することにより、強力に拡張可能な設定を Moodle に施すことができます (詳細は [[Moodleの大規模インストール]]をご覧ください)。


通常、小規模サイトでは必要ありませんが、大規模サイトではウェブおよびデータベースを分離したサーバに設置します。
通常、小規模サイトでは必要ありませんが、大規模サイトではウェブおよびデータベースを分離したサーバに設置してください。


例えば1つ以上のサーバを使用することで、Moodleをロードバランスすることは可能です。分離されたウェブサーバでは、同じデータベースに問い合わせを行い、同じファイルエリアを参照します。そうでなければ、このようなクラスタリングを適用するには、アプリケーション層の分離だけで十分です。同様に、データベースをクラスタ化することもできます (例 MySQLクラスタ)。しかし、これは簡単な仕事ではなく、エキスパートのサポートが必要です。
例えば1つ以上のサーバを使用することで、Moodle をロードバランスすることは可能です。分離されたウェブサーバでは、同じデータベースに問い合わせを行い、同じファイルエリアを参照します。そうでなければ、このようなクラスタリングを適用するには、アプリケーション層の分離だけで十分です。同様に、データベースをクラスタ化することもできます (例 MySQL クラスタ)。しかし、これは簡単な仕事ではなく、エキスパートのサポートが必要です。


==ハードウェア設定==
==ハードウェア設定==
'''メモ''': あなたがパフォーマンスを改善できる簡単で効果的な変更は、サーバのメモリを可能な限り多く増やすことです (例 4GB)。メモリを増やすことで、ディスクへのスワップを減らし、さらに多くのユーザを処理することができるようになります。
'''メモ''': あなたがパフォーマンスを改善できる、簡単かつ効果的な変更は、サーバのメモリを可能な限り増やすことです (例 4GB)。メモリを増やすことで、ディスクへのスワップを減らし、さらに多くのユーザを処理することができるようになります。
* 最良の「プロセッサ性能」 (例 デュアルまたはデュアルコア) を適用することで、さらなるパフォーマンスの向上を図ることができます。最新のBIOSでは、ハイパースレッディングを有効にすることができます。しかし、これが全体的なプロセッサのパフォーマンスに違いをもたらすかどうか、[http://en.wikipedia.org/wiki/Super_PI CPUベンチマークツール]を使用して確認してください。
* 最良の「プロセッサ性能」 (例 デュアルまたはデュアルコア) を適用することで、さらなるパフォーマンスの向上を図ることができます。最新の BIOS では、ハイパースレッディングを有効にすることができます。しかし、これが全体的なプロセッサのパフォーマンスに違いをもたらすかどうか、[http://en.wikipedia.org/wiki/Super_PI CPUベンチマークツール]を使用して確認してください。
* 可能でしたら、「SATAドライブ」の代わりに「SCSIハードディスク」を購入してください。SCSIドライブが独自の統合プロセッサを持ち、複数ドライブがある場合は、それぞれに統合プロセッサを持つのに対して、SATAドライブはシステムCPUの利用を増大させます。あなたがSATAドライブを使用する必要がある場合、マザーボードおよびドライブがNCQ (Native Command Queuing) をサポートするかどうかチェックしてください。
* 可能でしたら、「SATA ドライブ」の代わりに「SCSI ハードディスク」を購入してください。SCSI ドライブが独自の統合プロセッサを持ち、複数ドライブがある場合、それぞれに統合プロセッサを持つのに対し、SATA ドライブはシステム CPU の利用を増大させます。あなたが SATA ドライブを使用する必要がある場合、マザーボードおよびドライブが NCQ (Native Command Queuing) をサポートするかどうかチェックしてください。
* 「シークタイムの短い」ハードディスクを購入してください。これは全体的なスピード (特にMoodleのレポートにアクセスする時) を改善します。
* 「シークタイムの短い」ハードディスクを購入してください。これは全体的なスピード (特に Moodle のレポートにアクセスする時) を改善します。
* 「スワップファイル」を正しく設定してください。一般的には、物理メモリーの4倍の設定値をお勧めします。
* 「スワップファイル」を正しく設定してください。一般的には、物理メモリーの4倍の設定値をお勧めします (この設定値には賛否両論あります - [[利用者:Mitsuhiro Yoshida|吉田光宏]])。
* 「RAIDディスクシステム」を使用してください。多くの異なるRAID設定を行うことができますが、下記の設定は一般的に最も良く動作します:
* 「RAID ディスクシステム」を使用してください。サーバコンピュータに対して、多くの異なる RAID 設定を行うことができますが、下記の設定は一般的に最も良く動作します:
** 可能であればハードウェアRAIDコントローラーをインストールしてください。
** 可能であればハードウェア RAID コントローラーをインストールしてください (ソフトウェア RAID、ハードウェア RAID に関する意見も多々あります - [[利用者:Mitsuhiro Yoshida|吉田光宏]])。
** RAID-1に設定して、オペレーティングシステムとスワップを同じドライブに設定してください。
** RAID-1 に設定して、オペレーティングシステムとスワップを同じドライブに設定してください。
** Moodle、ウェブサーバおよびデータベースをRAID-5に設定した別々のディスクに入れてください。
** Moodle、ウェブサーバおよびデータベースを RAID-5 に設定した別々のディスクに入れてください。
* 遅延時間およびスループットを改善するため、「ギガビットイーサーネット」を使用してください。あなたがウェブサーバおよびデータベースサーバを分離して運用している場合、これは特に大切です。
* 遅延時間およびスループットを改善するため、「ギガビットイーサーネット」を使用してください。あなたがウェブサーバおよびデータベースサーバを分離して運用している場合、これは特に大切です。
* あなたの「ネットーワークカード」の設定を確認してください。バッファおよびトランスミット/レシーブディスクリプタを増やすこと (これはプロセッサとメモリのオーバヘッドとのバランスをとってください)、TCPチェックサムの計算をOSではなくカードにオフロードすることでパフォーマンスを改善することができます。
* あなたの「ネットワークカード」の設定を確認してください。バッファおよびトランスミット/レシーブディスクリプタを増やすこと (これはプロセッサとメモリのオーバヘッドとのバランスをとってください)、TCP チェックサムの計算を OS ではなくカードにオフロードすることでパフォーマンスを改善することができます。


==オペレーティングシステム==
==オペレーティングシステム==
* あなたはサーバの「オペレーティングシステム」として、[http://ja.wikipedia.org/wiki/Linux Linux] ((お勧めです) 、UnixベースのOS、Windows、Mac OS Xを使用することができます。シェルインターフェースのみで構成された場合、一般的に*nixオペレーティングシステムは同じタスクの処理に関して、Mac OS XまたはWindowsサーバよりも少ないメモリを必要とします。さらにLinuxにはライセンス料が発生しませんが、あなたが他のオペレーティングシステムを使用している場合、大きな学習曲線を描くことになります。サーバがSMPで動作している大量のプロセッサを持っている場合、高度にチューニングされたの[http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris]ようなOSの使用を考えてみてください。
* あなたはサーバの「オペレーティングシステム」として、[http://ja.wikipedia.org/wiki/Linux Linux] (お勧めです) 、Unix ベースの OS、Windows、Mac OS X を使用することができます。シェルインターフェースのみで構成された場合、一般的に *nix オペレーティングシステムは同じタスクの処理に関して、Mac OS X または Windows サーバよりも少ないメモリを必要とします。さらに Linux にはライセンス料が発生しませんが、あなたが他のオペレーティングシステムを日常的に使用している場合、Linux コマンド等の習得に大きな学習曲線を描くことになります。サーバが SMP で動作している大量のプロセッサを持っている場合、高度にチューニングされた [http://en.wikipedia.org/wiki/Solaris_Operating_Environment Solaris] のような OS の使用を考えてみてください。
* 最適化するには、OSおよび「サーバ製造元の使用説明書」を確認してください。
* 最適化するには、OS および「サーバ製造元の使用説明書」を確認してください。
** Linuxに関しては、[http://linuxperf.sourceforge.net/ Linux Performance Team]サイトをご覧ください。
** Linux に関しては、[http://linuxperf.sourceforge.net/ Linux Performance Team] サイトをご覧ください。
** Linuxではhdparmコマンドでハードディスクの状態を詳細に調べることができます。例) hdparm -m16 -d1 でマルチセクタのread/writeを有効にできます。DMAマウントのディスクには、asyncおよびnoatimeオプションを付けてください。
** Linux では hdparm コマンドでハードディスクの状態を詳細に調べることができます。例) hdparm -m16 -d1 でマルチセクタの read/write を有効にできます。DMA マウントのディスクには、async および noatime オプションを付けてください。
** Windowsサーバではネットワークアプリケーション最適化してください (コントロールパネル、ネットーワーク接続、LAN接続、プロパティ、Microsoft ネットワーク用ファイルとプリンタ共有、最適化)。最適化に関するドキュメントは、[http://technet.microsoft.com/ Microsoft TechNetサイト]でご覧いただけます。
** Windows サーバでは、ネットワークアプリケーションを最適化してください (コントロールパネル >> ネットワーク接続 >> LAN 接続 >> プロパティ >> Microsoft ネットワーク用ファイルとプリンタ共有 >> 最適化)。最適化に関するドキュメントは、[http://technet.microsoft.com/ Microsoft TechNetサイト]でご覧いただけます。


==ウェブサーバパフォーマンス==
==ウェブサーバパフォーマンス==


* PHPパフォーマンス
[http://www.mozilla.com/en-US/ Firefox] および [https://addons.mozilla.org/en-US/firefox/addon/1843 firebug] エクステンションをインストールすることで、それぞれのページコンポーネントのロードに掛かる時間を観察することができます。また、[https://addons.mozilla.org/en-US/firefox/addon/5369 Yslow] エクステンションでは、ウェブサイトの迅速なロードするため、あなたのページを Yahoo [http://www.skrenta.com/2007/05/14_rules_for_fast_web_pages_by_1.html 14 rules] ([http://video.yahoo.com/video/play?vid=1040890 video]) に関して調査します。
** CPUロードを軽減する[http://pecl.php.net/apc APC] (推奨)、[http://www.php-accelerator.co.uk/ PHPA]、[http://trac.lighttpd.net/xcache/ Xcache]または[http://eaccelerator.net/ eAccelerator]のような「PHPアクセラレータ」の使用を強くお勧めします。PHPページのキャッシュを[[TMPFS]]ファイルシステムに置いてください。
 
** CGIとしてインストールするより「Apache/IIS ISAPIモジュール」としてインストールする方が、PHPのパフォーマンスは良くなります。
===PHP パフォーマンス===
** ご利用のMoodleが1.7より以前のバージョンの場合、php.iniの「memory_limit」を確認して、16Mに減らしてください ([http://moodle.org/mod/forum/discuss.php?d=39656 詳細はこのフォーラムディスカッションをご覧ください])。Moodle 1.7以降では、「memory_limit」を32Mに設定することをお勧めします。
* CPU ロードを軽減する[http://pecl.php.net/apc APC] (推奨)、[http://www.php-accelerator.co.uk/ PHPA]、[http://trac.lighttpd.net/xcache/ Xcache] または [http://eaccelerator.net/ eAccelerator] のような「PHP アクセラレータ」の使用を強くお勧めします。(あなたの PHP バージョンで適切に動作する PHP アクセラレータを注意深く選定してください。Turck MMCache の[http://turckmmcache.exeprod.com/TheManifestoEnglish 開発およびメンテナンスは中止され]、PHP 5 で問題が発生しますので注意してください)。PHP ページのキャッシュを [[TMPFS]] ファイルシステムに置いてください。
* Apacheパフォーマンス
* CGI としてインストールするより「Apache/IIS ISAPI モジュール」としてインストールする方が、PHP のパフォーマンスは良くなります。
** 使用メモリーを減らすために、httpd.confファイルでロードする「モジュール数」を可能な限り減らすことを考慮してください。また、さらに使用メモリーを減らすことのできる最新バージョンのApache 2の使用もお考えください。
* ご利用の Moodle が 1.7 より以前のバージョンの場合、php.ini の「memory_limit」を確認して、16M に減らしてください ([http://moodle.org/mod/forum/discuss.php?d=39656 詳細はこのフォーラムディスカッションをご覧ください])。Moodle 1.7 以降では、「memory_limit」を 40M に設定することをお勧めします。
** Unix/Linuxシステムでは、httpd.confの「MaxRequestsPerChild」を20~30くらいに下げることをお考えください。この設定をさらに低くすると、forkのオーバーヘッドがメリットを上回ることになります。
 
** 負荷が高いサーバでは、「KeepAliveTimeout」を2から5の間に下げることをお考えください。デフォルトは15 (秒) です - この値を高くすると、それに応じてサーバプロセスがアイドルコネクションを待つことになります。
===Apache パフォーマンス===
** 代わりに「ライトウェイトウェブサーバ」[http://www.lighttpd.org/ lighttpd]とfastCGIモードのPHPを使用することにより、ウェブサーバのパフォーマンスを向上させることができます。Apacheに比べてLighttpdでは、メモリーの消費を抑えることができます。fastCGIとlighttpdを合わせたプロセスより、1つのapacheプロセスの方がより多くのRAMを必要とします。注意: Lighttpdは相対的に設定および管理が難しく、Apacheよりも多くの時間を必要とします。
* '''MaxClients''' ディレクティブを正しく設定してください。 次の公式を使用して設定値を計算してください (予備のメモリ領域を残すため、利用可能なメモリの 80% を使用します):
* IISパフォーマンス - 下記の場所にあるすべてのレジストリを変更してください:
MaxClients = 利用可能な合計メモリ * 80% / Apache プロセスの最大メモリ使用量
:Apache プロセスのメモリ使用量は通常 10MB です。一般的な経験則として、MaxClients の値を取得するには、利用可能なメモリ容量を 10MB で割ってください。Apache プロセスの最大メモリ使用量を見つけるには、シェルコマンドの結果より値を読み取ってください:
#ps -ylC httpd --sort:rss
:'''警告''': MaxClients の値をあなたの利用可能なメモリ容量より大きくする誘惑に負けないでください。サーバが実際の RAM より多くを消費し、ディスクスワップが発生し始めることになります。
* 必要なメモリを減らすため、Apache がロードする'''モジュール数'''を httpd.conf ファイルで必要最小限に減らすことを考慮してください。
* '''最新バージョンの Apache''' を使用してください - Apache 2 ではメモリ使用量を大幅に減らすため、メモリモデルが改善されています。
* Unix/Linux システムでは、httpd.conf の「MaxRequestsPerChild」を 20~30 くらいに下げることをお考えください (この設定をさらに低くすると、fork のオーバーヘッドがメリットを上回ることになります)。
* 負荷が高いサーバでは、「KeepAlive Off」に設定する (Moodle ページにリソースまたはアップロードされたイメージへのリンクが設定されていない場合のみ)、または「KeepAliveTimeout」を 2~5 の間に下げることをお考えください。デフォルトは 15 (秒) です - この値を高くすると、それに応じてサーバプロセスがアイドルコネクションを待つことになります。あなたのユーザがページのダウンロードにかかる時間を観察することで、より正確な「KeepAliveTimeout」の値を取得できます。さらなる作業プロセス/スレッドの起動により、オーバーヘッドが発生しますので、 KeepAlive の設定を変更した後は CPU 利用を監視してください。
* 「KeepAlive Off」の代わりの方法として、HTML ファイルとイメージをキャッシュするため、Moodle サーバの前に '''Reverse Proxy server''' を設定することをお考えください。
* あなたが「.htaccess」ファイルを使用していない場合、.htaccess ルックアップを避けるため、'''AllowOverride''' を「AllowOverride None」にしてください。
* content-negotiation (コンテンツ・ネゴシエーション) を避けるため、'''DirectoryIndex''' を正しく設定してください。以下、運用サーバの設定例です:
DirectoryIndex index.php index.html index.htm
* あなたがサーバを開発作業に使用している場合を除いて、'''ExtendedStatus Off''' を設定および mod_info と同様に mod_status を無効にしてください。
* DNS 待ち時間を減らすため、'''HostnamesLookups Off''' (デフォルト) のままにしてください。
* '''TimeOut''' の値を 30~60 (秒) に減らすことを考慮してください。
* Options Multiviews によるディレクトリスキャンを避けるため、'''Options ディレクティブ'''を設定してください。ディスク I/O を減らすには:
Options -Indexes FollowSymLinks
*'''キャッシング''' - Apache では、イメージのような各種ページ要素をローカルメモリでキャッシュして、ページがリクエストされるたびに Apache に要求しないようブラウザに指示することができます。この設定をどのようにするか OS 間で若干異なりますが、以下2つの基本的なステップがあります:
 
# mod_expires をインストールおよび有効化してください - 詳細はドキュメントまたは man ページをご覧ください。
# 次のコードをバーチャルサーバの config ファイル内の root ディレクトリ用 <directory> セクションに追加してください (または、AllowOverrides が有効の場合、.htaccess ファイル):
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 1 seconds"
  ExpiresByType image/gif "access plus 1 week"
  ExpiresByType image/jpeg "access plus 1 week"
  ExpiresByType image/png "access plus 1 week"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/x-javascript "access plus 1 week"
  ExpiresByType text/xml "access plus 1 seconds"
</IfModule>
 
この設定の効果は、動的に変わる HTML および XML を除いて、すべてをキャッシュに保持します。このようにして、ロードタイムを大幅に減らすことが可能です。どのくらいの頻度であなたのイメージが変更されるか等を考慮しながら、キャッシュタイムを調整してください。
 
詳細は次のサイトをご覧ください: [http://www.metaskills.net/blog/heuristics/sysadmin/how-to-control-browser-caching-with-apache-2 www.metaskills.net]
 
代わりに「ライトウェイトウェブサーバ ([http://www.lighttpd.org/ lighttpd])」lighttpd と fastCGI モードの PHP を使用することにより、ウェブサーバのパフォーマンスを向上させることができます。Apache に比べて Lighttpd では、メモリー消費を抑えることができます。fastCGI と lighttpd を合わせたプロセスより、1つの Apache プロセスの方がより多くの RAM を必要とします。注意: Lighttpd は相対的に設定および管理が難しく、Apache より多くの時間を要します。
 
===IIS パフォーマンス===
IISパフォーマンス - 下記の場所にあるすべてのレジストリを変更してください:
  HKLM\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters\
  HKLM\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters\
:* KeepAliveTimeoutと同等な設定項目は「ListenBackLog」です (IIS - レジストリの場所: HKLM\ SYSTEM\ CurrentControlSet\ Services\ Inetinfo\ Parameters)。この値を2~5の間に設定してください。
* KeepAliveTimeoutと同等な設定項目は「ListenBackLog」です (IIS - レジストリの場所: HKLM\ SYSTEM\ CurrentControlSet\ Services\ Inetinfo\ Parameters)。この値を 2~5 の間に設定してください。
:*「MemCacheSize」の値を搭載メモリ総量 (MB) に合わせてください。IISではファイルキャッシュに使用します (デフォルトは利用可能メモリの50%です)。
*「MemCacheSize」の値を搭載メモリ総量 (MB) に合わせてください。IIS ではファイルキャッシュに使用します (デフォルトは利用可能メモリの 50% です)。
:*「MaxCachedFileSize」の値をファイルキャッシュに保存されるファイルキャッシュの最大サイズ (単位: バイト) に合わせてください。デフォルトは、262,,144 (256K) です。
*「MaxCachedFileSize」の値をファイルキャッシュに保存されるファイルキャッシュの最大サイズ (単位: バイト) に合わせてください。デフォルトは、262,144 (256K) です。
:*キャッシュ内のオブジェクトがメモリに保持される時間 (ミリセカンド) を変更するため、「ObjectCacheTTL」と呼ばれるDWORDを新しく作成してください。デフォルトは、30,000ミリセカンド (30秒) です。
*キャッシュ内のオブジェクトがメモリに保持される時間 (ミリセカンド) を変更するため、「ObjectCacheTTL」と呼ばれる DWORD を新しく作成してください。デフォルトは、30,000 ミリセカンド (30秒) です。


==データベースパフォーマンス==
==データベースパフォーマンス==


Moodleには[http://phplens.com/lens/adodb/docs-perf.htm ADOdbパフォーマンスモニタ]から重要なデータベースパフォーマンス統計を表示するスクリプトが含まれています。下記の例のようにスクリプトを実行してください:
Moodle には[http://phplens.com/lens/adodb/docs-perf.htm ADOdbパフォーマンスモニタ]から重要なデータベースパフォーマンス統計を表示するスクリプトが含まれています。下記の例のようにスクリプトを実行してください:


  http://www.mymoodle.com/admin/dbperformance.php
  http://www.mymoodle.com/admin/dbperformance.php
65行目: 104行目:
あなたのデータベースサーバのチューニングおよび改善のため、表示されるデータを利用してください。
あなたのデータベースサーバのチューニングおよび改善のため、表示されるデータを利用してください。


===MySQLパフォーマンス===
===MySQL パフォーマンス===


次の内容は、あなたのMySQLパフォーマンスを向上させるためのmy.cnf (Windowsではmy.ini) 特有の設定です。現在の設定値は次のコマンドで確認することができます。
次の内容は、あなたの MySQL パフォーマンスを向上させるための my.cnf (Windowsではmy.ini) 特有の設定です。現在の設定値は次のコマンドで確認することができます。
  SHOW STATUS;
  SHOW STATUS;
  SHOW VARIABLES;  
  SHOW VARIABLES;  
'''重要''': MySQLサーバの設定を変更する前に、あなたのデータベースを必ずバックアップしてください。my.cnfを少しでも変更した後は、mysqldをリスタートしてください。
'''重要''': MySQL サーバの設定を変更する前に、あなたのデータベースを必ずバックアップしてください。my.cnf を少しでも変更した後は、mysqld をリスタートしてください。
*query_cache_type = 1 とすることで「query cache」を有効にしてください。ほとんどのMoodleインストールでは、query_cache_size を36Mに、query_cache_min_res_unit を2Kにしてください。データベースの更新が頻繁でない場合、「query cache」はパフォーマンスを改善します。
*「query_cache_type = 1」 にすることで「query cache」を有効にしてください。ほとんどの Moodle インストールでは、query_cache_size を 36M に、query_cache_min_res_unit を 2K にしてください。データベースの更新が頻繁でない場合、「query cache」はパフォーマンスを改善します。
*「table cache」を正しく設定してください。Moodle 1.6では table_cache = 159に、Moodle 1.7では table_cache = 170 に設定してください。あなたがインストールしたモジュールおよびプラグインの数に応じてこの値は変わりますので注意してください。下記のMySQL命令文を実行して、あなたのサーバの値を調査してください。表示される行 (rows) を確認して、その値をtable_cacheに設定してください。
*「table cache」を正しく設定してください。Moodle 1.6では table_cache = 159に、Moodle 1.7では table_cache = 170 に設定してください。あなたがインストールしたモジュールおよびプラグインの数に応じてこの値は変わりますので注意してください。下記のMySQL命令文を実行して、あなたのサーバの値を調査してください。表示される行 (rows) を確認して、その値を table_cache に設定してください。
  mysql>SELECT table_name FROM information_schema.tables WHERE table_schema='yourmoodledbname';
  mysql>SELECT table_name FROM information_schema.tables WHERE table_schema='yourmoodledbname';
* 「thread cache」を正しく設定してください。この式であなたの「スレッドキャッシュ利用 (thread cache utilization)」ができるだけ100%に近くなるように調整してください:
* 「thread cache」を正しく設定してください。この式であなたの「スレッドキャッシュ利用 (thread cache utilization)」ができるだけ100%に近くなるように調整してください:
  thread cache utilization (%) = (threads_created / connections) * 100
  thread cache utilization (%) = (threads_created / connections) * 100


* 「key buffer」はMoodleのSELECTクエリーのアクセススピードを改善することができます。適切な値は、インデックスファイル (myi) のサイズに依存します。Moodle 1.6またはそれ以上 (追加モジュールおよびプラグインなし) での推奨値は、key_buffer_size = 32M です。100リクエストごとにデータベースを1回読むのが理想的です。あなたのMoodleに値が適切になるよう、次の式に当てはまる key_buffer_size の値を調整してください:
* 「key buffer」はMoodle の SELECT クエリーのアクセススピードを改善することができます。適切な値は、インデックスファイル (myi) のサイズに依存します。Moodle 1.6 またはそれ以上 (追加モジュールおよびプラグインなし) での推奨値は、key_buffer_size = 32M です。100 リクエストごとにデータベースを1回読むのが理想的です。あなたの Moodle に値が適切になるよう、次の式に当てはまる key_buffer_size の値を調整してください:
  key_read / key_read_requests < 0.01
  key_read / key_read_requests < 0.01
  key_write / key_write_requests <= 1.0
  key_write / key_write_requests <= 1.0


* あなたのユーザが「Too many connections」メッセージを見なくても良いように、「maximum number of connections」を設定してください。この設定は総メモリ使用量に影響を及ぼしますので注意してください。一般的にMySQLコネクションは、1000分の何秒か続きます。ですから非常に負荷の高いサーバだとしても、200以上の値を設定することは普通ではありません。
* あなたのユーザが「Too many connections」メッセージを見なくても良いように、「maximum number of connections」を設定してください。この設定は総メモリ使用量に影響を及ぼしますので注意してください。一般的に MySQL コネクションは、1000分の何秒か続きます。ですから非常に負荷の高いサーバだとしても、200 以上の値を設定することは普通ではありません。
* 「高負荷活動」に対する設定。あなたが多くの小テストを含むMoodleを使用して、パフォーマンスに関する問題がある場合、「back_log」の設定値を増やしてみてください (threads_connectedの値をモニタして確認してください - この値が上がらないはずです。)。
* 「高負荷活動」に対する設定。あなたが多くの小テストを含む Moodle を使用して、パフォーマンスに関する問題がある場合、「back_log」の設定値を増やしてみてください (threads_connected の値をモニタして確認してください - この値が上がらないはずです。)。
* 毎週およびMoodleのアップグレード後にMySQLテーブルを最適化してください。活動モジュールの大きなデータ削除後、あなたのMySQLテーブルを最適化することをお勧めします (例 学期または年度の終了後)。この作業により、確実にインデックスファイルが最新のものになります。最初にデータベースをバックアップして、次のコマンドを実行してください:
* 毎週および Moodle のアップグレード後に MySQL テーブルを最適化してください。活動モジュールの大きなデータ削除後、あなたの MySQL テーブルを最適化することをお勧めします (例 学期または年度の終了後)。この作業により、確実にインデックスファイルが最新のものになります。最初にデータベースをバックアップして、次のコマンドを実行してください:
  mysql>CHECK TABLE mdl_tablename;
  mysql>CHECK TABLE mdl_tablename;
  mysql>OPTIMIZE TABLE mdl_tablename;
  mysql>OPTIMIZE TABLE mdl_tablename;
:一般的にチェックするMoodleのテーブルは、mdl_course_sections、mdl_forum_posts、mdl_log および mdl_sessions (dbsessionsを使用する場合) です。 REPAIR TABLEコマンドを使用して、テーブルのエラーを修正してください (詳細は[http://dev.mysql.com/doc/refman/5.0/en/repair-table.html MySQL manual]をご覧ください)。
:一般的にチェックする Moodle のテーブルは、mdl_course_sections、mdl_forum_posts、mdl_log および mdl_sessions (dbsessionsを使用する場合) です。 REPAIR TABLE コマンドを使用して、テーブルのエラーを修正してください (詳細は[http://dev.mysql.com/doc/refman/5.0/en/repair-table.html MySQL manual] をご覧ください)。
* インデックスデータファイルをメンテナンスしてください。毎月またはそれくらいの期間でMySQLサーバを停止して、次のmyisamchkコマンドを実行することをお勧めします。
* インデックスデータファイルをメンテナンスしてください。毎月またはそれくらいの頻度でMySQLサーバを停止して、次の myisamchk コマンドを実行することをお勧めします。
  #myisamchk -a -S /pathtomysql/data/moodledir/*.MYI
  #myisamchk -a -S /pathtomysql/data/moodledir/*.MYI
:'''警告''': MySQLデータベースプロセス (mysqld) を必ず停止してください。停止しない場合、データを喪失するリスクがあります。
:'''警告''': MySQL データベースプロセス (mysqld) を必ず停止してください。停止しない場合、データを喪失するリスクがあります。
* ディスクに一時的に保存されるテーブル数を減らしてください。この設定値は、created_tmp_disk_tablesで調べることができます。この値が相対的 ( >5% ) に大きい場合、小さくなるようtmp_table_sizeの設定値を変更してください。この設定変更は、RAMの使用に影響を及ぼしますので注意してください。
* ディスクに一時的に保存されるテーブル数を減らしてください。この設定値は、created_tmp_disk_tables で調べることができます。この値が相対的 ( >5% ) に大きい場合、小さくなるよう tmp_table_size の設定値を変更してください。この設定変更は、RAM の使用に影響を及ぼしますので注意してください。
* Moodleのテーブルは、MyISAMフォーマットを使用します。パフォーマンスの向上に繋がらないため、「InnoDB」は無効にしてください。あなたがInnoDBを使用する必要がある場合、すべてのMoodleテーブルを変換してください。次のinnodbスクリプトで変換することができます:
* Moodleの テーブルでは、「MyISAM」フォーマットを使用します。パフォーマンスの向上に繋がらないため、「InnoDB」は無効にしてください。あなたが InnoDB を使用する必要がある場合のみ、すべての Moodle テーブルを変換してください。次の innodb スクリプトで Moodle テーブルを変換することができます:


  http://www.mymoodle.com/admin/innodb.php
  http://www.mymoodle.com/admin/innodb.php


===他のデータベースパフォーマンスリンク===
===他のデータベースパフォーマンスリンク===
* [http://en.wikipedia.org/wiki/Memcached memcached]のような分散型キャッシングシステムの使用を考えてください。memcachedの場合、セキュリティ機能はありませんので、ファイアーウォールの背後で使用してください。
* [http://en.wikipedia.org/wiki/Memcached memcached] のような分散型キャッシングシステムの使用を考えてください。memcached の場合、セキュリティ機能はありませんので、ファイアーウォールの背後で使用してください。
* PostgresSQLの使用を考えてください。詳細は、[[PostgreSQLを使う理由]]をご覧ください。
* PostgresSQL の使用を考えてください。詳細は、[[PostgreSQLを使う理由]]をご覧ください。
* [[データベース接続持続時間を増やす | データベース接続持続時間を増やしてみてください]]。
* [[データベース接続持続時間を増やす | データベース接続持続時間を増やしてみてください]]。
* [http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html General advice on tuning MySQL parameters] (advice from the MySQL manual)
* [http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html General advice on tuning MySQL parameters] (MySQL マニュアルのアドバイス)


==Moodle管理設定==
==Moodle 管理設定==
* '''language cache''' を有効にしてください。
* Moodle 1.7以降のバージョンでは、あなたのサーバの'''キャッシュタイプ''' (サイト管理 > サーバ > パフォーマンス > キャッシュタイプ) を有効にしてください。ここでは、いくつかのオプションを利用することができます。
* 大きなログファイルは、時間と共に全体的なパフォーマンスを落とす要因となります。ブラウザに表示されるページのスピードが徐々に遅くなってきた場合は、管理画面で「ログの保存期間」を減らしてください。
:*あなたがeAcceleratorまたはmmemcachedをインストールしていない場合、「internal」(レコード/内部キャッシュを使用する - 次の箇条書きをご覧ください) を選択してください。
* Moodle 1.7またはそれ以上のバージョンでは、「レコードキャッシュ」を有効にしてください。「レコードキャッシュ」は一次キャッシュとして動作し、データベースアクセスパフォーマンスを改善することができます。
:* あなたが単一のサーバを使用して、'''eAcceleratorを共有メモリサポート'''でコンパイルしている場合、キャッシュタイプの「eaccelerator」オプションを選択してください。
* Performance can be greatly improved by allowing Moodle to use the system '''zip/unzip''' commands (rather than PHP-based zip libraries) - visit Admin/Configure/Variables and enter the path to the relevant executables. (Similarly, filling in the path to '''du''' will improve Moodle's speed at listing directory contents.)
:* あなたが'''共有していないmemcachedサーバ'''を使用している場合、キャッシュタイプに「memcached」を選択した後、「memcachedホスト (memcachedhosts)」にカンマ区切りのサーバIPアドレス一覧を入力してください。
* Note that using '''secure web connections''' ('''https''' rather than '''http''') carries a higher processing burden, both for the webserver and the client - particularly because cacheing cannot be used as effectively, so the number of file requests is likely to increase dramatically. For this reason using https for all Moodle pages is not recommended. You can enable https just for the login screen, simply from Moodle's config page.
* '''レコード/内部キャッシュ'''を有効にする: サイト管理 > サーバ > パフォーマンス > レコードキャッシュ = True。キャッシュに割り当てる最大メモリ容量を「内部キャッシュ最大値 (intcachemax)」のテキストボックス内で設定してください。この設定により、データベースエンジンキャッシュを使用せずに、データベースレコードの一次キャッシュを有効にすることができます。例) MySQL/PostgreSQLキャッシュ。詳細なディスカッションは、[http://tracker.moodle.org/browse/MDL-7196 このTrackerエントリ]をご覧ください。
* Check your '''filters'''. Having too many filters active can have serious effects on server load, especially on lower-end systems. The number of active filters has a direct effect on the perceived latency of your site; that is the time taken for each page impression.
* '''言語キャッシュ'''を有効にしてください。
* Enable the '''text cache''' but do not "Filter all strings" unless you have a specific need. If in doubt profile the performance, and see how your changes affect the processing time.
* 大きなログファイルは、時間と共に全体的なパフォーマンスを落とす要因となります。ブラウザに表示されるページのスピードが徐々に遅くなってきた場合、「サイト管理 > サーバ > クリーンアップ」で「ログの保存期間」を減らしてください。
* Check your '''anti-virus''' measures on the server.  Although they are useful for preventing security holes being exploited, some "On-Demand" scanners can affect performance by scanning page content (word, ppt files etc).
* Moodleでオペレーティングシステムの「zip/unzip」コマンドを使用する場合、PHPベースのzipライブラリを使用するより、パフォーマンスを大きく改善することができます。「管理 > 設定 > 詳細設定」で適切なパスを入力してください。同様に「du」のパスを設定することで、Moodleにおけるディレクトリコンテンツのリスティングスピードを改善することができます。
* If there are performance problems loading course pages, check the '''Resource module settings'''. The setting resource_filterexternalpages is known to slow-down course pages and should be set to 'No' for better performance.
* '''セキュアウェブコネクション''' ('''http'''ではなく'''https''') を使用することで、ウェブサーバおよびクライアントに対して、過大な負荷がかかります。特にキャッシングが効果的に使用されないため、リクエスト数が劇的に増加してしまいます。この理由から、Moodleのすべてのページに対してhttpsを使用することは、お勧めできません。Moodleの設定でログイン画面のみhttpsを有効にすることはできます。
* Check your '''forum settings'''. To improve performance set forum_trackreadposts = No and forum_usermarksread = Yes (this will impact on the convenience of your users' forum experience). Also consider setting the time of the day when old posts are cleared from the read table (forum_cleanreadtime) to when your site is less busy.
* あなたの「フィルタ」設定を確認してください。あまりにも多くのフィルタを有効にしていると、特にスペックの低いシステムに深刻な影響を与えます。有効にしているフィルタ数は、それぞれのページ表示に関して、明らかに遅くなるという直接的な影響を及ぼします。
* 「テキストキャッシュ」を有効にしてください。必要な場合以外は「「すべての文字をフィルタする」を有効にしないでください。この設定に疑問がある場合、それぞれの設定を変更して、どのように処理時間に影響を及ぼすか確認してください。
* あなたのサーバの「アンチウイルス」設定を確認してください。これらはセキュリティホールを突かれることを防ぐ「オンデマンド」スキャナーとして有用ですが、ページコンテンツ (word、pptファイル等) をスキャニングすることでパフォーマンスに影響を及ぼす可能性があります。
* コースページの表示にパフォーマンスの問題がある場合、管理画面の「モジュール設定」で、リソースの設定を確認してください。リソースの設定で「filterexternalpages」を有効にするとコースページの表示が遅くなります。パフォーマンスを上げるには「No」に設定してください。
* あなたの「フォーラム設定」を確認してください。パフォーマンスを改善するには、「forum_trackreadposts = No」および「forum_usermarksread = Yes」 (この設定はユーザのフォーラム使用の利便性に関して影響を与えます) にしてください。また、利用者が少ない時間帯に、古い投稿を「既読」テーブルからクリアする時刻  (forum_cleanreadtime) を設定してください。
* あなたが本当に必要とする以外、データベースセッションを使用しないでください。どちらかといえば、ディスクセッションの方がはるかに速い傾向にあります。


==各Moodleモジュールのパフォーマンス==
==各 Moodle モジュールのパフォーマンス==


Moodleの活動モジュールフィルタおよび他のプラグインは有効/無効にすることができます。不要な場合 (必須ではありませんが)、必要に応じていくつかの機能 (チャット等) を無効にしてください。各モジュールに関するノート:
Moodle の活動モジュールフィルタおよび他のプラグインは有効/無効にすることができます。必須ではありませんが、必要に応じていくつかの機能 (チャット等) を無効にしてください。各モジュールに関するメモ:


* '''チャット'''モジュールは、メインサーバに対して頻繁にHTTPリクエストする点において、大食いだと[http://moodle.org/mod/forum/discuss.php?d=37979&parent=175079 言われています]。管理 >> 設定 >> モジュール管理 >> チャット で、chat_normal_updatemodeを「Streame」にするか、chat_methodを「Chatサーバデーモン」にすることでサーバに対する負荷を軽減することができます。
* チャットモジュールは、メインサーバに対して頻繁にHTTPリクエストする点において、[http://moodle.org/mod/forum/discuss.php?d=37979&parent=175079 大食いだと言われています]。管理 >> 設定 >> モジュール管理 >> チャット で、chat_normal_updatemode を「Streame」にするか、chat_method を「Chat サーバデーモン」にすることでサーバに対する負荷を軽減することができます。
* [http://moodle.org/mod/forum/discuss.php?d=25616&parent=120770 55名の学生が同時に'''小テスト'''を使用する場合のパフォーマンスに関する報告 - 英文]
* [http://moodle.org/mod/forum/discuss.php?d=25616&parent=120770 55名の学生が同時に小テストを使用する場合のパフォーマンスに関する報告 - 英語]
* Moodleの'''cron'''タスクは、スクリプト''cron.php''を呼ぶことで動作します。このスクリプトが、HTTP経由で呼ばれた場合 (例 wgetまたはcurlを使用)、大規模なMoodleサイトでは大量のメモリを消費します。phpコマンドを使用して直接呼ばれた場合 (例 ''php -f /path/to/moodle/directory/admin/cron.php'')、効率は大幅に改善されます。
* Moodle の cron タスクは、スクリプト cron.php を呼ぶことで動作します。このスクリプトが HTTP 経由で呼ばれた場合 (例 wget または curl を使用)、規模の大きな Moodle サイトでは大量のメモリを消費します。php コマンドを使用して直接呼ばれた場合 (例 php -f /path/to/moodle/directory/admin/cron.php)、大幅に効率が改善されます。
* 多くのフィルタを有効にする場合、サーバの負荷 (特にスペックの低いサーバ) に重大な影響を及ぼします。有効にされているフィルタの数は、あなたのサイトのレスポンスに関して直接影響を、すなわち各ページの表示に要する時間に関して影響を及ぼします。パフォーマンスを上げるため、管理 >> 設定 >> フィルタ の「テキストキャッシュ保存時間」を「No」以外に設定して、特に必要がない場合は「すべての文字をフィルタする」を「No」にしてください。設定が疑わしい場合、[[Performance profiling|パフォーマンスのプロファイリング]]を行って、あなたの変更内容がプロセスタイムにどのように影響するのか確認してください。


==関連情報==
==関連情報==


*Using Moodleフォーラム [http://moodle.org/mod/forum/view.php?f=94 サーバおよびパフォーマンス (英文)]
*[[パフォーマンスFAQ]]
*Using Moodle フォーラム [http://moodle.org/mod/forum/view.php?f=94 サーバおよびパフォーマンス] - 英語
 
moodle.org には、パフォーマンスに関して数多くのディスカッションが投稿されています。以下、いくつかの興味深い、(潜在的に) 有用な投稿です:
 
* [http://moodle.org/mod/forum/discuss.php?d=83057 パフォーマンス問題!] - 英語
* [http://moodle.org/mod/forum/discuss.php?d=57028 パフォーマンスパースペクティブ - 短いスクリプト] - 英語
* [http://moodle.org/mod/forum/discuss.php?d=88927 サーバハードウェア計画に関するコメント] - 英語
* [http://moodle.org/mod/forum/discuss.php?d=102978#p461624 pilにおけるMoodleパフォーマンス by Martin Langhoff] - 英語


[[Category:管理者]]
[[Category:管理者]]
[[Category:パフォーマンス]]
[[Category:パフォーマンス]]


[[es:Rendimiento]]
[[en:Performance]]
[[en:Performance]]

2010年4月14日 (水) 15:00時点における最新版

少人数のユーザ、数千名のユーザでも、Moodle は快適に動作させることができます。パフォーマンスに関係する要素は、基本的に他の PHP ベースのデータベース主導型システムと同じです。 あなたのサーバを最適化するには「ユーザ数の多寡が大きな要素となること」に焦点を置いてください。例えば、相対的にみて、データベースにアクセスするユーザよりも閲覧するユーザが多い場合、ウェブサーバのパフォーマンスを改善してください。

ベンチマークのベースラインを取得する

最適化を試みる前に、あなたが改善しようと考えるシステムコンポーネントに関するベンチマークのベースラインを取得してください。Linux の場合、LBS をお試しください。Windows の場合、パフォーマンスモニターを使用してください。システムに関する現在のパフォーマンスの数値データを取得することにより、あなたの設定変更がどれだけ実際のインパクトを与えたのか測定することができるようになります。

パフォーマンスを改善するための全体的な照準は、RAM (キャッシング) の使用量およびディスクベースの活動の軽減です。特にスワップファイルの使用を可能な限り減らすことは重要です。あなたのシステムがスワッピングを開始した場合、さらに RAM を追加すべきです。

一般的に「最適化の優先順位」は、第1に「記憶装置 (RAM)」、第2に「記憶装置 (速いハードディスク/ハードディスク設定の改善)」、第3に「プロセッサ (個数および速度)」です。

スケーラビリティ (拡張性)

アプリケーション層を明確に分離することにより、強力に拡張可能な設定を Moodle に施すことができます (詳細は Moodleの大規模インストールをご覧ください)。

通常、小規模サイトでは必要ありませんが、大規模サイトではウェブおよびデータベースを分離したサーバに設置してください。

例えば1つ以上のサーバを使用することで、Moodle をロードバランスすることは可能です。分離されたウェブサーバでは、同じデータベースに問い合わせを行い、同じファイルエリアを参照します。そうでなければ、このようなクラスタリングを適用するには、アプリケーション層の分離だけで十分です。同様に、データベースをクラスタ化することもできます (例 MySQL クラスタ)。しかし、これは簡単な仕事ではなく、エキスパートのサポートが必要です。

ハードウェア設定

メモ: あなたがパフォーマンスを改善できる、簡単かつ効果的な変更は、サーバのメモリを可能な限り増やすことです (例 4GB)。メモリを増やすことで、ディスクへのスワップを減らし、さらに多くのユーザを処理することができるようになります。

  • 最良の「プロセッサ性能」 (例 デュアルまたはデュアルコア) を適用することで、さらなるパフォーマンスの向上を図ることができます。最新の BIOS では、ハイパースレッディングを有効にすることができます。しかし、これが全体的なプロセッサのパフォーマンスに違いをもたらすかどうか、CPUベンチマークツールを使用して確認してください。
  • 可能でしたら、「SATA ドライブ」の代わりに「SCSI ハードディスク」を購入してください。SCSI ドライブが独自の統合プロセッサを持ち、複数ドライブがある場合、それぞれに統合プロセッサを持つのに対し、SATA ドライブはシステム CPU の利用を増大させます。あなたが SATA ドライブを使用する必要がある場合、マザーボードおよびドライブが NCQ (Native Command Queuing) をサポートするかどうかチェックしてください。
  • 「シークタイムの短い」ハードディスクを購入してください。これは全体的なスピード (特に Moodle のレポートにアクセスする時) を改善します。
  • 「スワップファイル」を正しく設定してください。一般的には、物理メモリーの4倍の設定値をお勧めします (この設定値には賛否両論あります - Mitsuhiro Yoshida)。
  • 「RAID ディスクシステム」を使用してください。サーバコンピュータに対して、多くの異なる RAID 設定を行うことができますが、下記の設定は一般的に最も良く動作します:
    • 可能であればハードウェア RAID コントローラーをインストールしてください (ソフトウェア RAID、ハードウェア RAID に関する意見も多々あります - Mitsuhiro Yoshida)。
    • RAID-1 に設定して、オペレーティングシステムとスワップを同じドライブに設定してください。
    • Moodle、ウェブサーバおよびデータベースを RAID-5 に設定した別々のディスクに入れてください。
  • 遅延時間およびスループットを改善するため、「ギガビットイーサーネット」を使用してください。あなたがウェブサーバおよびデータベースサーバを分離して運用している場合、これは特に大切です。
  • あなたの「ネットワークカード」の設定を確認してください。バッファおよびトランスミット/レシーブディスクリプタを増やすこと (これはプロセッサとメモリのオーバヘッドとのバランスをとってください)、TCP チェックサムの計算を OS ではなくカードにオフロードすることでパフォーマンスを改善することができます。

オペレーティングシステム

  • あなたはサーバの「オペレーティングシステム」として、Linux (お勧めです) 、Unix ベースの OS、Windows、Mac OS X を使用することができます。シェルインターフェースのみで構成された場合、一般的に *nix オペレーティングシステムは同じタスクの処理に関して、Mac OS X または Windows サーバよりも少ないメモリを必要とします。さらに Linux にはライセンス料が発生しませんが、あなたが他のオペレーティングシステムを日常的に使用している場合、Linux コマンド等の習得に大きな学習曲線を描くことになります。サーバが SMP で動作している大量のプロセッサを持っている場合、高度にチューニングされた Solaris のような OS の使用を考えてみてください。
  • 最適化するには、OS および「サーバ製造元の使用説明書」を確認してください。
    • Linux に関しては、Linux Performance Team サイトをご覧ください。
    • Linux では hdparm コマンドでハードディスクの状態を詳細に調べることができます。例) hdparm -m16 -d1 でマルチセクタの read/write を有効にできます。DMA マウントのディスクには、async および noatime オプションを付けてください。
    • Windows サーバでは、ネットワークアプリケーションを最適化してください (コントロールパネル >> ネットワーク接続 >> LAN 接続 >> プロパティ >> Microsoft ネットワーク用ファイルとプリンタ共有 >> 最適化)。最適化に関するドキュメントは、Microsoft TechNetサイトでご覧いただけます。

ウェブサーバパフォーマンス

Firefox および firebug エクステンションをインストールすることで、それぞれのページコンポーネントのロードに掛かる時間を観察することができます。また、Yslow エクステンションでは、ウェブサイトの迅速なロードするため、あなたのページを Yahoo 14 rules (video) に関して調査します。

PHP パフォーマンス

  • CPU ロードを軽減するAPC (推奨)、PHPAXcache または eAccelerator のような「PHP アクセラレータ」の使用を強くお勧めします。(あなたの PHP バージョンで適切に動作する PHP アクセラレータを注意深く選定してください。Turck MMCache の開発およびメンテナンスは中止され、PHP 5 で問題が発生しますので注意してください)。PHP ページのキャッシュを TMPFS ファイルシステムに置いてください。
  • CGI としてインストールするより「Apache/IIS ISAPI モジュール」としてインストールする方が、PHP のパフォーマンスは良くなります。
  • ご利用の Moodle が 1.7 より以前のバージョンの場合、php.ini の「memory_limit」を確認して、16M に減らしてください (詳細はこのフォーラムディスカッションをご覧ください)。Moodle 1.7 以降では、「memory_limit」を 40M に設定することをお勧めします。

Apache パフォーマンス

  • MaxClients ディレクティブを正しく設定してください。 次の公式を使用して設定値を計算してください (予備のメモリ領域を残すため、利用可能なメモリの 80% を使用します):
MaxClients = 利用可能な合計メモリ * 80% / Apache プロセスの最大メモリ使用量
Apache プロセスのメモリ使用量は通常 10MB です。一般的な経験則として、MaxClients の値を取得するには、利用可能なメモリ容量を 10MB で割ってください。Apache プロセスの最大メモリ使用量を見つけるには、シェルコマンドの結果より値を読み取ってください:
#ps -ylC httpd --sort:rss
警告: MaxClients の値をあなたの利用可能なメモリ容量より大きくする誘惑に負けないでください。サーバが実際の RAM より多くを消費し、ディスクスワップが発生し始めることになります。
  • 必要なメモリを減らすため、Apache がロードするモジュール数を httpd.conf ファイルで必要最小限に減らすことを考慮してください。
  • 最新バージョンの Apache を使用してください - Apache 2 ではメモリ使用量を大幅に減らすため、メモリモデルが改善されています。
  • Unix/Linux システムでは、httpd.conf の「MaxRequestsPerChild」を 20~30 くらいに下げることをお考えください (この設定をさらに低くすると、fork のオーバーヘッドがメリットを上回ることになります)。
  • 負荷が高いサーバでは、「KeepAlive Off」に設定する (Moodle ページにリソースまたはアップロードされたイメージへのリンクが設定されていない場合のみ)、または「KeepAliveTimeout」を 2~5 の間に下げることをお考えください。デフォルトは 15 (秒) です - この値を高くすると、それに応じてサーバプロセスがアイドルコネクションを待つことになります。あなたのユーザがページのダウンロードにかかる時間を観察することで、より正確な「KeepAliveTimeout」の値を取得できます。さらなる作業プロセス/スレッドの起動により、オーバーヘッドが発生しますので、 KeepAlive の設定を変更した後は CPU 利用を監視してください。
  • 「KeepAlive Off」の代わりの方法として、HTML ファイルとイメージをキャッシュするため、Moodle サーバの前に Reverse Proxy server を設定することをお考えください。
  • あなたが「.htaccess」ファイルを使用していない場合、.htaccess ルックアップを避けるため、AllowOverride を「AllowOverride None」にしてください。
  • content-negotiation (コンテンツ・ネゴシエーション) を避けるため、DirectoryIndex を正しく設定してください。以下、運用サーバの設定例です:
DirectoryIndex index.php index.html index.htm
  • あなたがサーバを開発作業に使用している場合を除いて、ExtendedStatus Off を設定および mod_info と同様に mod_status を無効にしてください。
  • DNS 待ち時間を減らすため、HostnamesLookups Off (デフォルト) のままにしてください。
  • TimeOut の値を 30~60 (秒) に減らすことを考慮してください。
  • Options Multiviews によるディレクトリスキャンを避けるため、Options ディレクティブを設定してください。ディスク I/O を減らすには:
Options -Indexes FollowSymLinks
  • キャッシング - Apache では、イメージのような各種ページ要素をローカルメモリでキャッシュして、ページがリクエストされるたびに Apache に要求しないようブラウザに指示することができます。この設定をどのようにするか OS 間で若干異なりますが、以下2つの基本的なステップがあります:
  1. mod_expires をインストールおよび有効化してください - 詳細はドキュメントまたは man ページをご覧ください。
  2. 次のコードをバーチャルサーバの config ファイル内の root ディレクトリ用 <directory> セクションに追加してください (または、AllowOverrides が有効の場合、.htaccess ファイル):
<IfModule mod_expires.c>
 ExpiresActive On
 ExpiresDefault "access plus 1 seconds"
 ExpiresByType text/html "access plus 1 seconds"
 ExpiresByType image/gif "access plus 1 week"
 ExpiresByType image/jpeg "access plus 1 week"
 ExpiresByType image/png "access plus 1 week"
 ExpiresByType text/css "access plus 1 week"
 ExpiresByType text/javascript "access plus 1 week"
 ExpiresByType application/x-javascript "access plus 1 week"
 ExpiresByType text/xml "access plus 1 seconds"
</IfModule>

この設定の効果は、動的に変わる HTML および XML を除いて、すべてをキャッシュに保持します。このようにして、ロードタイムを大幅に減らすことが可能です。どのくらいの頻度であなたのイメージが変更されるか等を考慮しながら、キャッシュタイムを調整してください。

詳細は次のサイトをご覧ください: www.metaskills.net

代わりに「ライトウェイトウェブサーバ (lighttpd)」lighttpd と fastCGI モードの PHP を使用することにより、ウェブサーバのパフォーマンスを向上させることができます。Apache に比べて Lighttpd では、メモリー消費を抑えることができます。fastCGI と lighttpd を合わせたプロセスより、1つの Apache プロセスの方がより多くの RAM を必要とします。注意: Lighttpd は相対的に設定および管理が難しく、Apache より多くの時間を要します。

IIS パフォーマンス

IISパフォーマンス - 下記の場所にあるすべてのレジストリを変更してください:

HKLM\SYSTEM\CurrentControlSet\Services\Inetinfo\Parameters\
  • KeepAliveTimeoutと同等な設定項目は「ListenBackLog」です (IIS - レジストリの場所: HKLM\ SYSTEM\ CurrentControlSet\ Services\ Inetinfo\ Parameters)。この値を 2~5 の間に設定してください。
  • 「MemCacheSize」の値を搭載メモリ総量 (MB) に合わせてください。IIS ではファイルキャッシュに使用します (デフォルトは利用可能メモリの 50% です)。
  • 「MaxCachedFileSize」の値をファイルキャッシュに保存されるファイルキャッシュの最大サイズ (単位: バイト) に合わせてください。デフォルトは、262,144 (256K) です。
  • キャッシュ内のオブジェクトがメモリに保持される時間 (ミリセカンド) を変更するため、「ObjectCacheTTL」と呼ばれる DWORD を新しく作成してください。デフォルトは、30,000 ミリセカンド (30秒) です。

データベースパフォーマンス

Moodle にはADOdbパフォーマンスモニタから重要なデータベースパフォーマンス統計を表示するスクリプトが含まれています。下記の例のようにスクリプトを実行してください:

http://www.mymoodle.com/admin/dbperformance.php

あなたのデータベースサーバのチューニングおよび改善のため、表示されるデータを利用してください。

MySQL パフォーマンス

次の内容は、あなたの MySQL パフォーマンスを向上させるための my.cnf (Windowsではmy.ini) 特有の設定です。現在の設定値は次のコマンドで確認することができます。

SHOW STATUS;
SHOW VARIABLES; 

重要: MySQL サーバの設定を変更する前に、あなたのデータベースを必ずバックアップしてください。my.cnf を少しでも変更した後は、mysqld をリスタートしてください。

  • 「query_cache_type = 1」 にすることで「query cache」を有効にしてください。ほとんどの Moodle インストールでは、query_cache_size を 36M に、query_cache_min_res_unit を 2K にしてください。データベースの更新が頻繁でない場合、「query cache」はパフォーマンスを改善します。
  • 「table cache」を正しく設定してください。Moodle 1.6では table_cache = 159に、Moodle 1.7では table_cache = 170 に設定してください。あなたがインストールしたモジュールおよびプラグインの数に応じてこの値は変わりますので注意してください。下記のMySQL命令文を実行して、あなたのサーバの値を調査してください。表示される行 (rows) を確認して、その値を table_cache に設定してください。
mysql>SELECT table_name FROM information_schema.tables WHERE table_schema='yourmoodledbname';
  • 「thread cache」を正しく設定してください。この式であなたの「スレッドキャッシュ利用 (thread cache utilization)」ができるだけ100%に近くなるように調整してください:
thread cache utilization (%) = (threads_created / connections) * 100
  • 「key buffer」はMoodle の SELECT クエリーのアクセススピードを改善することができます。適切な値は、インデックスファイル (myi) のサイズに依存します。Moodle 1.6 またはそれ以上 (追加モジュールおよびプラグインなし) での推奨値は、key_buffer_size = 32M です。100 リクエストごとにデータベースを1回読むのが理想的です。あなたの Moodle に値が適切になるよう、次の式に当てはまる key_buffer_size の値を調整してください:
key_read / key_read_requests < 0.01
key_write / key_write_requests <= 1.0
  • あなたのユーザが「Too many connections」メッセージを見なくても良いように、「maximum number of connections」を設定してください。この設定は総メモリ使用量に影響を及ぼしますので注意してください。一般的に MySQL コネクションは、1000分の何秒か続きます。ですから非常に負荷の高いサーバだとしても、200 以上の値を設定することは普通ではありません。
  • 「高負荷活動」に対する設定。あなたが多くの小テストを含む Moodle を使用して、パフォーマンスに関する問題がある場合、「back_log」の設定値を増やしてみてください (threads_connected の値をモニタして確認してください - この値が上がらないはずです。)。
  • 毎週および Moodle のアップグレード後に MySQL テーブルを最適化してください。活動モジュールの大きなデータ削除後、あなたの MySQL テーブルを最適化することをお勧めします (例 学期または年度の終了後)。この作業により、確実にインデックスファイルが最新のものになります。最初にデータベースをバックアップして、次のコマンドを実行してください:
mysql>CHECK TABLE mdl_tablename;
mysql>OPTIMIZE TABLE mdl_tablename;
一般的にチェックする Moodle のテーブルは、mdl_course_sections、mdl_forum_posts、mdl_log および mdl_sessions (dbsessionsを使用する場合) です。 REPAIR TABLE コマンドを使用して、テーブルのエラーを修正してください (詳細はMySQL manual をご覧ください)。
  • インデックスデータファイルをメンテナンスしてください。毎月またはそれくらいの頻度でMySQLサーバを停止して、次の myisamchk コマンドを実行することをお勧めします。
#myisamchk -a -S /pathtomysql/data/moodledir/*.MYI
警告: MySQL データベースプロセス (mysqld) を必ず停止してください。停止しない場合、データを喪失するリスクがあります。
  • ディスクに一時的に保存されるテーブル数を減らしてください。この設定値は、created_tmp_disk_tables で調べることができます。この値が相対的 ( >5% ) に大きい場合、小さくなるよう tmp_table_size の設定値を変更してください。この設定変更は、RAM の使用に影響を及ぼしますので注意してください。
  • Moodleの テーブルでは、「MyISAM」フォーマットを使用します。パフォーマンスの向上に繋がらないため、「InnoDB」は無効にしてください。あなたが InnoDB を使用する必要がある場合のみ、すべての Moodle テーブルを変換してください。次の innodb スクリプトで Moodle テーブルを変換することができます:
http://www.mymoodle.com/admin/innodb.php

他のデータベースパフォーマンスリンク

Moodle 管理設定

  • Moodle 1.7以降のバージョンでは、あなたのサーバのキャッシュタイプ (サイト管理 > サーバ > パフォーマンス > キャッシュタイプ) を有効にしてください。ここでは、いくつかのオプションを利用することができます。
  • あなたがeAcceleratorまたはmmemcachedをインストールしていない場合、「internal」(レコード/内部キャッシュを使用する - 次の箇条書きをご覧ください) を選択してください。
  • あなたが単一のサーバを使用して、eAcceleratorを共有メモリサポートでコンパイルしている場合、キャッシュタイプの「eaccelerator」オプションを選択してください。
  • あなたが共有していないmemcachedサーバを使用している場合、キャッシュタイプに「memcached」を選択した後、「memcachedホスト (memcachedhosts)」にカンマ区切りのサーバIPアドレス一覧を入力してください。
  • レコード/内部キャッシュを有効にする: サイト管理 > サーバ > パフォーマンス > レコードキャッシュ = True。キャッシュに割り当てる最大メモリ容量を「内部キャッシュ最大値 (intcachemax)」のテキストボックス内で設定してください。この設定により、データベースエンジンキャッシュを使用せずに、データベースレコードの一次キャッシュを有効にすることができます。例) MySQL/PostgreSQLキャッシュ。詳細なディスカッションは、このTrackerエントリをご覧ください。
  • 言語キャッシュを有効にしてください。
  • 大きなログファイルは、時間と共に全体的なパフォーマンスを落とす要因となります。ブラウザに表示されるページのスピードが徐々に遅くなってきた場合、「サイト管理 > サーバ > クリーンアップ」で「ログの保存期間」を減らしてください。
  • Moodleでオペレーティングシステムの「zip/unzip」コマンドを使用する場合、PHPベースのzipライブラリを使用するより、パフォーマンスを大きく改善することができます。「管理 > 設定 > 詳細設定」で適切なパスを入力してください。同様に「du」のパスを設定することで、Moodleにおけるディレクトリコンテンツのリスティングスピードを改善することができます。
  • セキュアウェブコネクション (httpではなくhttps) を使用することで、ウェブサーバおよびクライアントに対して、過大な負荷がかかります。特にキャッシングが効果的に使用されないため、リクエスト数が劇的に増加してしまいます。この理由から、Moodleのすべてのページに対してhttpsを使用することは、お勧めできません。Moodleの設定でログイン画面のみhttpsを有効にすることはできます。
  • あなたの「フィルタ」設定を確認してください。あまりにも多くのフィルタを有効にしていると、特にスペックの低いシステムに深刻な影響を与えます。有効にしているフィルタ数は、それぞれのページ表示に関して、明らかに遅くなるという直接的な影響を及ぼします。
  • 「テキストキャッシュ」を有効にしてください。必要な場合以外は「「すべての文字をフィルタする」を有効にしないでください。この設定に疑問がある場合、それぞれの設定を変更して、どのように処理時間に影響を及ぼすか確認してください。
  • あなたのサーバの「アンチウイルス」設定を確認してください。これらはセキュリティホールを突かれることを防ぐ「オンデマンド」スキャナーとして有用ですが、ページコンテンツ (word、pptファイル等) をスキャニングすることでパフォーマンスに影響を及ぼす可能性があります。
  • コースページの表示にパフォーマンスの問題がある場合、管理画面の「モジュール設定」で、リソースの設定を確認してください。リソースの設定で「filterexternalpages」を有効にするとコースページの表示が遅くなります。パフォーマンスを上げるには「No」に設定してください。
  • あなたの「フォーラム設定」を確認してください。パフォーマンスを改善するには、「forum_trackreadposts = No」および「forum_usermarksread = Yes」 (この設定はユーザのフォーラム使用の利便性に関して影響を与えます) にしてください。また、利用者が少ない時間帯に、古い投稿を「既読」テーブルからクリアする時刻 (forum_cleanreadtime) を設定してください。
  • あなたが本当に必要とする以外、データベースセッションを使用しないでください。どちらかといえば、ディスクセッションの方がはるかに速い傾向にあります。

各 Moodle モジュールのパフォーマンス

Moodle の活動モジュールフィルタおよび他のプラグインは有効/無効にすることができます。必須ではありませんが、必要に応じていくつかの機能 (チャット等) を無効にしてください。各モジュールに関するメモ:

  • チャットモジュールは、メインサーバに対して頻繁にHTTPリクエストする点において、大食いだと言われています。管理 >> 設定 >> モジュール管理 >> チャット で、chat_normal_updatemode を「Streame」にするか、chat_method を「Chat サーバデーモン」にすることでサーバに対する負荷を軽減することができます。
  • 55名の学生が同時に小テストを使用する場合のパフォーマンスに関する報告 - 英語
  • Moodle の cron タスクは、スクリプト cron.php を呼ぶことで動作します。このスクリプトが HTTP 経由で呼ばれた場合 (例 wget または curl を使用)、規模の大きな Moodle サイトでは大量のメモリを消費します。php コマンドを使用して直接呼ばれた場合 (例 php -f /path/to/moodle/directory/admin/cron.php)、大幅に効率が改善されます。

関連情報

moodle.org には、パフォーマンスに関して数多くのディスカッションが投稿されています。以下、いくつかの興味深い、(潜在的に) 有用な投稿です: