1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.tr.xsl"?>
<!-- English Revision: 421174 -->
<!-- =====================================================
Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
Reviewed by: Orhan Berent <berent belgeler.org>
========================================================== -->
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<modulesynopsis metafile="worker.xml.meta">
<name>worker</name>
<description>Çok evreli ve çok süreçli melez bir HTTP sunucusu oluşturan çok
süreçlilik modülü.</description>
<status>MPM</status>
<sourcefile>worker.c</sourcefile>
<identifier>mpm_worker_module</identifier>
<summary>
<p>Bu çok süreçlilik modülü (MPM) hem çok süreçli hem de çok evreli
olabilen melez bir sunucu oluşturur. İstekleri sunmak için evreleri
kullanması sebebiyle çok süreçli bir sunucudan daha az sistem kaynağı
harcayarak daha çok isteğe hizmet sunabilir. Bununla birlikte, herbiri
çok sayıda evreye sahip çok sayıda süreci canlı tutarak bir çok süreçli
sunucu kadar kararlı olur.</p>
<p>Bu MPM’i denetim altında tutmakta kullanılan en önemli yönergeler, her
çocuk süreç için konuşlandırılacak evre sayısını belirleyen <directive
module="mpm_common">ThreadsPerChild</directive> yönergesi ile devreye
sokulacak toplam evre sayısının azamisini belirleyen <directive
module="mpm_common">MaxClients</directive> yönergesidir.</p>
</summary>
<seealso><a href="../bind.html">Apache’nin kullandığı adres ve portların
ayarlanması</a></seealso>
<section id="how-it-works"><title>Nasıl çalışır?</title>
<p>Çocuk süreçleri devreye almaktan tek bir süreç (ana süreç) sorumludur.
Her çocuk süreç <directive module="mpm_common"
>ThreadsPerChild</directive> yönergesinde belirtilen sayıda evre
konuşlandırır. Bunlardan ayrı olarak, bir dinleyici evre bağlantıları
dinleyip gelenleri işlenmek üzere bu sunucu evrelerinden birine
aktarır.</p>
<p>Apache daima, gelen isteklere hizmet sunmaya hazır <dfn>yedek</dfn>
veya boştaki sunucu evrelerinden oluşan bir havuzu canlı tutmaya
çalışır. Bu suretle, istemcilere isteklerinin sunulması için yeni çocuk
süreçlerin çatallanmasını, dolayısıyla yeni evrelerin
konuşlandırılmasını beklemek gerekmez. Başlangıçta çalıştırılacak çocuk
süreçlerin sayısı <directive
module="mpm_common">StartServers</directive> yönergesinde belirtilir.
Apache, çalışma süresi boyunca <directive module="mpm_common"
>MinSpareThreads</directive> ve <directive module="mpm_common"
>MaxSpareThreads</directive> yönergeleri ile belirtilen sınırlar
dahilinde kalmak üzere gerektiğinde süreçleri öldürerek gerektiğinde
yenilerini devreye alarak tüm süreçlerdeki toplam evre sayısını sabit
tutmaya çalışır. Bu işlem kendiliğinden çok iyi yürüdüğünden bu
yönergelere öntanımlı değerlerinden farklı değerlerin atanması nadiren
gerekli olur. Aynı anda hizmet sunulabilecek istemcilerin sayısı (yani,
tüm süreçlerin toplam evre sayısı) <directive module="mpm_common"
>MaxClients</directive> yönergesi ile belirlenir. Etkin çocuk
süreçlerin sayısı ise <directive module="mpm_common"
>MaxClients</directive> yönergesindeki değerin <directive
module="mpm_common" >ThreadsPerChild</directive> yönergesindeki değere
bölünmesi ile elde edilir.</p>
<p>Bu iki yönerge aynı anda etkin olabilecek çocuk süreçlerin ve her
çocuk süreçteki sunucu evreleri sayısının üst sınırını belirler ve bu
sınır sadece ana sunucu tamamen durdurulup yeniden başlatılarak
değiştirilebilir. <directive module="mpm_common"
>ServerLimit</directive> yönergesinin değeri etkin çocuk süreç
sayısının üst sınırı olup <directive module="mpm_common"
>MaxClients</directive> yönergesindeki değerin <directive
module="mpm_common" >ThreadsPerChild</directive> yönergesindeki değere
bölünmesi ile elde değere eşit veya bundan küçük olması gerekir.
<directive module="mpm_common">ThreadLimit</directive> yönergesinin
değeri ise sunucu evreleri sayısının üst sınırını belirler ve <directive
module="mpm_common">ThreadsPerChild</directive> yönergesindeki değerden
büyük veya ona eşit olması gerekir. Eğer bu yönergelere öntanımlı
değerlerinden farklı bir değer atanacaksa bu atamaların diğer
<module>worker</module> yönergelerinden önce yapılması gerekir.</p>
<p>Sonlandırma sırasında etkin çocuk süreçlere ek olarak mevcut istemci
bağlantılarını işleme sokmaya çalışan tek bir sunucu evresinden başka
fazladan bir çocuk süreç etkin kalabileceği gibi sonlandırılacak süreç
sayısının en fazla <directive module="mpm_common"
>MaxClients</directive> olması gerekirse de gerçekte sayı bundan küçük
olabilir. Şöyle bir işlemle tek bir çocuk sürecin sonlandırılması
iptal edilerek bu gibi durumlara karşı önlem alınabilir:</p>
<ul>
<li><directive module="mpm_common"> MaxRequestsPerChild</directive>
yönergesinin değeri sıfır yapılır.</li>
<li><directive module="mpm_common">MaxSpareThreads</directive> ve
<directive module="mpm_common">MaxClients</directive> yönergelerinin
değerleri birbirine eşitlenir.</li>
</ul>
<p><module>worker</module> modülünün öntanımlı süreç-evre yapılandırması
genelde şöyledir:</p>
<example>
ServerLimit 16<br />
StartServers 2<br />
MaxClients 150<br />
MinSpareThreads 25<br />
MaxSpareThreads 75<br />
ThreadsPerChild 25
</example>
<p>Unix altında 80. portu dinleyebilmek için ana sürecin root tarafından
çalıştırılmış olması gerekirse de çocuk süreçler ve evreler Apache
tarafından daha az yetkili bir kullanıcının aidiyetinde
çalıştırılırlar. Apache’nin çocuk süreçlerinin kullanıcı ve gruplarını
ayarlamak için User ve Group yönergeleri kullanılır. Çocuk süreçlerin
sunacakları içeriği okumaya yetkili olmaları gerekir, fakat bu yetkinin
mümkün olduğunca kısıtlı tutulmasına çalışılmalıdır. Bundan başka,
<program>suexec</program> kullanılmadığı takdirde, bu yönergeler CGI
betikleri tarafından miras alınacak yetkili kullanıcı ve grubu da
ayarlarlar.</p>
<p><directive module="mpm_common">MaxRequestsPerChild</directive>
yönergesi ana sunucunun eski süreçleri öldürüp yenilerini oluşturmayı
ne kadar sıklıkla yapacağını denetler.</p>
</section>
<directivesynopsis location="mpm_common"><name>AcceptMutex</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>CoreDumpDirectory</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>EnableExceptionHook</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>Group</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>PidFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>Listen</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ListenBacklog</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>LockFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxClients</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxMemFree</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxRequestsPerChild</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MaxSpareThreads</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>MinSpareThreads</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ScoreBoardFile</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ReceiveBufferSize</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>SendBufferSize</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ServerLimit</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>StartServers</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ThreadLimit</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>ThreadsPerChild</name>
</directivesynopsis>
<directivesynopsis location="mpm_common"><name>User</name>
</directivesynopsis>
</modulesynopsis>
|