パフォーマンス

提供:MoodleDocs
移動先:案内検索

作成中です - Mitsuhiro Yoshida 2007年3月14日 (水) 23:19 (CDT)

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

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

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

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

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

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

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

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

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

ハードウェア設定

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

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

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

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

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

  • PHPパフォーマンス
    • CPUロードを軽減するAPC (推奨)、PHPAXcacheまたはeAcceleratorのような「PHPアクセラレータ」の使用を強くお勧めします。PHPページのキャッシュをTMPFSファイルシステムに置いてください。
    • CGIとしてインストールするより「Apache/IIS ISAPIモジュール」としてインストールする方が、PHPのパフォーマンスは良くなります。
    • ご利用のMoodleが1.7より以前のバージョンの場合、php.iniの「memory_limit」を確認して、16Mに減らしてください (詳細はこのフォーラムディスカッションをご覧ください)。Moodle 1.7以降では、「memory_limit」を32Mに設定することをお勧めします。
  • Apacheパフォーマンス
    • 使用メモリーを減らすために、httpd.confファイルでロードする「モジュール数」を可能な限り減らすことを考慮してください。また、さらに使用メモリーを減らすことのできる最新バージョンのApache 2の使用もお考えください。
    • Unix/Linuxシステムでは、httpd.confの「MaxRequestsPerChild」を20~30くらいに下げることをお考えください。この設定をさらに低くすると、forkのオーバーヘッドがメリットを上回ることになります。
    • 負荷が高いサーバでは、「KeepAliveTimeout」を2から5の間に下げることをお考えください。デフォルトは15 (秒) です - この値を高くすると、それに応じてサーバプロセスがアイドルコネクションを待つことになります。
    • 代わりに「ライトウェイトウェブサーバ」lighttpdとfastCGIモードのPHPを使用することにより、ウェブサーバのパフォーマンスを向上させることができます。Apacheに比べてLighttpdでは、メモリーの消費を抑えることができます。fastCGIとlighttpdを合わせたプロセスより、1つのapacheプロセスの方がより多くのRAMを必要とします。注意: Lighttpdは相対的に設定および管理が難しく、Apacheよりも多くの時間を必要とします。
  • IISパフォーマンス - all alter this location in the registry:
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) です。
  • Change the MaxCachedFileSize to adjust the maximum size of a file cached in the file cache in bytes. Default is 262,144 (256K).
  • Create a new DWORD called ObjectCacheTTL to change the length of time (in milliseconds) that objects in the cache are held in memory. Default is 30,000 milliseconds (30 seconds).

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

Moodle contains a script which will display some key database performance statistics from the ADOdb performance monitor. Run the script in your browser as in the following example:

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

Use the data displayed as a guide to tune and improve the performance of your database server.

MySQLパフォーマンス

The following are MySQL specific settings which can be adjusted for better performance in your my.cnf (my.ini in Windows). To see the current values use these commands

SHOW STATUS;
SHOW VARIABLES; 

Important: You must make backups of your database before attempting to change any MySQL server configuration. After any change to the my.cnf, restart mysqld.

  • Enable the query cache with query_cache_type = 1. For most Moodle installs, set the query_cache_size to 36M and query_cache_min_res_unit to 2K. The query cache will improve performance if you are doing few updates on the database.
  • Set the table cache correctly. For Moodle 1.6 set table_cache = 159, and for Moodle 1.7 set table_cache = 170. Note that this figure will change depending on the number of modules and plugins you have installed. Find the number for your server by executing the mysql statement below. Look at the number of rows printed and set table_cache to this value.
mysql>SELECT table_name FROM information_schema.tables WHERE table_schema='yourmoodledbname';
  • Set the thread cache correctly. Adjust the value so that your thread cache utilization is as close to 100% as possible by this formula:
thread cache utilization (%) = (threads_created / connections) * 100
  • The key buffer can improve the access speed to Moodle's SELECT queries. The correct size depends on the size of the index files (.myi) and in Moodle 1.6 or later (without any additional modules and plugins), the recommendation for this value is key_buffer_size = 32M. Ideally you want the database to be reading once from the disk for every 100 requests so monitor that the value is suitable for your install by adjusting the value of key_buffer_size so that the following formulas are true:
key_read / key_read_requests < 0.01
key_write / key_write_requests <= 1.0
  • Set the maximum number of connections so that your users will not see a "Too many connections" message. Be careful that this may have an impact on the total memory used. MySQL connections usually last for milliseconds, so it is unusual even for a heavily loaded server for this value to be over 200.
  • Manage high burst activity. If your Moodle install uses a lot of quizzes and you are experiencing performance problems (check by monitoring the value of threads_connected - it should not be rising) consider increasing the value of back_log.
  • Optimize your tables weekly and after upgrading Moodle. It is good practice to also optimize your tables after performing a large data deletion exercise, e.g. at the end of your semester or academic year. This will ensure that index files are up to date. Backup your database first and then use:
mysql>CHECK TABLE mdl_tablename;
mysql>OPTIMIZE TABLE mdl_tablename;
The common tables in Moodle to check are mdl_course_sections, mdl_forum_posts, mdl_log and mdl_sessions (if using dbsessions). Any errors need to be corrected using REPAIR TABLE (see the MySQL manual).
  • Maintain the key distribution. Every month or so it is a good idea to stop the mysql server and run these myisamchk commands.
#myisamchk -a -S /pathtomysql/data/moodledir/*.MYI
Warning: You must stop the mysql database process (mysqld) before running any myisamchk command. If you do not, you risk data loss.
  • Reduce the number of temporary tables saved to disk. Check this with the created_tmp_disk_tables value. If this is relatively large (>5%) increase tmp_table_size until you see a reduction. Note that this will have an impact on RAM usage.
  • Moodle's tables are in the MyISAM format, so turn InnoDB off as there is no performance gain. If you must use InnoDB, you'll have to convert all of Moodle's tables. To do this run the innodb script:
http://www.mymoodle.com/admin/innodb.php

Other database performance links

Moodle管理設定

  • Enable the language cache.
  • Large log files can cause overall performance to degrade over time. If you observe that the site has gradually got slower loading pages in the browser, reduce your Log life time setting (Admin/Configuration/Variables/Maintenance).
  • In Moodle 1.7 or later, enable the record cache. This will act as a primary cache and improve database access performance.
  • 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.)
  • 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.
  • 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).
  • 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.
  • 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.

各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)、効率は大幅に改善されます。
  • 多くのフィルタを有効にする場合、サーバの負荷 (特にスペックの低いサーバ) に重大な影響を及ぼします。有効にされているフィルタの数は、あなたのサイトのレスポンスに関して直接影響を、すなわち各ページの表示に要する時間に関して影響を及ぼします。パフォーマンスを上げるため、管理 >> 設定 >> フィルタ の「テキストキャッシュ保存時間」を「No」以外に設定して、特に必要がない場合は「すべての文字をフィルタする」を「No」にしてください。設定が疑わしい場合、パフォーマンスのプロファイリングを行って、あなたの変更内容がプロセスタイムにどのように影響するのか確認してください。

関連情報