<?xml version="1.0" encoding="iso-2022-jp"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      --><title>worker - Apache HTTP サーバ</title><link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /><link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /><link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link href="../images/favicon.ico" rel="shortcut icon" /></head><body><div id="page-header"><p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p><p class="apache">Apache HTTP サーバ バージョン 2.0</p><img alt="" src="../images/feather.gif" /></div><div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div><div id="path"><a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="http://httpd.apache.org/docs-project/">ドキュメンテーション</a> &gt; <a href="../">バージョン 2.0</a> &gt; <a href="./">モジュール</a></div><div id="page-content"><div id="preamble"><h1>Apache モジュール worker</h1><table class="module"><tr><th><a href="module-dict.html#Description">説明:
                  </a></th><td>マルチスレッドとマルチプロセスのハイブリッド型
ウェブサーバを実装したマルチプロセッシングモジュール</td></tr><tr><th><a href="module-dict.html#Status">ステータス:
                  </a></th><td>MPM</td></tr><tr><th><a href="module-dict.html#ModuleIdentifier">モジュール識別子:
                  </a></th><td>mpm_worker_module</td></tr><tr><th><a href="module-dict.html#SourceFile">ソースファイル:
                  </a></th><td>worker.c</td></tr></table><h3>概要</h3>
    <p>このマルチプロセッシングモジュール (MPM) 
    は、マルチスレッドとマルチプロセスのハイブリッド型サーバを
    実装しています。リクエストの応答にスレッドを使うと、
    プロセスベースのサーバよりも少ないシステム資源で、
    多くのリクエストに応答することができます。
    さらに、多くのスレッドを持った複数のプロセスを維持することで、
    プロセスベースのサーバの持つ安定性を保持しています。</p>

    <p>この MPM を制御するのに使われる最も重要なディレクティブは、
    <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> と
    <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> です。
    <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> は
    各子プロセスで用意されるスレッド数を制御して、
    <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code> は
    起動されるスレッドの総数の最大値を制限します。</p>

</div><div id="quickview"><h3 class="directives">ディレクティブ</h3><ul id="toc"><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#group">Group</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listen">Listen</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#lockfile">LockFile</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxclients">MaxClients</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#pidfile">PidFile</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#serverlimit">ServerLimit</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#startservers">StartServers</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadlimit">ThreadLimit</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li><li><img alt="" src="../images/right.gif" /> <a href="mpm_common.html#user">User</a></li></ul><h3>トピック</h3><ul id="topics"><li><img alt="" src="../images/down.gif" /> 動作方法</li></ul><h3>参照</h3><ul class="seealso"><li><a href="../bind.html">Apache 
の使用するアドレスとポートの設定</a></li></ul></div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div><div class="section"><h2>動作方法</h2>
    <p>プロセスは決まった数のスレッドを持ちます。
    負荷への適応はプロセスの数を増減により対応します。</p>

    <p>一つの制御用プロセスが子プロセスを起動します。
    子プロセスは
    <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>
    ディレクティブで指定された一定数のスレッドを作ります。
    それから、個々のスレッドがコネクションに対して listen
    して、しかるべき時に動作します。</p>

    <p>Apache は<em>スペアの</em>、つまりアイドルなサーバスレッドの
    プールを常に維持していて、それらは入ってくるリクエストに
    答えられるように待機しています。
    このようにして、クライアントはリクエストの応答が得られるようになるために
    新しいスレッドやプロセスが生成されるのを
    待たなくてもよいようになっています。
    起動初期時のプロセス総数は、
    <code class="directive"><a href="../mod/mpm_common.html#startservers">StartServers</a></code>
    ディレクティブで設定されます。その後の稼働中に、
    Apache は全プロセスのアイドルスレッドの合計数を見積もって、
    <code class="directive"><a href="../mod/mpm_common.html#minsparethreads">MinSpareThreads</a></code> と
    <code class="directive"><a href="../mod/mpm_common.html#maxsparethreads">MaxSpareThreads</a></code>
    で指定された範囲の中にこの数が収まるように fork したり
    kill したりします。この操作は非常に自律的なので、
    これらのディレクティブをデフォルト値から変更する必要は
    めったにないでしょう。
    同時に応答することのできるクライアント数の最大数
    (つまり全プロセス中の総スレッド数の最大値) は
    <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
    ディレクティブで決定されていて、
    一方で起動することのできるプロセス数の最大値は
    <code class="directive"><a href="../mod/mpm_common.html#serverlimit">ServerLimit</a></code>
    ディレクティブで設定されています。
    <code class="directive"><a href="../mod/mpm_common.html#serverlimit">ServerLimit</a></code> と
    <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> との積は、
    <code class="directive"><a href="../mod/mpm_common.html#maxclients">MaxClients</a></code>
    と等しいかそれより大きい必要があります。</p>
    
    <p><code class="module"><a href="../mod/worker.html">worker</a></code> MPM の典型的なプロセス・スレッド制御の
    設定では、次のようになります。</p>

<div class="example"><pre>StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75
ThreadsPerChild     25
ServerLimit         16</pre></div>

    <p>通常 Unix では親プロセスは 80 番ポートにバインドするために
    root で起動されますが、子プロセスやスレッドは
    もっと低い権限のユーザで Apache によって起動されます。
    <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> と
    <code class="directive"><a href="../mod/mpm_common.html#group">Group</a></code> ディレクティブは
    Apache の子プロセスの権限を設定するのに用いられます。
    子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
    可能な限り必要最小限の権限のみを持っているようにするべきです。
    さらに、<a href="../suexec.html">suexec</a>
    が使用されていない限り、これらのディレクティブは
    CGI スクリプトで継承される権限も設定します。</p>

    <p><code class="directive"><a href="../mod/mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></code>
    は、古いプロセスを停止して新しいプロセスを起動することによって、
    どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。</p>
</div></div><div id="footer"><p class="apache">Maintained by the <a href="http://httpd.apache.org/docs-project/">Apache HTTP Server Documentation Project</a></p><p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div></body></html>