リソース過剰使用の問題を解決する方法

すべてのウェブホスティングアカウントには、サーバーに組み込まれたカーネルレベルの技術であるCloudLinux LVE(Lightweight Virtual Environment)によってリソース制限が適用されています。これらの制限は、すべてのウェブサイトが割り当てられたリソースを公平かつ平等に利用できるようにチェックします。

これらのリソースには、CPU、物理メモリ、エントリープロセス、アクティブプロセス数が含まれます。これらのリソースの許容値やソフト・ハードバースト値は、当社のAcceptable Use Policyでご確認いただけます。

アカウントがこれらの制限に継続的に達すると、リソース過剰使用と呼ばれます。これにより、サイトのパフォーマンス低下、エラーメッセージ、またはタイムアウトが発生する可能性があります。

注意:ホスティングアカウント内の1つのドメインがリソース制限を超えると、同じアカウントでホストされている他のすべてのドメインにも影響が及びます。なぜなら、同じリソースプールを共有しているためです。

この記事では、リソース過剰使用の特定と修正方法を解説します。

現在のリソース使用状況の確認

cPanelでホスティングアカウントのリソース使用状況を確認するには、右側に表示される統計セクションをご覧ください:

注意:ホスティングアカウントのリソース制限については、Spaceshipアカウント内でも通知を受け取ります。ただし、より詳細な情報はcPanelアカウントの「Hosting Usage」メニューをご参照ください。

また、当社のAcceptable Use Policy違反は「Hosting Manager」メニュー>該当ホスティングパッケージ横の「Manage」をクリック>Hosting usageセクション>Reports logサブセクションに一覧表示されます。

主要なリソース指標と、それらがサイトのパフォーマンスにどのように影響するかを分解して説明します:

CPU使用率

CPU使用率は、割り当てられたCPUパワーが任意の時点でどれだけ使われているかを示します。これはホスティングアカウントの総容量に対するパーセンテージで表示されます。

CPU使用率が100%に達すると、アカウントは割り当てられたすべてのリソースを消費していることになります。その結果、新しいプロセスは既存のプロセスが終了するまで遅延(スリープ状態)します。これにより顕著な遅延が発生し、極端な場合はサイトがタイムアウトすることもあります。

仮想メモリ使用量

これは、LVE(Lightweight Virtual Environment)内でプロセスが要求できるメモリ量を指します。

プロセスがメモリを割り当てようとすると、CloudLinuxは仮想メモリの総使用量が設定された制限内に収まっているかを確認します。制限を超えると、新しいメモリ割り当てがブロックされ、通常はプロセスが失敗します。

物理メモリ使用量(RAM)

物理メモリは、アカウントに割り当てられた実際のRAMを表します。仮想メモリ(スワップファイルなどのディスクストレージを使用することが多い)とは異なり、物理メモリはリアルタイムでアクティブなタスクを処理します。

たとえば、大きな投稿を公開すると、一時的にすべての物理メモリが消費される場合があります。これにより一時的な遅延が発生することがありますが、タスクが完了すれば通常は使用量が元に戻ります。

物理メモリ使用量が上限に達すると、ウェブサイトでPHPエラーが発生する場合があります。まれにCloudLinuxのエラーページが表示されることもありますが、これらの問題は通常短時間で、使用量が閾値を下回ると自動的に解消されます。

エントリープロセス

エントリープロセスは、アカウントに同時に入るプロセス数を表します。ユーザーによって実行される各PHPまたはCGIスクリプトがエントリープロセスを開始します。これは「許可される訪問者数」と誤解されがちですが、プロセスは通常非常に速く実行・完了するため、複数のユーザーがいても上限に達することはほとんどありません。ただし、サイトに急激なトラフィックが発生した場合は例外です。

プロセス数

この指標には、アカウントによって生成されたすべてのプロセスが含まれます。PHP、SSH、cronジョブだけでなく、全体的なアクティビティを反映するより広い制限です。

高負荷時でも、この数値は通常低く保たれます。ほとんどの非PHPプロセスは短時間で終了するためです。

I/O使用量(入出力)

