「パフォーマンス」の版間の差分
Mitsuhiro Yoshida (トーク | 投稿記録) |
Mitsuhiro Yoshida (トーク | 投稿記録) |
||
109行目: | 109行目: | ||
* あなたの「フィルタ」設定を確認してください。あまりにも多くのフィルタを有効にしていると、特にスペックの低いシステムに深刻な影響を与えます。有効にしているフィルタの数は、それぞれのページ表示に関して、明らかに遅くなるという直接的な影響を及ぼします。 | * あなたの「フィルタ」設定を確認してください。あまりにも多くのフィルタを有効にしていると、特にスペックの低いシステムに深刻な影響を与えます。有効にしているフィルタの数は、それぞれのページ表示に関して、明らかに遅くなるという直接的な影響を及ぼします。 | ||
* 「テキストキャッシュ」を有効にしてください。必要な場合以外は「「すべての文字をフィルタする」を有効にしないでください。この設定に疑問がある場合は、それぞれの設定を変更して、どのようjに処理時間に影響を及ぼすか確認してください。 | * 「テキストキャッシュ」を有効にしてください。必要な場合以外は「「すべての文字をフィルタする」を有効にしないでください。この設定に疑問がある場合は、それぞれの設定を変更して、どのようjに処理時間に影響を及ぼすか確認してください。 | ||
* | * あなたのサーバの「アンチウイルス」設定を確認してください。これらはセキュリティホールを突かれることを防ぐ「オンデマンド」スキャナーとして有用ですが、ページコンテンツ (word、pptファイル等) をスキャニングすることでパフォーマンスに影響を及ぼす可能性があります。 | ||
* 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. | * 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. | * 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. |
2007年4月20日 (金) 00:57時点における版
作成中です - Mitsuhiro Yoshida 2007年4月14日 (土) 22:15 (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 (推奨)、PHPA、Xcacheまたは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) を必ず停止してください。停止しない場合、データを喪失するリスクがあります。
- ディスクに一時的に保存されるテーブル数を減らしてください。この設定値は、created_tmp_disk_tablesで調べることができます。この値が相対的 ( >5% ) に大きい場合、小さくなるようtmp_table_sizeの設定値を変更してください。この設定変更は、RAMの使用に影響を及ぼしますので注意してください。
- Moodleのテーブルは、MyISAMフォーマットを使用します。パフォーマンスの向上に繋がらないため、「InnoDB」は無効にしてください。あなたがInnoDBを使用する必要がある場合、すべてのMoodleテーブルを変換してください。次のinnodbスクリプトで変換することができます:
http://www.mymoodle.com/admin/innodb.php
他のデータベースパフォーマンスリンク
- memcachedのような分散型キャッシングシステムの使用を考えてください。memcachedの場合、セキュリティ機能はありませんので、ファイアーウォールの背後で使用してください。
- PostgresSQLの使用を考えてください。詳細は、PostgreSQLを使う理由をご覧ください。
- データベース接続持続時間を増やしてみてください。
- General advice on tuning MySQL parameters (advice from the MySQL manual)
Moodle管理設定
- language cache を有効にしてください。
- 大きなログファイルは、時間と共に全体的なパフォーマンスを落とす要因となります。ブラウザに表示されるページのスピードが徐々に遅くなってきた場合は、管理画面で「ログの保存期間」を減らしてください。
- Moodle 1.7またはそれ以上のバージョンでは、「レコードキャッシュ」を有効にしてください。「レコードキャッシュ」は一次キャッシュとして動作し、データベースアクセスパフォーマンスを改善することができます。
- Moodleでオペレーティングシステムの「zip/unzip」コマンドを使用することで、PHPベースのzipライブラリを使用するより、パフォーマンスを大きく改善することができます。管理 >> 設定 >> 詳細設定で適切なパスを入力してください。同様に「du」のパスを設定することで、Moodleにおけるディレクトリコンテンツのリスティングスピードを改善することができます。
- セキュアウェブコネクション ('httpではなくhttps) を使用することで、ウェブサーバおよびクライアントに対して、過大な負荷がかかります。特にキャッシングが効果的に使用されないため、リクエスト数が劇的に増加してしまいます。この理由から、Moodleのすべてのページに対してhttpsを使用することは、お勧めできません。Moodleの設定でログイン画面のみhttpsを有効にすることはできます。
- あなたの「フィルタ」設定を確認してください。あまりにも多くのフィルタを有効にしていると、特にスペックの低いシステムに深刻な影響を与えます。有効にしているフィルタの数は、それぞれのページ表示に関して、明らかに遅くなるという直接的な影響を及ぼします。
- 「テキストキャッシュ」を有効にしてください。必要な場合以外は「「すべての文字をフィルタする」を有効にしないでください。この設定に疑問がある場合は、それぞれの設定を変更して、どのようjに処理時間に影響を及ぼすか確認してください。
- あなたのサーバの「アンチウイルス」設定を確認してください。これらはセキュリティホールを突かれることを防ぐ「オンデマンド」スキャナーとして有用ですが、ページコンテンツ (word、pptファイル等) をスキャニングすることでパフォーマンスに影響を及ぼす可能性があります。
- 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)、効率は大幅に改善されます。
関連情報
- Using Moodleフォーラム サーバおよびパフォーマンス (英文)