Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

【Apache】prefork・worker・eventの違いを解説!メモリ使用量を抑えるMPMの選び方

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

Apacheがリクエスト(アクセス)を処理する際、裏側でどのようにプロセスやスレッドを管理するかを決める仕組みをMPM(マルチプロセッシングモジュール)と呼びます。

このMPMの選択を誤ると、アクセスが集中した際にサーバーの物理メモリが枯渇し、最悪の場合はサーバー全体がダウンしてしまう原因になります。

まずは、それぞれの仕組みとメモリ使用量の違いを一覧表で比較してみましょう。

スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】

📊 3大MPMのメモリ使用量・特徴比較

MPMモデル 管理モデル メモリ使用量 最大の特徴
prefork

マルチプロセス


(シングルスレッド)

📈 多い 各接続用に完全に独立したプロセスを生成するため、オーバーヘッドが大きくメモリを大量に消費する。
worker

マルチプロセス


(マルチスレッド)

⚖️ 中程度 1つのプロセス内で複数の「スレッド」を共有して処理するため、preforkより大幅にメモリ効率が良い。
event

マルチプロセス


(イベント駆動スレッド)

📉 少ない workerをさらに改良。Keep-Alive(接続維持)時のスレッド無駄遣いを防ぎ、リソース消費を最小化する。

🔍 各MPMの詳細メリット・デメリット

それぞれのMPMが、具体的にどのように動き、どのような長所・短所があるのかを深掘りします。

1. prefork(伝統と抜群の安定性)

「1リクエスト=1プロセス」で処理する、最も伝統的なスタイルです。

  • Pros(メリット):

    • 高い安全・安定性: 各プロセスが完全に独立しているため、仮に1つのリクエスト処理で不具合(プログラムのクラッシュなど)が起きても、他のプロセスや接続に一切影響を与えません。

    • スレッドセーフ(複数スレッドから同時に触っても安全な設計)になっていない古いPHPモジュール(mod_phpなど)を動かす場合は、このpreforkが必須になります。

  • Cons(デメリット):

    • メモリ消費が非常に大きい: アクセスごとに「重たいプロセス」を丸ごと立ち上げるため、同時アクセスが増えると一気にメモリを食いつぶします。高トラフィックサイトには不向きです。

2. worker(軽量なスレッド活用型)

1つの大きな「プロセス」の中で、軽量な「スレッド」をたくさん立ち上げて処理する方式です。

  • Pros(メリット):

    • 高いメモリ効率: メモリ空間の大部分をプロセス内で共有できるため、preforkに比べてメモリ消費量を劇的に抑えられます。

    • 静的コンテンツ(画像やHTMLファイルなど)がメインのサイトであれば、非常に高速に処理できます。

  • Cons(デメリット):

    • Keep-Aliveによるスレッド占有: 通信を高速化するための「Keep-Alive(接続を維持する仕組み)」が有効な場合、何もデータを送受信していない待機時間中もスレッドが占有されたままになり、リソースが無駄になりやすいです。

3. event(高トラフィック対応の最新版)

workerをベースに、Keep-Aliveの無駄を徹底的に排除した現代のデフォルト方式です。

  • Pros(メリット):

    • 極めて高いメモリ・リソース効率: Keep-Aliveによる接続維持(待機状態)を「専用の監視スレッド」が非同期で一括管理します。実際にデータのやり取り(イベント)が発生した時だけスレッドを割り当てるため、スレッドを無駄に遊ばせることがありません。

    • 大量の同時アクセスが集中する高トラフィックサイトでも、省メモリで軽快に動作します。

  • Cons(デメリット):

    • workerと同様にマルチスレッド動作であるため、スレッドセーフではないPHPモジュールなどを直接動作させるのには不向きです(※現在主流の「PHP-FPM」などを組み合わせれば何の問題もなく動作します)。

💡 あなたのサーバーにはどれを導入すべき?(選択のヒント)

どのMPMを採用するかは、サーバーの目的や構成によってシンプルに選ぶことができます。

  • 安定性を最優先し、昔ながらの方式でPHPモジュール(mod_php)を直に動かしたい

    👉 prefork が最適(ただし、メモリ容量は潤沢に用意してください)

  • 静的なコンテンツが多く、メモリ効率を重視したい

    👉 worker がおすすめ

  • アクセス数が非常に多く、今風の高速で省メモリな環境(PHP-FPM構成など)を作りたい

    👉 event がベスト(現代のLinuxサーバー構築における最適解です)

お使いのシステム構成に合わせて最適なMPMを選択し、無駄のないサクサク動くWebサーバーを目指しましょう!

タイトルとURLをコピーしました