I/O使用量は、アカウントが生成するディスクアクティビティの量を測定します。バックアップやファイルのアップロードなど、データの読み書きを伴う操作はすべてこの制限にカウントされます。

すべてのユーザーに公平なパフォーマンスを提供するため、各アカウントにはディスク速度の上限があります。この上限に達すると、プロセスは引き続き実行されますが、より遅くなります。

ほとんどの場合、I/O使用量は気になりませんが、大規模なサイトバックアップの生成など、ディスク集中的な作業を行う場合は例外です。


アカウントで実行中のアクティブプロセスの定義

ホスティングアカウントが特定のリソース制限に達した場合、最初のステップは過剰使用の原因となっているプロセスを特定することです。

SSH経由

問題が数分以上続く場合は、スパイク時にアカウントで実行中のアクティブプロセスをSSHで確認できます:

  1. ホスティングアカウントでSSHが有効になっているか、「Manage shell」cPanelメニューで接続状況を確認してください。SSHが無効の場合は、この記事の手順に従って有効化してください。

  2. cPanelのターミナルメニューに移動し、アカウントで実行中のアクティブプロセスを特定するために次のいずれかのコマンドを実行します:

    - ps faux
    - top -c

    その後、ホスティングアカウントのリソース(CPU、仮想メモリなど)を最も多く使用しているプロセスの一覧が表示されます。タスク数やそのステータス(アクティブ、スリープ、停止中など)もコマンド出力に表示されます。

    top -c」コマンドの出力例と、その正しい読み方についてご案内します:


    この種の出力の読み方について、簡単なガイドをご紹介します:

    1. 1行目 - 現在時刻、最後の起動からの経過時間、ログイン中のユーザーセッション、平均システム負荷(直近1分、5分、15分)が表示されます。

    2. 2行目 - ホスティングアカウント内のすべてのプロセス(実行中、スリープ、停止中、ゾンビ(終了したが正しく削除されていないもの))がリストされます。

    3. 3行目 - CPUの使用状況(%)が表示されます。内訳は以下の通りです:

      • us = ユーザープロセス

      • sy = システムプロセス

      • ni = 優先度アップグレード(nice)

      • wa = I/O完了待ち時間

      • hi = ハードウェア割り込み

      • si = ソフトウェア割り込み

      • st = ハイパーバイザータスクによって仮想マシンから奪われた時間

    4. 4行目と5行目 - メモリ使用量(RAM):合計、使用中、空き、バッファが表示されます。

    5. 次の行は現在のプロセスの詳細を示します:

      • PID - プロセスID

      • USER - プロセスの所有者であるcPanelユーザー

      • PR - プロセスの優先度

      • NI - プロセスのnice値

      • VIRT - プロセスが使用する仮想メモリ

      • RES - プロセスが使用する物理メモリ

      • SHR - プロセスが使用する共有メモリ

      • S - プロセスの状態(S - スリープ、D - 割り込み不可スリープ、R - 実行中、T - 停止中、Z - ゾンビ)

      • %CPU - このプロセスが使用するCPUの割合

      • %MEM - このプロセスが使用する物理メモリの割合

      • TIME+ - プロセスが使用した合計CPU時間

      • COMMAND - プロセス名


  3. ハッキングが疑われる場合にプロセスを終了する前に、cPanelアカウントのCronジョブメニューで既存のcronジョブを確認してください。不審なエントリや不明なcronジョブがあれば、危険なスクリプトの実行を防ぐために削除するのが最善です。

    問題の原因となっている特定のプロセスを特定したら、 kill -9 PID「ターミナル」メニューでSSHコマンドを実行して終了できます。ここでPIDは前のステップで取得したプロセスIDです。

    必須のシステムプロセス以外をすべて終了するには、次のコマンドを使用できます:

    ps aux | grep -v 'bin/bash' | awk '{ print $2 }' | grep -v PID | xargs kill -9

  4. 次に、現在実行中のMySQLプロセスを特定します。

    cPanelアカウント全体(1)またはMySQLユーザーごと(2)にMySQLプロセスを確認できます。

    そのためには、cPanelのターミナルを開き、次のいずれかのコマンドを実行してください:

    ホスティングアカウント全体のMySQLプロセスを確認するには:
    mysql -u $CPANEL_USER -p -e "SHOW PROCESSLIST;"

    MySQLユーザーごとのMySQLプロセスを確認するには:
    mysql -u $MYSQL_USER -p -e "SHOW PROCESSLIST;"

    「CPANEL_USER」をcPanelユーザー名に、「$MYSQL_USER」を各MySQLデータベースユーザー名に置き換えて、それぞれのプロセスを確認してください。

    その後、cPanelアカウントのパスワード(1)または特定のデータベースユーザーのパスワード(2)を入力します:


  5. 最後のステップは、特定のデータベースユーザーのMySQLプロセスを終了することです。これは当社のサポートチームのみが実行できます。お気軽にご連絡いただければ、喜んでお手伝いします。

