]> granicus.if.org Git - apache/blob - docs/manual/mod/worker.xml.ja
rebuild translation metafiles
[apache] / docs / manual / mod / worker.xml.ja
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
4 <!-- English Revision: 431460:924467 (outdated) -->
5
6 <!--
7  Licensed to the Apache Software Foundation (ASF) under one or more
8  contributor license agreements.  See the NOTICE file distributed with
9  this work for additional information regarding copyright ownership.
10  The ASF licenses this file to You under the Apache License, Version 2.0
11  (the "License"); you may not use this file except in compliance with
12  the License.  You may obtain a copy of the License at
13
14      http://www.apache.org/licenses/LICENSE-2.0
15
16  Unless required by applicable law or agreed to in writing, software
17  distributed under the License is distributed on an "AS IS" BASIS,
18  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  See the License for the specific language governing permissions and
20  limitations under the License.
21 -->
22
23 <modulesynopsis metafile="worker.xml.meta">
24
25 <name>worker</name>
26 <description>マルチスレッドとマルチプロセスのハイブリッド型
27 ウェブサーバを実装したマルチプロセッシングモジュール</description>
28 <status>MPM</status>
29 <sourcefile>worker.c</sourcefile>
30 <identifier>mpm_worker_module</identifier>
31
32 <summary>
33     <p>このマルチプロセッシングモジュール (MPM) 
34     は、マルチスレッドとマルチプロセスのハイブリッド型サーバを
35     実装しています。リクエストの応答にスレッドを使うと、
36     プロセスベースのサーバよりも少ないシステム資源で、
37     多くのリクエストに応答することができます。
38     それにもかかわらず、多くのスレッドを持った複数のプロセスを
39     維持することで、
40     プロセスベースのサーバの持つ安定性も保持しています。</p>
41
42     <p>この MPM を制御するのに使われる最も重要なディレクティブは、
43     <directive module="mpm_common">ThreadsPerChild</directive> と
44     <directive module="mpm_common">MaxClients</directive> です。
45     <directive module="mpm_common">ThreadsPerChild</directive> は
46     各子プロセスで用意されるスレッド数を制御して、
47     <directive module="mpm_common">MaxClients</directive> は
48     起動されるスレッドの総数の最大値を制限します。</p>
49 </summary>
50 <seealso><a href="../bind.html">Apache 
51 の使用するアドレスとポートの設定</a></seealso>
52
53 <section id="how-it-works"><title>動作方法</title>
54     <p>一つの制御用プロセス (親) が子プロセスを起動します。
55     子プロセスは
56     <directive module="mpm_common">ThreadsPerChild</directive>
57     ディレクティブで指定された一定数のサーバスレッドと接続を
58     listen するスレッドを一つ作ります。
59     Listener スレッドは接続が来たときにサーバプロセスに渡します。</p>
60
61     <p>Apache は<dfn>スペアの</dfn>、つまりアイドルなサーバスレッドの
62     プールを常に維持していて、それらは入ってくるリクエストに
63     答えられるように待機しています。
64     このようにして、クライアントはリクエストの応答が得られるようになるために
65     新しいスレッドやプロセスが生成されるのを
66     待たなくてもよいようになっています。
67     起動初期時のプロセス総数は、
68     <directive module="mpm_common">StartServers</directive>
69     ディレクティブで設定されます。稼働中に、
70     Apache は全プロセスのアイドルスレッドの合計数を見積もって、
71     <directive module="mpm_common">MinSpareThreads</directive> と
72     <directive module="mpm_common">MaxSpareThreads</directive>
73     で指定された範囲の中にこの数が収まるように fork したり
74     kill したりします。この操作は非常に自律的なので、
75     これらのディレクティブをデフォルト値から変更する必要は
76     めったにないでしょう。
77     同時に応答することのできるクライアント数の最大数
78     (つまり全プロセス中の総スレッド数の最大値) は
79     <directive module="mpm_common">MaxClients</directive>
80     ディレクティブで決定されます。
81     活動中の子プロセス数の最大値は
82     <directive module="mpm_common">MaxClients</directive> を
83     <directive module="mpm_common">ThreadsPerChild</directive> で割った
84     ものになります。</p>
85     
86     <p>活動中の子プロセスの数と子プロセス中のサーバスレッドの数の越えられない
87     上限を設定するディレクティブが二つあります。これらはサーバを
88     完全に停止して、再起動することでしか変更することはできません。
89     <directive module="mpm_common">ServerLimit
90     </directive> は活動中の子プロセスの越えられない上限を設定し、
91     <directive module="mpm_common">MaxClients</directive> ディレクティブ
92     の値を <directive module="mpm_common">
93     ThreadsPerChild</directive> の値で割った値以上である
94     必要があります。<directive module="mpm_common">ThreadLimit</directive> は
95     サーバスレッドの越えられない上限で、<directive 
96     module="mpm_common">ThreadsPerChild</directive> ディレクティブの
97     値以上である必要があります。</p>
98
99     <p>活動中の子プロセス群に加えて、少なくとも一つのサーバスレッドが
100     既存のクライアントからの接続を扱っている終了しようとしている
101     子プロセスがある可能性があります。終了中のプロセスは <directive 
102     module="mpm_common">MaxClients</directive> で指定された数まで
103     存在できますが、実際に期待される数はずっと少なくなります。この
104     振舞いは各子プロセスを終了させないようにすることで回避できます。
105     これは以下の様にして実現できます。</p>
106      
107     <ul>
108       <li><directive module="mpm_common">
109       MaxRequestsPerChild</directive> の値を 0 に設定する</li>
110
111       <li><directive module="mpm_common">
112       MaxSpareThreads</directive> の値を
113       <directive module="mpm_common">MaxClients</directive>
114       と同じ値にする</li>
115     </ul>
116
117     <p><module>worker</module> MPM の典型的なプロセス・スレッド制御の
118     設定では、次のようになります。</p>
119
120     <example>
121       ServerLimit         16<br />
122       StartServers         2<br />
123       MaxClients         150<br />
124       MinSpareThreads     25<br />
125       MaxSpareThreads     75<br />
126       ThreadsPerChild     25
127     </example>
128
129     <p>通常 Unix では親プロセスは 80 番ポートにバインドするために
130     <code>root</code> で起動されますが、子プロセスやスレッドは
131     もっと低い権限のユーザで Apache によって起動されます。
132     <directive module="mpm_common">User</directive> と
133     <directive module="mpm_common">Group</directive> ディレクティブは
134     Apache の子プロセスの権限を設定するのに用いられます。
135     子プロセスはクライアントに送るコンテンツ全てを読めないといけませんが、
136     可能な限り必要最小限の権限のみを持っているようにするべきです。
137     さらに、<program>suexec</program>
138     が使用されていない限り、これらのディレクティブは
139     CGI スクリプトで継承される権限も設定します。</p>
140
141     <p><directive module="mpm_common">MaxRequestsPerChild</directive>
142     は、古いプロセスを停止して新しいプロセスを起動することによって、
143     どの程度の頻度でサーバがプロセスをリサイクルするかを制御します。</p>
144 </section>
145
146 <directivesynopsis location="mpm_common"><name>AcceptMutex</name>
147 </directivesynopsis>
148 <directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
149 </directivesynopsis>
150 <directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
151 </directivesynopsis>
152 <directivesynopsis location="mpm_common"><name>Group</name>
153 </directivesynopsis>
154 <directivesynopsis location="mpm_common"><name>PidFile</name>
155 </directivesynopsis>
156 <directivesynopsis location="mpm_common"><name>Listen</name>
157 </directivesynopsis>
158 <directivesynopsis location="mpm_common"><name>ListenBacklog</name>
159 </directivesynopsis>
160 <directivesynopsis location="mpm_common"><name>LockFile</name>
161 </directivesynopsis>
162 <directivesynopsis location="mpm_common"><name>MaxClients</name>
163 </directivesynopsis>
164 <directivesynopsis location="mpm_common"><name>MaxMemFree</name>
165 </directivesynopsis>
166 <directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
167 </directivesynopsis>
168 <directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
169 </directivesynopsis>
170 <directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
171 </directivesynopsis>
172 <directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
173 </directivesynopsis>
174 <directivesynopsis location="mpm_common"><name>SendBufferSize</name>
175 </directivesynopsis>
176 <directivesynopsis location="mpm_common"><name>ReceiveBufferSize</name>
177 </directivesynopsis>
178 <directivesynopsis location="mpm_common"><name>ServerLimit</name>
179 </directivesynopsis>
180 <directivesynopsis location="mpm_common"><name>StartServers</name>
181 </directivesynopsis>
182 <directivesynopsis location="mpm_common"><name>ThreadLimit</name>
183 </directivesynopsis>
184 <directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
185 </directivesynopsis>
186 <directivesynopsis location="mpm_common"><name>ThreadStackSize</name>
187 </directivesynopsis>
188 <directivesynopsis location="mpm_common"><name>User</name>
189 </directivesynopsis>
190
191 </modulesynopsis>