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

提供:MoodleDocs
移動先:案内検索
89行目: 89行目:
* インデックスデータファイルをメンテナンスしてください。毎月またはそれくらいの期間でMySQLサーバを停止して、次のmyisamchkコマンドを実行することをお勧めします。
* インデックスデータファイルをメンテナンスしてください。毎月またはそれくらいの期間でMySQLサーバを停止して、次のmyisamchkコマンドを実行することをお勧めします。
  #myisamchk -a -S /pathtomysql/data/moodledir/*.MYI
  #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.
:'''警告''': MySQLデータベースプロセス (mysqld) を必ず停止してください。停止しない場合、データを喪失するリスクがあります。
* 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.
* 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:
* 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:

2007年4月14日 (土) 02:17時点における版

作成中です - 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パフォーマンス - 下記の場所にあるすべてのレジストリを変更してください:
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) を必ず停止してください。停止しない場合、データを喪失するリスクがあります。
  • 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」にしてください。設定が疑わしい場合、パフォーマンスのプロファイリングを行って、あなたの変更内容がプロセスタイムにどのように影響するのか確認してください。

関連情報