「リソース使用状況」メニュー経由

問題が数秒間のみ発生する場合は、原因となるプロセスを特定するのが難しいことがあります。短時間のためデータが記録されないためです。

ただし、cPanelのリソース使用状況メニューで過去の傾向をいつでも確認できます。これにより、パターンを特定したり、どのリソースが上限に近づいているかを判断できます:


頻繁に上限に達しているリソースについてのメッセージは、メニューを開いた直後>「ダッシュボード」セクションの下に、正確な制限値とともに表示されます:

メニューの現在の使用状況セクションで、期間ドロップダウンから期間を選択し、その期間中のアカウントリソースの使用状況を確認できます:


選択すると、詳細な統計を示す図や表が表示されます:



上記の表に記載されている値の簡単なガイド:

  • CPU – CPU上限

  • vMEM/vM – 仮想メモリ上限

  • pMEM/pM – 物理メモリ上限

  • EP – エントリープロセス

  • nPROC/nP – プロセス数

  • IO – 入出力上限

  • A – 平均使用量

  • L – アカウントに設定された上限

  • F – 失敗

cPanelでアクティブプロセスを終了する際の潜在的な問題

cPanelでアクティブプロセスを停止することでパフォーマンス問題が解決する場合もありますが、慎重に行ってください。新たな問題を引き起こす可能性があります。以下は注意すべき主なポイントです:

  • データ整合性:プロセスを強制終了するとデータ整合性が損なわれる可能性があります。特に、アカウント内でデータの書き込みや更新を伴うプロセスの場合は注意が必要です。終了前にプロセスが重要なデータベース操作に関連していないか確認するのが最善です。

  • 不完全なトランザクション:操作中にプロセスを停止すると、トランザクションが未完了のまま残り、データベースの状態に問題が生じることがあります。極端な場合、データの破損や損失につながることもあります。

  • サービスの中断:MySQL関連のプロセスなど、一部のプロセスはコアサービスにとって非常に重要です。これらを終了すると一時的なサービス停止やウェブサイトの機能に影響を及ぼすことがあります。

  • 未保存の変更:設定や構成を管理するプロセスが変更保存前に終了すると、機能やアプリケーションの動作に影響を与える場合があります。

  • リソース割り当て:プロセスを終了することでシステムリソースが解放される場合もありますが、高使用率の根本原因の解決にはなりません。問題の再発を防ぐには、より深い分析が必要です。

  • アプリケーションの安定性:ウェブアプリに関連するプロセスを中断すると、不安定になることがあります。プロセスの仕組みを理解した上で対応することが重要です。

  • ログと監視:一部のプロセスはログ記録やシステム監視に関与しています。これらを終了するとこれらの機能が中断される場合があるため、重要なログや監視ツールが引き続き動作するようにしてください。

    リソース過剰使用や悪意のある活動が疑われるなどの緊急時には、リスクを承知の上でプロセスを終了する必要がある場合もありますが、常に影響を十分に考慮してから行動してください。

プロセス終了リスクを減らすためのベストプラクティス

  • データをバックアップする:特にデータベースを操作する際など、大きな変更を加える前には必ずバックアップを作成してください。

  • 可能な限り制御されたシャットダウンを使用する:データ損失や破損のリスクを減らすため、プロセスは徐々にシャットダウンするようにしてください。

  • 悪意のあるコンポーネントを無効化する:ウェブサイトの特定の部分(例:プラグインやテーマ)が悪意のあるプロセスを生成していると疑われる場合は、さらなる被害を防ぐためにすぐに無効化してください。不明な場合は、専門家に相談して疑わしい活動を確認しましょう。

  • メンテナンスモードを利用する:一時的にサイトをメンテナンスモードにすることで、特定のプロセスが自動的に再作成されているかどうかを確認できます。

  • 継続的な監視:プロセスを終了した後は、システムの挙動を注意深く観察し、予期しない問題にすぐ対応できるようにしてください。

問題のあるプロセスを特定した後のリソース使用量削減方法

どのプロセスがアカウントのリソース制限に達している原因か特定できたら、以下の一般的な方法で使用量を減らしてみてください:

  • トラフィックの急増:アカウントでアクティブなプロセスが多すぎた時期を確認するには、リソース使用状況メニュー > スナップショット > HTTPクエリタブを開いてください:


    出力に多数のリクエスト(例:index.phpページへのリクエスト)が表示されている場合、これはウェブサイトへの高トラフィック(訪問者やボットによるものなど)が原因かもしれません。

    cPanelのAwstatsVisitorsメニューで詳細な訪問者分析を確認し、正確な原因を特定してください。トラフィックの急増がリソース使用量増加の原因となる場合があります。訪問者数が着実に増加しており、なおかつ制限に達している場合は、現在のホスティングプランの見直しやアップグレードを検討してください。

    また、統計セクション(Awstatsメニュー内)では、高いCPU使用率の原因を特定できます。ドメイン名の横にある「表示」ボタンをクリックして確認してください:


    注意:Awstatsメニューのデータはリアルタイムで更新されず、月次統計のみが利用可能です。統計データがいつ更新されたかを必ず確認し、情報がご自身のケースに関連しているかを確かめてください。この情報は「最終更新」行で確認できます。

    アクセスすると、ウェブサイトの各要素がどれだけ帯域幅を消費しているかの詳細な統計が表示されます:

    • 不明なボット: このようなトラフィックが予想されない場合、robots.txtファイルでボットをブロックしたり(例: Googlebot用にレート制限)、.htaccessファイルやUser-Agent文字列で強制的にブロックすることができます。

      注意: これらの変更はウェブサイトのSEOに影響する可能性があります。実施するかどうか迷う場合は、SEOの専門家に相談することをおすすめします。

    • 画像:1つの画像へのリクエストが多い場合、その画像に対してDDoSまたは自己DoS攻撃が行われている可能性があります。

    • ページ:ウェブサイトのページやそこに配置された商品もDDoS攻撃の影響を受けることがあります。

    • ファイル

    • ダウンロードファイルなど

  • 最近のウェブサイトの変更:リソース使用量の問題に初めて直面した場合は、ウェブサイトに加えた最近の更新や変更を確認してください。これらが負荷増加の原因となっている可能性があります。

  • 新しいプラグインやテーマ:最近新しいプラグインやテーマをインストールした場合は、それを無効にして、少なくとも10分間サイトのパフォーマンスを監視してください。

    また、GTmetrixレポート>Waterfallタブで読み込みが遅いプラグインを確認できます。

    注意:変更がすぐに反映されない場合があります。正確な結果を得るために、最大1時間ウェブサイトの挙動を監視することをおすすめします。

  • ウェブサイトの最適化Google PageSpeed Insightsなどのツールを使ってウェブサイトのパフォーマンスを最適化しましょう。

    さらに、以下のプラグインはリソース使用量やウェブサイト全体のパフォーマンスを監視するのに役立ちます。これはウェブサイト内部のボトルネックを特定する際に非常に有用です:

それでもリソースの問題が解決しない場合は、サポートチームまでライブチャットまたはメールでご連絡ください。問題の特定と解決をお手伝いします。

有効なメールアドレスが必要です