]> granicus.if.org Git - apache/blob - docs/manual/misc/perf-tuning.xml.ko
update transformation
[apache] / docs / manual / misc / perf-tuning.xml.ko
1 <?xml version="1.0" encoding="EUC-KR" ?>
2 <!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.ko.xsl"?>
4 <!-- English Revision: 1.17 -->
5
6 <!--
7  Copyright 2004 The Apache Software Foundation
8
9  Licensed under the Apache License, Version 2.0 (the "License");
10  you may not use this file except in compliance with the License.
11  You may obtain a copy of the License at
12
13      http://www.apache.org/licenses/LICENSE-2.0
14
15  Unless required by applicable law or agreed to in writing, software
16  distributed under the License is distributed on an "AS IS" BASIS,
17  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  See the License for the specific language governing permissions and
19  limitations under the License.
20 -->
21
22 <manualpage metafile="perf-tuning.xml.meta">
23   <parentdocument href="./">Miscellaneous Documentation</parentdocument>
24
25   <title>¾ÆÆÄÄ¡ ¼º´ÉÇâ»ó</title>
26
27   <summary>
28
29     <p>¾ÆÆÄÄ¡ 2.0Àº ±â´É°ú Æ÷Æð¡´É¼º°ú ¼º´ÉÀÇ ±ÕÇüÀÌ ¸Âµµ·Ï
30     ¼³°èÇÑ ¹ü¿ë À¥¼­¹öÀÌ´Ù. º¥Ä¡¸¶Å© ±â·ÏÀ» ¼¼¿ì±âÀ§ÇØ ¼³°èÇÏÁö
31     ¾Ê¾ÒÁö¸¸ ¾ÆÆÄÄ¡ 2.0Àº ½ÇÁ¦ ¸¹Àº °æ¿ì ³ôÀº ¼º´ÉÀ» ³½´Ù.</p>
32
33     <p>¾ÆÆÄÄ¡ 1.3°ú ºñ±³Çؼ­ 2.0 ¹öÀüÀº Ã³¸®·®°ú È®À强(scalability)À»
34     ³ôÀ̱âÀ§ÇØ ¸¹Àº ÃÖÀûÈ­¸¦ Çß´Ù. ±âº»°ªÀ¸·Î ´ëºÎºÐ ÃÖÀûÈ­ÇÑ
35     °ªÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª ÄÄÆÄÀϽàȤÀº ½ÇÇà½Ã ¼³Á¤ÀÌ ¼º´É¿¡
36     Å« ¿µÇâÀ» ÁÙ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­´Â ¾ÆÆÄÄ¡ 2.0ÀÇ ¼º´ÉÀ» Çâ»óÇϱâÀ§ÇØ
37     ¼­¹ö °ü¸®ÀÚ°¡ ¼³Á¤ÇÒ ¼ö Àִ ¿É¼ÇÀ» ¼³¸íÇÑ´Ù. ¾î¶² ¼³Á¤
38     ¿É¼ÇÀº À¥¼­¹ö°¡ Çϵå¿þ¾î¿Í ¿î¿µÃ¼Á¦ÀÇ ±â´ÉÀ» ´õ Àß È°¿ëÇϵµ·Ï
39     Çϴ ¹Ý¸é, ¾î¶² ¿É¼ÇÀº ¼Óµµ¸¦ À§ÇØ ±â´ÉÀ» Èñ»ýÇÑ´Ù.</p>
40
41   </summary>
42
43   <section id="hardware">
44
45     <title>Çϵå¿þ¾î¿Í ¿î¿µÃ¼Á¦¿¡ ´ëÇؼ­</title>
46
47     <p>À¥¼­¹ö ¼º´É¿¡ °¡Àå Å« ¿µÇâÀ» Áִ °ÍÀº ¸Þ¸ð¸®´Ù. ½º¿ÒÀº
48     ¿äû´ç Áö¿¬½Ã°£À» »ç¿ëÀÚ°¡ "ÃæºÐÈ÷ ºü¸£´Ù°í" »ý°¢ÇÏÁö ¸øÇÏ°Ô
49     ´Ã¸®±â¶§¹®¿¡ À¥¼­¹ö´Â ½º¿ÒÀ» Çϸ頾ȵȴÙ. ´À·ÁÁö¸é »ç¿ëÀÚ´Â
50     Á¤ÁöÇÏ°í ´Ù½Ã Á¢¼ÓÇÏ¿© ºÎÇÏ°¡ °è¼Ó Áõ°¡ÇÑ´Ù. <directive
51     module="mpm_common">MaxClients</directive> Áö½Ã¾î¸¦ Á¶ÀýÇÏ¿©
52     À¥¼­¹ö°¡ ½º¿ÒÀ» ÇÒ Á¤µµ·Î ¸¹Àº ÀÚ½ÄÀ» ¸¸µéÁö¾Êµµ·Ï Çؾß
53     ÇÑ´Ù. ¹æ¹ýÀº °£´ÜÇÏ´Ù: <code>top</code>°ú °°Àº µµ±¸¿¡¼­
54     ÇÁ·Î¼¼½º ¸ñ·ÏÀ» º¸°í ¾ÆÆÄÄ¡ ÇÁ·Î¼¼½ºÀÇ Æò±Õ ¸Þ¸ð¸® »ç¿ë·®À»
55     ¾Ë¾Æ³½ÈÄ, Àüü »ç¿ë°¡´ÉÇÑ ¸Þ¸ð¸®¿¡¼­ ´Ù¸¥ ÇÁ·Î¼¼½ºµéÀÌ »ç¿ëÇÒ
56     °ø°£À» »« °ª¿¡¼­ ³ª´«´Ù.</p>
57
58     <p>³ª¸ÓÁö´Â Æò¹üÇÏ´Ù: ÃæºÐÈ÷ ºü¸¥ CPU, ÃæºÐÈ÷ ºü¸¥ ³×Æ®¿÷Ä«µå,
59     ÃæºÐÈ÷ ºü¸¥ µð½ºÅ©, ¿©±â¼­ "ÃæºÐÈ÷ ºü¸¥"Àº ½ÇÇèÀ» Çؼ­ °áÁ¤Çؾß
60     ÇÑ´Ù.</p>
61
62     <p>¿î¿µÃ¼Á¦´Â º¸Åë °¢ÀÚ ¾Ë¾Æ¼­ ¼±ÅÃÇÒ ÀÏÀÌ´Ù. ±×·¯³ª ÀϹÝÀûÀ¸·Î
63     À¯¿ëÇÏ´Ù°í ÆǸíµÈ ¸î°¡Áö ÁöħÀÌ ÀÖ´Ù:</p>
64
65     <ul>
66       <li>
67         <p>¼±ÅÃÇÑ ¿î¿µÃ¼Á¦ÀÇ ÃֽŠ¾ÈÁ¤ ¹öÀü°ú ÆÐÄ¡¸¦ ½ÇÇàÇÑ´Ù.
68         ¸¹Àº ¿î¿µÃ¼Á¦ Á¦ÀÛ»ç´Â ÃÖ±Ù TCP ½ºÅðú ¾²·¹µå ¶óÀ̺귯¸®¿¡
69         ¸¹Àº ¼ÓµµÇâ»óÀ» Çß´Ù.</p>
70       </li>
71
72       <li>
73         <p>¿î¿µÃ¼Á¦°¡ <code>sendfile(2)</code> ½Ã½ºÅÛÈ£ÃâÀ»
74         Áö¿øÇÑ´Ù¸é, À̸¦ »ç¿ëÇϱâÀ§ÇÑ ¹öÀüÀ̳ª ÆÐÄ¡¸¦ ¼³Ä¡ÇÏ¿´´ÂÁö
75         È®ÀÎÇÑ´Ù. (¿¹¸¦ µé¾î, ¸®´ª½º¶ó¸é 2.4 ÀÌ»ó ¹öÀüÀ» ¶æÇÑ´Ù.
76         Solaris 8 Ãʱ⠹öÀüÀº ÆÐÄ¡°¡ ÇÊ¿äÇÏ´Ù.) Áö¿øÇϴ ½Ã½ºÅÛÀ̶ó¸é
77         ¾ÆÆÄÄ¡ 2´Â <code>sendfile</code>À» »ç¿ëÇÏ¿© CPU¸¦ ´ú
78         »ç¿ëÇϸç Á¤Àû ÆÄÀÏÀ» ´õ »¡¸® Àü¼ÛÇÒ ¼ö ÀÕ´Ù.</p>
79       </li>
80     </ul>
81
82   </section>
83
84   <section id="runtime">
85
86     <title>½ÇÇà½Ã ¼³Á¤¿¡ ´ëÇؼ­</title>
87
88     <related>
89       <modulelist>
90         <module>mod_dir</module>
91         <module>mpm_common</module>
92         <module>mod_status</module>
93       </modulelist>
94       <directivelist>
95         <directive module="core">AllowOverride</directive>
96         <directive module="mod_dir">DirectoryIndex</directive>
97         <directive module="core">HostnameLookups</directive>
98         <directive module="core">EnableMMAP</directive>
99         <directive module="core">EnableSendfile</directive>
100         <directive module="core">KeepAliveTimeout</directive>
101         <directive module="prefork">MaxSpareServers</directive>
102         <directive module="prefork">MinSpareServers</directive>
103         <directive module="core">Options</directive>
104         <directive module="mpm_common">StartServers</directive>
105       </directivelist>
106     </related>
107
108     <section id="dns">
109
110       <title>HostnameLookups¿Í DNS¿¡ ´ëÇØ °í·ÁÇÒ Á¡µé</title>
111
112       <p>¾ÆÆÄÄ¡ 1.3 ÀÌÀü¿¡ <directive
113       module="core">HostnameLookups</directive>ÀÇ ±âº»°ªÀº
114       <code>On</code>ÀÌ¿´´Ù. ¿äûÀ» ¸¶Ä¡±âÀü¿¡ DNS °Ë»öÀÌ ³¡³ª¾ß
115       ÇϹǷΠ¿äû¸¶´Ù Áö¿¬ÀÌ »ý°å´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ÀÌ ¼³Á¤ÀÇ
116       ±âº»°ªÀÌ <code>Off</code>·Î º¯°æµÇ¾ú´Ù. ·Î±×ÆÄÀÏÀÇ ÁÖ¼Ò¸¦
117       È£½ºÆ®¸íÀ¸·Î º¯È¯ÇÏ·Á¸é ¿©·¯ ·Î±×󸮠ÇÁ·Î±×·¥Áß ÇϳªÀÎ,
118       ¾ÆÆÄÄ¡¿¡ Æ÷ÇԵȠ<a
119       href="../programs/logresolve.html"><code>logresolve</code></a>
120       ÇÁ·Î±×·¥À» »ç¿ëÇ϶ó.</p>
121
122       <p>·Î±×󸮠ÀÛ¾÷ÀÌ ¼­¹ö ¼º´É¿¡ ¾Ç¿µÇâÀ» ¹ÌÄ¡¹Ç·Î ½ÇÁ¦
123       »ç¿ëÇϴ À¥¼­¹ö°¡ ¾Æ´Ñ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­ ·Î±×ÆÄÀÏÀ» ÈÄó¸®Çϱæ
124       ¹Ù¶õ´Ù.</p>
125
126       <p><code><directive module="mod_access">Allow</directive>
127       from domain</code>À̳ª <code><directive 
128       module="mod_access">Deny</directive> from domain</code>
129       Áö½Ã¾î¸¦ »ç¿ëÇÑ´Ù¸é (Áï, IP ÁÖ¼Ò°¡ ¾Æ´Ñ È£½ºÆ®¸íÀ̳ª µµ¸ÞÀθíÀ»
130       »ç¿ëÇÑ´Ù¸é) ºÎµæÀÌ Áߺ¹-¿ª DNS °Ë»öÀ» (¿ª°Ë»öÀ» ÇÑÈÄ ¾ÇÀÇ·Î
131       º¯°æµÇ¾ú´ÂÁö È®ÀÎÇϱâÀ§ÇØ ´Ù½Ã °Ë»ö) ÇؾߠÇÑ´Ù. ±×·¯¹Ç·Î
132       ¼º´ÉÀ» ³ôÀ̱âÀ§ÇØ ÀÌ·± Áö½Ã¾î¿¡´Â °¡´ÉÇϸé À̸§´ë½Å IP
133       ÁÖ¼Ò¸¦ »ç¿ëÇÑ´Ù.</p>
134
135       <p><code>&lt;Location /server-status&gt;</code> ¼½¼Ç µîÀ¸·Î
136       Áö½Ã¾îÀÇ Àû¿ë¹üÀ§¸¦ Á¦ÇÑÇÒ ¼ö ÀÖÀ½À» ±â¾ïÇ϶ó. ÀÌ °æ¿ì
137       Á¶°Ç¿¡ ¸Â´Â ¿äû¿¡¸¸ DNS Á¶È¸¸¦ ÇÑ´Ù. ´ÙÀ½Àº
138       <code>.html</code>°ú <code>.cgi</code> ÆÄÀϸ¸ DNS °Ë»öÀ»
139       Çϴ ¿¹Á¦´Ù:</p>
140
141       <example>
142         HostnameLookups off<br />
143         &lt;Files ~ "\.(html|cgi)$"&gt;<br />
144         <indent>
145           HostnameLookups on<br />
146         </indent>
147         &lt;/Files&gt;
148       </example>
149
150       <p>±×·¯³ª CGI¿¡¼­ DNS¸íÀÌ ÇÊ¿äÇÒ »ÓÀ̶ó¸é, ÇÊ¿äÇѠƯÁ¤
151       CGI¿¡¼­¸¸ <code>gethostbyname</code> È£ÃâÀ» Çϵµ·Ï °í·ÁÇغ¼
152       ¼ö ÀÖ´Ù.</p>
153
154     </section>
155
156     <section id="symlinks">
157
158       <title>FollowSymLinks¿Í SymLinksIfOwnerMatch</title>
159
160       <p>URL °ø°£¿¡¼­ <code>Options FollowSymLinks</code>¸¦
161       »ç¿ëÇÏÁö¾Ê°í <code>Options SymLinksIfOwnerMatch</code>¸¦
162       »ç¿ëÇϸ頾ÆÆÄÄ¡´Â ½Éº¼¸µÅ©¸¦ °Ë»çÇϱâÀ§ÇØ ½Ã½ºÅÛÈ£ÃâÀ»
163       Çѹø ´õ ÇؾߠÇÑ´Ù. ÆÄÀϸíÀÇ °¢ ºÎºÐ¸¶´Ù Çѹø¾¿ ´õ È£ÃâÀ»
164       ÇÑ´Ù. ¿¹¸¦ µé¾î, ¼³Á¤ÀÌ ´ÙÀ½°ú °°°í:</p>
165
166       <example>
167         DocumentRoot /www/htdocs<br />
168         &lt;Directory /&gt;<br />
169         <indent>
170           Options SymLinksIfOwnerMatch<br />
171         </indent>
172         &lt;/Directory&gt;
173       </example>
174
175       <p><code>/index.html</code> URI¿¡ ´ëÇÑ ¿äûÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
176       ±×·¯¸é ¾ÆÆÄÄ¡´Â <code>/www</code>, <code>/www/htdocs</code>,
177       <code>/www/htdocs/index.html</code> °¢°¢¿¡ ´ëÇØ
178       <code>lstat(2)</code>¸¦ È£ÃâÇÑ´Ù. <code>lstats</code>
179       °á°ú¸¦ Ä³½ÌÇÏÁö ¾Ê±â¶§¹®¿¡ ¿äûÀÌ µé¾î¿Ã ¶§¸¶´Ù ¸Å¹ø °°Àº
180       ÀÛ¾÷À» ÇÑ´Ù. ÁøÂ¥ ½Éº¼¸µÅ© º¸¾È °Ë»ç¸¦ ¿øÇѴٸ頴ÙÀ½°ú
181       °°ÀÌ ÇÒ ¼ö ÀÖ´Ù:</p>
182
183       <example>
184         DocumentRoot /www/htdocs<br />
185         &lt;Directory /&gt;<br />
186         <indent>
187           Options FollowSymLinks<br />
188         </indent>
189         &lt;/Directory&gt;<br />
190         <br />
191         &lt;Directory /www/htdocs&gt;<br />
192         <indent>
193           Options -FollowSymLinks +SymLinksIfOwnerMatch<br />
194         </indent>
195         &lt;/Directory&gt;
196       </example>
197
198       <p>ÀÌ °æ¿ì ÃÖ¼ÒÇÑ <directive
199       module="core">DocumentRoot</directive> °æ·Î´Â °Ë»çÇÏÁö
200       ¾Ê´Â´Ù. DocumentRoot ¹Û¿¡ Àִ °æ·Î·Î <directive
201       module="mod_alias">Alias</directive>³ª <directive
202       module="mod_rewrite">RewriteRule</directive>À» »ç¿ëÇÑ
203       °æ¿ì¿¡µµ À§¿Í ºñ½ÁÇÑ ¼½¼ÇÀÌ ÇÊ¿äÇÏ´Ù. ½Éº¼¸µÅ© º¸¾ÈÀ»
204       °í·ÁÇÏÁö ¾Ê°í ÃÖ°íÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é,
205       <code>FollowSymLinks</code>¸¦ ¼³Á¤ÇÏ°í,
206       <code>SymLinksIfOwnerMatch</code>´Â Àý´ë·Î ¾ÈµÈ´Ù.</p>
207
208     </section>
209
210     <section id="htacess">
211
212       <title>AllowOverride</title>
213
214       <p>URL °ø°£¿¡¼­ overrides¸¦ Çã¿ëÇÑ´Ù¸é (º¸Åë
215       <code>.htaccess</code> ÆÄÀÏ) ¾ÆÆÄÄ¡´Â ÆÄÀϸíÀÇ °¢ ºÎºÐ¸¶´Ù
216       <code>.htaccess</code>¸¦ ¿­±æ ½ÃµµÇÑ´Ù. ¿¹¸¦ µé¾î,</p>
217
218       <example>
219         DocumentRoot /www/htdocs<br />
220         &lt;Directory /&gt;<br />
221         <indent>
222           AllowOverride all<br />
223         </indent>
224         &lt;/Directory&gt;
225       </example>
226
227       <p><code>/index.html</code> URI¿¡ ´ëÇÑ ¿äûÀÌ ÀÖ´Ù°í °¡Á¤ÇÏÀÚ.
228       ¾ÆÆÄÄ¡´Â <code>/.htaccess</code>, <code>/www/.htaccess</code>,
229       <code>/www/htdocs/.htaccess</code>¸¦ ¿­·Á°í ½ÃµµÇÑ´Ù.
230       ÇØ°áÃ¥Àº ¾ÕÀÇ <code>Options FollowSymLinks</code> °æ¿ì¿Í
231       ºñ½ÁÇÏ´Ù. ÃÖ°íÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é ÆÄÀϽýºÅÛ¿¡ ´ëÇؼ­ Ç×»ó
232       <code>AllowOverride None</code>À» »ç¿ëÇÑ´Ù.</p>
233
234     </section>
235
236     <section id="negotiation">
237
238       <title>³»¿ëÇù»ó</title>
239
240       <p>°¡´ÉÇÏ°í ÁøÂ¥ Á¶±ÝÀÇ ¼º´ÉÇâ»ó¿¡µµ °ü½ÉÀÌ Àִٸ頳»¿ëÇù»óÀ»
241       ¸·´Â´Ù. ½ÇÁ¦·Î Çù»óÀÇ À̵æÀº ¼º´ÉÀúÇϺ¸´Ù ÀÛ´Ù. ¼­¹ö¸¦
242       ºü¸£°Ô ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¿ÍÀϵåÄ«µå¸¦ »ç¿ëÇϴ ´ë½Å:</p>
243
244       <example>
245         DirectoryIndex index
246       </example>
247
248       <p>¿ÏÀüÇÑ ¸ñ·ÏÀ» »ç¿ëÇÑ´Ù:</p>
249
250       <example>
251         DirectoryIndex index.cgi index.pl index.shtml index.html
252       </example>
253
254       <p>°¡Àå ÈçÇÑ °ÍÀ» ¾Õ¿¡ µÐ´Ù.</p>
255
256       <p>¶Ç, µð·ºÅ丮¿¡¼­ ÆÄÀϵéÀ» Ã£´Â <code>MultiViews</code>
257       º¸´Ù´Â, ÇÑ ÆÄÀϸ¸ ÀÐÀ¸¸é ÇÊ¿äÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Â
258       <code>type-map</code> ÆÄÀÏÀ» Á÷Á¢ ¸¸µå´Â °ÍÀÌ ´õ ºü¸§À»
259       ¸í½ÉÇ϶ó.</p>
260
261     <p>»çÀÌÆ®¿¡ ³»¿ëÇù»óÀÌ ÇÊ¿äÇÏ´Ù¸é Çù»óÀ» À§ÇØ <code>Options
262     MultiViews</code> Áö½Ã¾î¸¦ »ç¿ëÇϱ⺸´Ù <code>type-map</code>
263     ÆÄÀÏÀ» °í·ÁÇ϶ó. Çù»ó¹æ¹ý¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸í°ú
264     <code>type-map</code> ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀº <a
265     href="../content-negotiation.html">³»¿ëÇù»ó</a> ¹®¼­¸¦ Âü°íÇ϶ó.</p>
266
267     </section>
268
269     <section>
270
271       <title>¸Þ¸ð¸®´ëÀÀ (memory-mapping)</title>
272
273       <p>¿¹¸¦ µé¾î, server-side-include¸¦ Ã³¸®Çϴ µî ¾ÆÆÄÄ¡
274       2.0ÀÌ Àü¼ÛÇÒ ÆÄÀÏÀ» ÀÐÀ»¶§ ¿î¿µÃ¼Á¦°¡ <code>mmap(2)</code>
275       µîÀ» Áö¿øÇÑ´Ù¸é ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÑ´Ù.</p>
276
277       <p>¿©·¯ Ç÷¡Æû¿¡¼­ ¸Þ¸ð¸®´ëÀÀÀ» ¼º´ÉÀ» Çâ»óÇÑ´Ù. ±×·¯³ª
278       ¸Þ¸ð¸®´ëÀÀÀÌ ¼­¹öÀÇ ¼º´ÉÀ» ¶³¾îÆ®¸®°í ½ÉÁö¾î ¾ÈÁ¤¼ºÀ»
279       ÇØÄ¡´Â °æ¿ì°¡ ÀÖ´Ù:</p>
280
281       <ul>
282         <li>
283           <p>¾î¶² ¿î¿µÃ¼Á¦¿¡¼­ <code>mmap</code>Àº CPU °³¼ö°¡
284           ¸¹¾ÆÁú¶§ <code>read(2)</code> ¸¸Å­ È®À强ÀÌ ÁÁÁö ¾Ê´Ù.
285           ¿¹¸¦ µé¾î, ´ÙÁßÇÁ·Î¼¼¼­ Solaris ¼­¹ö¿¡¼­ ¾ÆÆÄÄ¡ 2.0Àº
286           Á¾Á¾ <code>mmap</code>À» »ç¿ëÇÏÁö ¾ÊÀ»¶§ ¼­¹ö°¡ Ã³¸®ÇÑ
287           ÆÄÀÏÀ» ´õ »¡¸® Àü¼ÛÇÑ´Ù.</p>
288         </li>
289
290         <li>
291           <p>NFS ¸¶¿îÆ®ÇÑ ÆÄÀϽýºÅÛ¿¡ Àִ ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÏ´Â
292           µµÁß¿¡ ´Ù¸¥ NFS Å¬¶óÀ̾ðÆ®¿¡ Àִ ÇÁ·Î¼¼½º°¡ ÆÄÀÏÀ»
293           Áö¿ì°Å³ª ÆÄÀÏÅ©±â¸¦ ÁÙÀ̸é, À¥¼­¹ö ÇÁ·Î¼¼½º°¡ ´ÙÀ½
294           ¹ø¿¡ ¸Þ¸ð¸®´ëÀÀÇÑ ÆÄÀϳ»¿ëÀ» ÀÐÀ»¶§ bus error°¡ ¹ß»ýÇÒ
295           ¼ö ÀÖ´Ù.</p>
296         </li>
297       </ul>
298
299       <p>À§ÀÇ Á¶°Ç¿¡ ÇØ´çÇϸé Àü¼ÛÇϴ ÆÄÀÏÀ» ¸Þ¸ð¸®´ëÀÀÇÏÁö
300       ¾Êµµ·Ï <code>EnableMMAP off</code>¸¦ »ç¿ëÇؾߠÇÑ´Ù. (ÁÖÀÇ:
301       ÀÌ Áö½Ã¾î´Â µð·ºÅ丮º°·Î º¯°æÇÒ ¼ö ÀÖ´Ù.)</p>
302
303     </section>
304
305     <section>
306
307       <title>Sendfile</title>
308
309       <p>¾ÆÆÄÄ¡´Â ¿î¿µÃ¼Á¦°¡ <code>sendfile(2)</code>À» Áö¿øÇϸé
310       Ä¿³Î sendfileÀ» »ç¿ëÇÏ¿© -- ¿¹¸¦ µé¾î, Á¤Àû ÆÄÀÏÀ» ¼­ºñ½ºÇÒ¶§
311       -- Àü¼ÛÇÒ ÆÄÀÏÀ» Á÷Á¢ ÀÐÁö¾ÊÀ» ¼ö ÀÖ´Ù.</p>
312
313       <p>¿©·¯ Ç÷¡Æû¿¡¼­ sendfileÀ» »ç¿ëÇϸé read¿Í send¸¦ µû·Î
314       ÇÒ ÇÊ¿ä°¡ ¾ø¾î¼­ »¡¶óÁø´Ù. ±×·¯³ª sendfileÀ» »ç¿ëÇϸé
315       À¥¼­¹öÀÇ ¾ÈÁ¤¼ºÀ» ÇØÄ¡°ÔµÇ´Â °æ¿ì°¡ ÀÖ´Ù:</p>
316
317       <ul>
318         <li>
319           <p>sendfile Áö¿øÀÌ À߸øµÇ¾ú°í ÄÄÆÄÀÏ ½Ã½ºÅÛÀÌ ÀÌÁ¡À»
320           ¹ß°ßÇÏÁö ¸øÇϴ Ç÷¡ÆûÀÌ ÀÖ´Ù. Æ¯È÷ ´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼­
321           ½ÇÇàÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ¿© sendfile Áö¿øÀÌ À߸øµÈ ÄÄÇ»ÅÍ·Î
322           °¡Á®¿Â °æ¿ì¿¡ °¡´ÉÇÏ´Ù.</p>
323         </li>
324         <li>
325           <p>Ä¿³ÎÀº ÀÚ½ÅÀǠij½¬¸¦ »ç¿ëÇÏ¿© NFS·Î ¸¶¿îÆ®ÇÑ ÆÄÀÏÀ»
326           ¾ÈÁ¤ÀûÀ¸·Î ¼­ºñ½ºÇÒ ¼ö ¾ø´Â °æ¿ì°¡ ÀÖ´Ù.</p>
327         </li>
328       </ul>
329
330       <p>À§ÀÇ Á¶°Ç¿¡ ÇØ´çÇϸé ÆÄÀÏÀ» sendfile Àü¼ÛÇÏÁö ¾Êµµ·Ï
331       <code>EnableSendfile off</code>¸¦ »ç¿ëÇؾߠÇÑ´Ù. (ÁÖÀÇ:
332       ÀÌ Áö½Ã¾î´Â µð·ºÅ丮º°·Î º¯°æÇÒ ¼ö ÀÖ´Ù.)</p>
333
334     </section>
335
336     <section id="process">
337
338       <title>ÇÁ·Î¼¼½º »ý¼º</title>
339
340       <p>¾ÆÆÄÄ¡ 1.3 ÀÌÀü¿¡´Â <directive
341       module="prefork">MinSpareServers</directive>, <directive
342       module="prefork">MaxSpareServers</directive>, <directive
343       module="mpm_common">StartServers</directive> ¼³Á¤ÀÌ ¸ðµÎ
344       º¥Ä¡¸¶Å© °á°ú¿¡ Å« ¿µÇâÀ» ¹ÌÃÆ´Ù. Æ¯È÷ ¾ÆÆÄÄ¡´Â ÀÛ¾÷À»
345       ¼­ºñ½ºÇϱâÀ§ÇØ ÃæºÐÇÑ Àڽļö¿¡ ´Ù´Ù¸¦ ¶§±îÁö "µµ´Þ" ±â°£ÀÌ
346       ÇÊ¿äÇß´Ù. Ã³À½ <directive
347       module="mpm_common">StartServers</directive>°³ ÀÚ½ÄÀ»
348       ¸¸µçÈÄ, <directive module="prefork">MinSpareServers</directive>
349       ¼³Á¤°ª±îÁö ÃÊ´ç ÀÚ½ÄÀ» Çϳª¾¿ ¸¸µé¾ú´Ù. ±×·¡¼­ <directive
350       module="mpm_common">StartServers</directive> ±âº»°ªÀÌ
351       <code>5</code>ÀΠ¼­¹ö¿¡ Å¬¶óÀ̾ðÆ® 100°³°¡ µ¿½Ã¿¡ Á¢¼ÓÇϸé
352       ºÎÇϸ¦ Ã³¸®Çϱ⿡ ÃæºÐÇÑ ÀÚ½ÄÀ» ¸¸µé±â±îÁö 95ÃÊ°¡ °É·È´Ù.
353       ÀÚÁÖ Àç½ÃÀÛÇÏÁö ¾Ê´Â ½ÇÁ¦ ¼­¹ö¿¡¼­´Â Àß µ¿ÀÛÇÏÁö¸¸, 10ºÐ°£¸¸
354       ½ÇÇàÇϴ º¥Ä¡¸¶Å© °á°ú´Â ¸Å¿ì ³ª»Ú°Ô ³ª¿Â´Ù.</p>
355
356       <p>ÃÊ´ç ÇÑ°³ ±ÔÄ¢Àº ÀÚ½ÄÀ» »õ·Î ½ÃÀÛÇϸ鼭 ¼­¹ö¿¡ ¹«¸®¸¦
357       ÁÖÁö ¾ÊÀ¸·Á°í Á¤Çß´Ù. ÄÄÇ»ÅÍ°¡ ÀÚ½ÄÀ» ½ÃÀÛÇÏ´À¶ó ¹Ù»Ú¸é
358       ¿äûÀ» ¼­ºñ½ºÇÒ ¼ö ¾ø´Ù. ±×·¯³ª ÀÌ ±ÔÄ¢ÀÌ ¾ÆÆÄÄ¡ÀǠü°¨
359       ¼º´É¿¡ ¾Ç¿µÇâÀ» Á־¯°æÇÏ¿´´Ù. ¾ÆÆÄÄ¡ 1.3¿¡¼­ ÃÊ´ç ÇÑ°³
360       ±ÔÄ¢Àº ¿ÏÈ­µÇ¾ú´Ù. ÄÚµå´Â ÀڽĠÇÑ°³¸¦ ¸¸µé°í, 1ÃÊ ½¬°í,
361       µÎ°³¸¦ ¸¸µé°í, 1ÃÊ ½¬°í, ³×°³¸¦ ¸¸µé°í, ÀÌ·± ½ÄÀ¸·Î ÃÊ´ç
362       ÀÚ½ÄÀ» 32°³ ¸¸µé¶§±îÁö Áö¼ö·Î Áõ°¡ÇÑ´Ù. Àڽļö°¡ <directive
363       module="prefork">MinSpareServers</directive> ¼³Á¤¿¡ ´Ù´Ù¸£¸é
364       Áõ°¡¸¦ Áß´ÜÇÑ´Ù.</p>
365
366       <p>ÀÌ °æ¿ì ¹ÝÀÀ¼Óµµ°¡ »¡¶óÁ®¼­ <directive module="prefork"
367       >MinSpareServers</directive>, <directive module="prefork"
368       >MaxSpareServers</directive>, <directive module="mpm_common"
369       >StartServers</directive>¸¦ °ÅÀÇ ¼³Á¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÀÏÃÊ¿¡
370       ÀÚ½ÄÀ» 4°³ ÀÌ»ó »ý¼ºÇϸé <directive
371       module="core">ErrorLog</directive>¿¡ ±â·ÏÇÑ´Ù. ÀÌ·± ¿À·ù¹®ÀÌ
372       ¸¹ÀÌ º¸À̸é ÀÌ ¼³Á¤µéÀ» Á¶ÀýÇϱ根ٶõ´Ù.
373       <module>mod_status</module> °á°ú°¡ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.</p>
374
375     <p>ÇÁ·Î¼¼½º »ý¼º°ú °ü·ÃÇÏ¿© <directive
376     module="mpm_common">MaxRequestsPerChild</directive> ¼³Á¤Àº
377     ÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù. ±âº»°ªÀº ÀڽĴç Ã³¸®ÇÒ ¿äû¼ö¿¡ Á¦ÇÑÀÌ
378     ¾ø´Ù´Â <code>0</code>ÀÌ´Ù. ÇöÀç ¼³Á¤ÀÌ <code>30</code>°ú
379     °°ÀÌ ¸Å¿ì ÀÛÀº °ªÀ¸·Î ¼³Á¤µÇÀÖ´Ù¸é, °ªÀ» »ó´çÈ÷ ³ôÈú ÇÊ¿ä°¡
380     ÀÖ´Ù. SunOS³ª ¿À·¡µÈ Solaris ¹öÀüÀ» »ç¿ëÇÑ´Ù¸é, ¸Þ¸ð¸®À¯Ã⶧¹®¿¡
381     ÀÌ °ªÀ» <code>10000</code> Á¤µµ·Î ¼³Á¤Ç϶ó.</p>
382
383     <p>¿¬°áÀ¯Áö(keep-alive)¸¦ »ç¿ëÇÑ´Ù¸é ÀڽĵéÀº À̹̠¿­¸°
384     ¿¬°á¿¡¼­ Ãß°¡ ¿äûÀ» ±â´Ù¸®¸ç ¾Æ¹«°Íµµ ÇÏÁö¾Ê±â¶§¹®¿¡ °è¼Ó
385     ¹Ù»Ú´Ù. <directive module="core">KeepAliveTimeout</directive>ÀÇ
386     ±âº»°ª <code>15</code> Ãʴ ÀÌ·± Çö»óÀ» ÃÖ¼ÒÈ­ÇÑ´Ù. ³×Æ®¿÷
387     ´ë¿ªÆø°ú ¼­¹ö ÀÚ¿ø °£ÀÇ ±ÕÇüÀÌ ¸Â°Ô ¼³Á¤ÇÑ´Ù. <a
388     href="http://www.research.digital.com/wrl/techreports/abstracts/95.4.html">
389     ¿¬°áÀ¯ÁöÀÇ ´ëºÎºÐÀÇ ÀÌÁ¡ÀÌ »ç¶óÁö±â¶§¹®¿¡</a> ¾î¶² °æ¿ì¿¡µµ
390     ÀÌ °ªÀ» <code>60</code> ÃÊ ÀÌ»óÀ¸·Î ¿Ã¸®Áö ¸¶¶ó.</p>
391
392     </section>
393
394   </section>
395
396   <section id="compiletime">
397
398     <title>ÄÄÆÄÀϽ༳Á¤¿¡ ´ëÇؼ­</title>
399
400     <section>
401
402       <title>MPM ¼±ÅÃ</title>
403
404       <p>¾ÆÆÄÄ¡ 2.x´Â <a href="../mpm.html">´ÙÁß󸮸ðµâ</a>
405       (MPMs)À̶ó´Â ±³Ã¼ÇÒ ¼ö Àִ µ¿±âÈ­ ¸ðµ¨À» Áö¿øÇÑ´Ù. ¾ÆÆÄÄ¡¸¦
406       ÄÄÆÄÀÏÇÒ¶§ MPMÀ» ¼±ÅÃÇؾߠÇÑ´Ù. <module>beos</module>,
407       <module>mpm_netware</module>, <module>mpmt_os2</module>,
408       <module>mpm_winnt</module>¿Í °°À̠ƯÁ¤ Ç÷¡Æû¿¡¼­¸¸ »ç¿ëÇÒ
409       ¼ö Àִ MPMµµ ÀÖ´Ù. ÀϹÝÀûÀΠÀ¯´Ð½º·ù ½Ã½ºÅÛÀº ¿©·¯ MPM
410       Áß¿¡ Çϳª¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. À¥¼­¹öÀÇ ¼Óµµ¿Í
411       È®À强(scalability)Àº ¾î¶² MPMÀ» ¼±ÅÃÇ߳Ŀ¡ ´Þ·È´Ù:</p>
412
413       <ul>
414
415         <li><module>worker</module> MPMÀº ¿©·¯ ÀڽĠÇÁ·Î¼¼½º°¡
416         °¢°¢ ¿©·¯ ¾²·¹µå¸¦ »ç¿ëÇÑ´Ù. °¢ ¾²·¹µå´Â Çѹø¿¡ ÇÑ ¿¬°áÀ»
417         ´ã´çÇÑ´Ù. ÀϹÝÀûÀ¸·Î worker´Â prefork MPM º¸´Ù ÀûÀº
418         ¸Þ¸ð¸®¸¦ »ç¿ëÇϹǷΠÅë½Å·®ÀÌ ¸¹Àº ¼­¹ö¿¡ ÀûÀýÇÏ´Ù.</li>
419
420         <li><module>prefork</module> MPMÀº ¾²·¹µå°¡ ÇÑ°³ÀΠÀÚ½Ä
421         ÇÁ·Î¼¼½º¸¦ ¿©·¯°³ »ç¿ëÇÑ´Ù. °¢ ÇÁ·Î¼¼½º´Â Çѹø¿¡ ÇÑ
422         ¿¬°áÀ» ´ã´çÇÑ´Ù. ¿©·¯ ½Ã½ºÅÛ¿¡¼­ preforkÀÇ ¼Óµµ´Â worker¿Í
423         ºñ½ÁÇÏÁö¸¸, ´õ ¸¹Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½°ú °°Àº »óȲ¿¡¼­
424         ¾²·¹µå¸¦ »ç¿ëÇÏÁö ¾Ê´Â prefork ¹æ½ÄÀÌ worker¿¡ ºñÇØ
425         ÀÌÁ¡À» °¡Áø´Ù: ¾²·¹µå¿¡ ¾ÈÀüÇÏÁö (thread-safe) ¾ÊÀº
426         Á¦»ïÀÚ°¡ ¸¸µç ¸ðµâÀ» »ç¿ëÇÒ ¼ö ÀÖ°í, ¾²·¹µå µð¹ö±ë Áö¿øÀÌ
427         ºó¾àÇÑ Ç÷¡Æû¿¡¼­ ½±°Ô µð¹ö±ëÇÒ ¼ö ÀÖ´Ù.</li>
428
429       </ul>
430
431       <p>ÀÌ MPMµé°ú ´Ù¸¥ MPM¿¡ ´ëÇØ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â MPM <a
432       href="../mpm.html">¹®¼­</a>¸¦ Âü°íÇϱ根ٶõ´Ù.</p>
433
434     </section>
435
436     <section id="modules">
437
438         <title>¸ðµâ</title>
439
440         <p>¸Þ¸ð¸® »ç¿ë·®ÀÌ ¼º´É¿¡¼­ °¡Àå Áß¿äÇÑ ¿äÀÎÀ̱⶧¹®¿¡
441         ½ÇÁ¦·Î »ç¿ëÇÏÁö ¾Ê´Â ¸ðµâÀ» Á¦°ÅÇغ¸ÀÚ. ¸ðµâÀ» <a
442         href="../dso.html">DSO</a>·Î ÄÄÆÄÀÏÇߴٸ頰£´ÜÈ÷ ±×
443         ¸ðµâ¿¡ ´ëÇÑ <directive
444         module="mod_so">LoadModule</directive> Áö½Ã¾î¸¦ ÁÖ¼®Ã³¸®Çϸé
445         µÈ´Ù. ±×·¡¼­ ¸ðµâÀ» Á¦°ÅÇÏ°í ½ÇÇàÇÏ¿© »çÀÌÆ®°¡ ¸ðµâ¾øÀ̵µ
446         Á¤»óÀûÀ¸·Î µ¿ÀÛÇÏ´ÂÁö »ìÆ캼 ¼ö ÀÖ´Ù.</p>
447
448         <p>¹Ý´ë·Î ¸ðµâÀÌ ¾ÆÆÄÄ¡ ½ÇÇàÆÄÀÏ¿¡ Á¤ÀûÀ¸·Î ¸µÅ©µÇÀÖ´Ù¸é
449         ¿øÇÏÁö ¾Ê´Â ¸ðµâÀ» Á¦°ÅÇϱâÀ§ÇØ ¾ÆÆÄÄ¡¸¦ ÀçÄÄÆÄÀÏÇؾß
450         ÇÑ´Ù.</p>
451
452         <p>¿©±â¼­ ´ç¿¬È÷ ¾î¶² ¸ðµâÀ» »ç¿ëÇÏ°í »ç¿ëÇÏÁö ¸»Áö
453         Àǹ®ÀÌ »ý±ä´Ù. Á¤´äÀº À¥»çÀÌÆ®¸¶´Ù ´Ù¸£´Ù. ±×·¯³ª ¾Æ¸¶µµ
454         <em>ÃÖ¼ÒÇÑ</em> <module>mod_mime</module>,
455         <module>mod_dir</module>, <module>mod_log_config</module>
456         ¸ðµâÀº »ç¿ëÇÒ °ÍÀÌ´Ù. ¹°·Ð À¥»çÀÌÆ®¿¡ ·Î±×ÆÄÀÏÀÌ ÇÊ¿ä¾ø´Ù¸é
457         <code>mod_log_config</code>´Â ¾ø¾îµµ µÈ´Ù. ±×·¯³ª ÃßõÇÏÁö
458         ¾Ê´Â´Ù.</p>
459
460     </section>
461
462     <section>
463
464       <title>Atomic ¸í·É</title>
465
466       <p><module>mod_cache</module> °°Àº ¸ðµâ°ú ÃÖ±Ù °³¹ßÁßÀÎ
467       worker MPMÀº APRÀÇ atomic API¸¦ »ç¿ëÇÑ´Ù. ÀÌ API´Â °æ·®±Þ
468       ¾²·¹µå µ¿±âÈ­¸¦ À§ÇÒ atomic ¸í·ÉÀ» Á¦°øÇÑ´Ù.</p>
469
470       <p>±âº»ÀûÀ¸·Î APRÀº °¢ ¿î¿µÃ¼Á¦/CPU Ç÷¡Æû¿¡¼­ °¡Àå È¿À²ÀûÀÎ
471       ¹æ¹ýÀ» »ç¿ëÇÏ¿© ÀÌ ¸í·ÉÀ» ±¸ÇöÇÑ´Ù. ¿¹¸¦ µé¾î, ¿©·¯ ÃÖ½Å
472       CPU¿¡´Â Çϵå¿þ¾î·Î atomic compare-and-swap (CAS) ¿¬»êÀ»
473       Çϴ ¸í·É¾î°¡ ÀÖ´Ù. ±×·¯³ª ¾î¶² Ç÷¡Æû¿¡¼­ APRÀº ÀÌ·±
474       ¸í·É¾î°¡ ¾ø´Â ¿À·¡µÈ CPU¿Í È£È¯¼ºÀ» À§ÇØ ´õ ´À¸° mutex±â¹Ý
475       ±¸ÇöÀ» ±âº»ÀûÀ¸·Î »ç¿ëÇÑ´Ù. ÀÌ·± Ç÷¡Æû¿¡¼­ ¾ÆÆÄÄ¡¸¦
476       ÄÄÆÄÀÏÇÒ¶§ ¾ÆÆÄÄ¡¸¦ ÃֽŠCPU¿¡¼­¸¸ ½ÇÇàÇÒ °èȹÀ̶ó¸é,
477       ¾ÆÆÄÄ¡¸¦ ±¸¼ºÇÒ¶§ <code>--enable-nonportable-atomics</code>
478       ¿É¼ÇÀ» »ç¿ëÇÏ¿© ´õ ºü¸¥ atomic ±¸ÇöÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù:</p>
479
480       <example>
481         ./buildconf<br />
482         ./configure --with-mpm=worker --enable-nonportable-atomics=yes
483       </example>
484
485       <p><code>--enable-nonportable-atomics</code> ¿É¼ÇÀº ´ÙÀ½°ú
486       °°Àº Ç÷¡Æû¿¡ ¿µÇâÀÌ ÀÖ´Ù:</p>
487
488       <ul>
489
490         <li>SPARC¿¡¼­ Solaris<br />
491             ±âº»ÀûÀ¸·Î APRÀº Solaris/SPARC¿¡¼­ mutex±â¹Ý atomicÀ»
492             »ç¿ëÇÑ´Ù. ±×·¯³ª ±¸¼ºÇÒ¶§
493             <code>--enable-nonportable-atomics</code>¸¦ »ç¿ëÇϸé
494             APRÀº ºü¸¥ Çϵå¿þ¾î compare-and-swapÀ» À§ÇÑ SPARC
495             v8plus ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ÀÌ ¿É¼ÇÀ» »ç¿ëÇϸé atomic
496             ¸í·ÉÀÌ ´õ È¿À²ÀûÀÌÁö¸¸ (CPU¸¦ ´ú »ç¿ëÇÏ°í ´õ ³ôÀº
497             µ¿±âÈ­°¡ °¡´ÉÇÏ´Ù), ÄÄÆÄÀÏÇÑ ½ÇÇàÆÄÀÏÀº UltraSPARC
498             Ä¨¿¡¼­¸¸ ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
499         </li>
500
501         <li>Linux on x86<br />
502             ±âº»ÀûÀ¸·Î APRÀº ¸®´ª½º¿¡¼­ mutex±â¹Ý atomicÀ»
503             »ç¿ëÇÑ´Ù. ±×·¯³ª ±¸¼ºÇÒ¶§
504             <code>--enable-nonportable-atomics</code>¸¦ »ç¿ëÇϸé
505             APRÀº ºü¸¥ Çϵå¿þ¾î compare-and-swapÀ» À§ÇÑ 486
506             ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ´õ È¿À²ÀûÀΠatomic ¸í·ÉÀÌ °¡´ÉÇÏÁö¸¸,
507             ÄÄÆÄÀÏÇÑ ½ÇÇàÆÄÀÏÀº 486 ÀÌ»ó Ä¨¿¡¼­¸¸ (386Àº ¾ÈµÈ´Ù)
508             ½ÇÇàÇÒ ¼ö ÀÖ´Ù.
509         </li>
510
511       </ul>
512
513     </section>
514
515     <section>
516
517       <title>mod_status¿Í ExtendedStatus On</title>
518
519       <p>¾ÆÆÄÄ¡¸¦ ÄÄÆÄÀÏÇÒ¶§ <module>mod_status</module>¸¦ Æ÷ÇÔÇÏ°í
520       ½ÇÇàÇÒ¶§ <code>ExtendedStatus On</code>À» ¼³Á¤Çϸ頾ÆÆÄÄ¡´Â
521       ¿äûÀ» ¹ÞÀ»¶§¸¶´Ù <code>gettimeofday(2)</code>(ȤÀº ¿î¿µÃ¼Á¦¿¡
522       µû¶ó <code>times(2)</code>)¸¦ µÎ¹ø È£ÃâÇÏ°í (1.3 ÀÌÀü¿¡´Â)
523       <code>time(2)</code>µµ Ãß°¡·Î ¿©·¯¹ø È£ÃâÇÑ´Ù. »óÅ º¸°í¼­¿¡
524       µ¿À۽ð£ÀÌ ÇÊ¿äÇϱ⠶§¹®ÀÌ´Ù. ÃÖ»óÀÇ ¼º´ÉÀ» ¾òÀ¸·Á¸é
525       (±âº»°ªÀÎ) <code>ExtendedStatus off</code>¸¦ ¼³Á¤ÇÑ´Ù.</p>
526
527     </section>
528
529     <section>
530
531       <title>accept Á÷·ÄÈ­ - ¿©·¯ ¼ÒÄÏ</title>
532
533     <note type="warning"><title>ÁÖÀÇ:</title>
534       <p> ¾Æ·¡ ¹®¼­´Â ¾ÆÆÄÄ¡ À¥¼­¹ö 2.0 ¹öÀü¿¡¼­ º¯°æµÈ ³»¿ëÀ»
535       ´ã°í ÀÖÁö ¾Ê´Ù. ¾ÆÁ÷µµ À¯È¿ÇÑ Á¤º¸°¡ ÀÖÁö¸¸, ÁÖÀÇÇؼ­
536       »ç¿ëÇϱ根ٶõ´Ù.</p>
537     </note>
538
539       <p>À¯´Ð½º ¼ÒÄÏ APIÀÇ ´ÜÁ¡À» ¼³¸íÇÑ´Ù. À¥¼­¹ö°¡ ¿©·¯ Æ÷Æ®
540       È¤Àº ¿©·¯ ÁÖ¼Ò¸¦ ±â´Ù¸®±âÀ§ÇØ ¿©·¯ <directive
541       module="mpm_common">Listen</directive>À» »ç¿ëÇÑ´Ù°í °¡Á¤ÇÏÀÚ.
542       ¿¬°áÀÌ °¡´ÉÇÑÁö °¢ ¼ÒÄÏÀ» °Ë»çÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â
543       <code>select(2)</code>¸¦ »ç¿ëÇÑ´Ù. <code>select(2)</code>´Â
544       ¼ÒÄÏ¿¡ ±â´Ù¸®°í Àִ ¿¬°áÀÌ <em>¾ø´ÂÁö</em> È¤Àº <em>ÃÖ¼ÒÇÑ
545       ÇÑ°³</em> ÀÖ´ÂÁö ¾Ë·ÁÁØ´Ù. ¾ÆÆÄÄ¡¿¡´Â ¿©·¯ ÀÚ½ÄÀÌ ÀÖ°í,
546       ½¬°í Àִ ¸ðµç ÀÚ½ÄÀº µ¿½Ã¿¡ »õ·Î¿î ¿¬°áÀ» °Ë»çÇÑ´Ù. ¿ø·¡
547       ±¸ÇöÀº ´ÙÀ½°ú ºñ½ÁÇÏ´Ù (ÀÌ ¿¹´Â Äڵ忡¼­ °¡Á®¿ÀÁö ¾Ê¾Ò´Ù.
548       ´ÜÁö ¼³¸íÇϱâÀ§ÇÑ ¿ëµµ·Î ¸¸µé¾ú´Ù.):</p>
549
550       <example>
551         for (;;) {<br />
552         <indent>
553           for (;;) {<br />
554           <indent>
555             fd_set accept_fds;<br />
556             <br />
557             FD_ZERO (&amp;accept_fds);<br />
558             for (i = first_socket; i &lt;= last_socket; ++i) {<br />
559             <indent>
560               FD_SET (i, &amp;accept_fds);<br />
561             </indent>
562             }<br />
563             rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
564             if (rc &lt; 1) continue;<br />
565             new_connection = -1;<br />
566             for (i = first_socket; i &lt;= last_socket; ++i) {<br />
567             <indent>
568               if (FD_ISSET (i, &amp;accept_fds)) {<br />
569               <indent>
570                 new_connection = accept (i, NULL, NULL);<br />
571                 if (new_connection != -1) break;<br />
572               </indent>
573               }<br />
574             </indent>
575             }<br />
576             if (new_connection != -1) break;<br />
577           </indent>
578           }<br />
579           process the new_connection;<br />
580         </indent>
581         }
582       </example>
583
584       <p>±×·¯³ª À§ÀÇ ´Ü¼øÇÑ ±¸Çö¿¡´Â ½É°¢ÇÑ °í°¥(starvation)
585       ¹®Á¦°¡ ÀÖ´Ù. ¿©·¯ ÀÚ½ÄÀÌ µ¿½Ã¿¡ ÀÌ ¹Ýº¹¹®À» ½ÇÇàÇϸé,
586       ¿äûÀ» ±â´Ù¸®¸ç ¸ðµÎ <code>select</code>¿¡¼­ ¸ØÃá´Ù. À̶§
587       ¾î¶² ¼ÒÄÏ¿¡ ¿äûÀÌ Çϳª¶óµµ µé¾î¿À¸é ¸ðµç ÀÚ½ÄÀÌ ±ú¾î³­´Ù
588       (±ú¾î³ª´Â ÀÚ½ÄÀÇ °³¼ö´Â ¿î¿µÃ¼Á¦¿Í Å¸Àֿ̹¡ µû¶ó ´Ù¸£´Ù).
589       À̵éÀº ¸ðµÎ ¿¬°áÀ» <code>accept</code>Çϱ栽õµÇÑ´Ù. ±×·¯³ª
590       (¾ÆÁ÷µµ ÇÑ ¿¬°á¸¸ ´ë±âÁßÀ̶ó¸é) ÇÑ Àڽĸ¸ ¼º°øÇÏ°í, ³ª¸ÓÁö´Â
591       <code>accept</code>¿¡¼­ <em>¸ØÃá´Ù.</em> ±×·¯¸é ÀÌ ÀڽĵéÀº
592       ÇÑ ¼ÒÄÏÀÇ ¿äû¸¸À» ¼­ºñ½ºÇϵµ·Ï ¹­¿©¼­, ±× ¼ÒÄÏÀ¸·Î »õ·Î¿î
593       ¿äûÀÌ ÃæºÐÈ÷ µé¾î¿Í¼­ ¸ðµç ÀÚ½ÄÀ» ±ú¿ï¶§±îÁö Á¤ÁöÇØÀÖ´Ù.
594       ÀÌ·± °í°¥ ¹®Á¦´Â <a
595       href="http://bugs.apache.org/index/full/467">PR#467</a>¿¡
596       Ã³À½ º¸°íµÇ¾ú´Ù. ÃÖ¼ÒÇÑ µÎ°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù.</p>
597
598       <p>ÇÑ°¡Áö´Â ¼ÒÄÏÀ» ´ë±âÇÏÁö ¾Êµµ·Ï (non-blocking) ¸¸µå´Â
599       ¹æ¹ýÀÌ´Ù. ÀÌ °æ¿ì ÀÚ½ÄÀÌ <code>accept</code>¸¦ Çصµ ¸ØÃßÁö
600       ¾Ê°í, Áï½Ã ÁøÇàÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª CPU ½Ã°£À» ³¶ºñÇÑ´Ù.
601       <code>select</code>¿¡¼­ ½¬´Â ÀÚ½ÄÀÌ 10°³ ÀÖ°í, »õ·Î ¿¬°áÀÌ
602       ÇÑ°³ µé¾î¿Ô´Ù°í °¡Á¤ÇÏÀÚ. ±×·¯¸é ÀÌ ÀÚ½ÄÁß 9°³´Â ±ú¾î³ª¼­
603       ¿¬°áÀ» <code>accept</code>Çϱ栽õµÇÏ°í ½ÇÆÐÇϸ頾ƹ«
604       Àϵµ ÇÏÁö ¾Ê°í ´Ù½Ã <code>select</code>¸¦ ¹Ýº¹ÇÑ´Ù. ´Ù½Ã
605       <code>select</code>·Î µ¹¾Æ¿Ã ¶§±îÁö ¾î¶² Àڽĵµ ´Ù¸¥ ¼ÒÄÏ¿¡
606       µé¾î¿Â ¿äûÀ» ¼­ºñ½ºÇÏÁö ¾Ê´Â´Ù. (´ÙÁßÇÁ·Î¼¼¼­ ÄÄÇ»ÅÍ¿¡¼­)
607       ½¬´Â ÀڽĠ°³¼ö¸¸Å­ CPU °³¼ö°¡ Àִ µå¹® °æ¿ì°¡ ¾Æ´Ï¶ó¸é
608       ÀÌ ÇØ°áÃ¥Àº º°·Î ÁÁ¾Æº¸ÀÌÁö ¾Ê´Â´Ù.</p>
609
610       <p>´Ù¸¥ ¹æ¹ýÀº ¾ÆÆÄÄ¡°¡ »ç¿ëÇϴ ¹æ¹ýÀ¸·Î ³»ºÎ ¹Ýº¹¹®¿¡
611       ÇÑ Àڽĸ¸À» µé¿©º¸³½´Ù. ¹Ýº¹¹®Àº ´ÙÀ½°ú °°´Ù (Â÷À̸¦
612       °­Á¶ÇßÀ½):</p>
613
614       <example>
615         for (;;) {<br />
616         <indent>
617           <strong>accept_mutex_on ();</strong><br />
618           for (;;) {<br />
619           <indent>
620             fd_set accept_fds;<br />
621             <br />
622             FD_ZERO (&amp;accept_fds);<br />
623             for (i = first_socket; i &lt;= last_socket; ++i) {<br />
624             <indent>
625               FD_SET (i, &amp;accept_fds);<br />
626             </indent>
627             }<br />
628             rc = select (last_socket+1, &amp;accept_fds, NULL, NULL, NULL);<br />
629             if (rc &lt; 1) continue;<br />
630             new_connection = -1;<br />
631             for (i = first_socket; i &lt;= last_socket; ++i) {<br />
632             <indent>
633               if (FD_ISSET (i, &amp;accept_fds)) {<br />
634               <indent>
635                 new_connection = accept (i, NULL, NULL);<br />
636                 if (new_connection != -1) break;<br />
637               </indent>
638               }<br />
639             </indent>
640             }<br />
641             if (new_connection != -1) break;<br />
642           </indent>
643           }<br />
644           <strong>accept_mutex_off ();</strong><br />
645           process the new_connection;<br />
646         </indent>
647         }
648       </example>
649
650       <p><code>accept_mutex_on</code>°ú <code>accept_mutex_off</code>
651       <a id="serialize" name="serialize">ÇÔ¼ö</a>´Â mutex ¼¼¸¶Æ÷¾î¸¦
652       ±¸ÇöÇÑ´Ù. Çѹø¿¡ ¿ÀÁ÷ ÇÑ Àڽĸ¸ÀÌ mutex¸¦ °¡Áú ¼ö ÀÖ´Ù.
653       mutex¸¦ ±¸ÇöÇϴ ¹æ¹ýÀº ¿©·¯°¡ÁöÀÌ´Ù. ±¸Çö ¹æ¹ýÀº (1.3
654       ÀÌÀü) <code>src/conf.h</code>³ª (1.3°ú ±× ÀÌÈÄ)
655       <code>src/include/ap_config.h</code>¿¡ Á¤ÀǵÇÀÖ´Ù. ¾î¶²
656       ¾ÆÅ°ÅØÃĴ Àá±Ý(locking) ¹æ¹ýÀ» ¼±ÅÃÇÏÁö ¾Ê±â¶§¹®¿¡, ÀÌ·±
657       ¾ÆÅ°ÅØÃÄ¿¡¼­ ¿©·¯ <directive
658       module="mpm_common">Listen</directive> Áö½Ã¾î¸¦ »ç¿ëÇϸé
659       À§ÇèÇÏ´Ù.</p>
660
661       <p>½ÇÇà½Ã <directive
662       module="mpm_common">AcceptMutex</directive> Áö½Ã¾î¸¦ »ç¿ëÇÏ¿©
663       mutex ±¸ÇöÀ» º¯°æÇÒ ¼ö ÀÖ´Ù.</p>
664
665       <dl>
666         <dt><code>AcceptMutex flock</code></dt>
667
668         <dd>
669           <p>ÀÌ ¹æ¹ýÀº Àá±ÝÆÄÀÏÀ» Àá±×±âÀ§ÇØ <code>flock(2)</code>
670           ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù (Àá±ÝÆÄÀÏ À§Ä¡´Â <directive
671           module="mpm_common">LockFile</directive> Áö½Ã¾î·Î ÁöÁ¤).</p>
672         </dd>
673
674         <dt><code>AcceptMutex fcntl</code></dt>
675
676         <dd>
677           <p>ÀÌ ¹æ¹ýÀº Àá±ÝÆÄÀÏÀ» Àá±×±âÀ§ÇØ <code>fcntl(2)</code>
678           ½Ã½ºÅÛÈ£ÃâÀ» »ç¿ëÇÑ´Ù (Àá±ÝÆÄÀÏ À§Ä¡´Â <directive
679           module="mpm_common">LockFile</directive> Áö½Ã¾î·Î ÁöÁ¤).</p>
680         </dd>
681
682         <dt><code>AcceptMutex sysvsem</code></dt>
683
684         <dd>
685           <p>(1.3°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀ» SysV½Ä ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÏ¿©
686           mutex¸¦ ±¸ÇöÇÑ´Ù. ºÒÇàÈ÷µµ SysV½Ä ¼¼¸¶Æ÷¾î´Â ³ª»Û
687           ºÎÀÛ¿ëÀÌ ÀÖ´Ù. Çϳª´Â ¾ÆÆÄÄ¡°¡ ¼¼¸¶Æ÷¾î¸¦ Á¤¸®ÇÏÁö
688           ¾Ê°í Á×À» ¼ö Àִ Á¡ÀÌ´Ù (<code>ipcs(8)</code> manpage
689           Âü°í). ´Ù¸¥ Çϳª´Â À¥¼­¹ö¿Í µ¿ÀÏÇÑ uid·Î ½ÇÇàÇÏ´Â
690           CGI°¡ (<em>Áï,</em> <code>suexec</code>³ª
691           <code>cgiwrapper</code>¸¦ »ç¿ëÇÏÁö¾Ê´Â ÇÑ ¸ðµç CGI)
692           ¼¼¸¶Æ÷¾î API¸¦ »ç¿ëÇÏ¿© ¼­ºñ½º°ÅºÎ°ø°ÝÀ» ÇÒ ¼ö ÀÖ´Â
693           Á¡ÀÌ´Ù. ÀÌ·± ÀÌÀ¯¶§¹®¿¡ IRIX¸¦ Á¦¿ÜÇÑ ¾ÆÅ°ÅØÃÄ¿¡¼­
694           ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù (´ëºÎºÐÀÇ IRIX ÄÄÇ»ÅÍ¿¡¼­
695           ¾ÕÀÇ µÎ ¹æ¹ýÀº Áö³ªÄ¡°Ô ¹ö°Ì´Ù).</p>
696         </dd>
697
698         <dt><code>AcceptMutex pthread</code></dt>
699
700         <dd>
701           <p>(1.3°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀº POSIX mutex¸¦ »ç¿ëÇϱ⶧¹®¿¡
702           POSIX ¾²·¹µå ±Ô¾àÀ» ¿ÏÀüÈ÷ ±¸ÇöÇÑ ¾ÆÅ°ÅØÃĶó¸é ¸ðµÎ
703           »ç¿ë°¡´ÉÇÏÁö¸¸, (2.5 ÀÌÈÄ) Solaris¿¡¼­¸¸ ±×°Íµµ Æ¯Á¤
704           ±¸¼º¿¡¼­¸¸ µ¿ÀÛÇϴ µíÇÏ´Ù. ÀÌ ¹æ¹ýÀ» ½ÃµµÇغ»´Ù¸é
705           ¼­¹ö°¡ ¸ØÃç¼­ ÀÀ´äÀ» ¾ÈÇÏ´ÂÁö »ìÆìºÁ¾ß ÇÑ´Ù. Á¤Àû
706           ³»¿ë¸¸ ¼­ºñ½ºÇϴ ¼­¹ö´Â Àß µ¿ÀÛÇϴ °Í °°´Ù.</p>
707         </dd>
708
709         <dt><code>AcceptMutex posixsem</code></dt>
710
711         <dd>
712           <p>(2.0°ú ±× ÀÌÈÄ) ÀÌ ¹æ¹ýÀº POSIX ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÑ´Ù.
713           mutex¸¦ °¡Áø ÇÁ·Î¼¼½ºÀÇ ¾²·¹µå°¡ Á״´ٸé(segfault)
714           ¼¼¸¶Æ÷¾î ¼ÒÀ¯±ÇÀ̠ȸº¹µÇÁö ¾Ê¾Æ¼­ À¥¼­¹ö°¡ ¸ØÃá´Ù.</p>
715         </dd>
716
717       </dl>
718
719       <p>½Ã½ºÅÛ¿¡ À§ ¸ñ·Ï¿¡ ¾ø´Â Á÷·ÄÈ­(serialization) ¹æ¹ýÀÌ
720       Àִٸ頱נ¹æ¹ýÀ» »ç¿ëÇϴ Äڵ带 APR¿¡ Ãß°¡ÇÒ °¡Ä¡°¡ ÀÖ´Ù.</p>
721
722       <p>°í·Á´Â ÇغÃÁö¸¸ ±¸ÇöÇÏÁö¾ÊÀº ´Ù¸¥ ¹æ¹ýÀº ºÎºÐÀûÀ¸·Î
723       ¹Ýº¹¹®À» Á÷·ÄÈ­Çϴ ¹æ¹ýÀÌ´Ù. Áï, ÇÁ·Î¼¼¼­¸¦ ¸î°³¸¸ µé¿©º¸³»´Â
724       °ÍÀÌ´Ù. ÀÌ ¹æ¹ýÀº ¿©·¯ ÀÚ½ÄÀ» µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö À־
725       Á÷·ÄÈ­¶§¹®¿¡ Àüü ´ë¿ªÆøÀ» È°¿ëÇÏÁö ¸øÇϴ ´ÙÁßÇÁ·Î¼¼¼­
726       ÄÄÇ»ÅÍ¿¡¼­¸¸ °ü½ÉÀ» °¡Á®º¼ ¼ö ÀÖ´Ù. ¾ÕÀ¸·Î »ìÆ캼 ºÎºÐÀÌÁö¸¸,
727       ¸Å¿ì º´·ÄÈ­µÈ À¥¼­¹ö°¡ ÈçÇÏÁö ¾Ê¾Æ¼­ ¿ì¼±¼øÀ§°¡ ³·´Ù.</p>
728
729       <p>ÃÖ»óÀÇ ¼º´ÉÀ» ¾ò±âÀ§Çؼ­´Â ¿©·¯ <directive
730       module="mpm_common">Listen</directive> ¹®À» »ç¿ëÇÏÁö ¾Ê´Â
731       °ÍÀÌ ÀÌ»óÀûÀÌ´Ù. ±×·¯³ª °è¼Ó ¼³¸íÇÑ´Ù.</p>
732
733     </section>
734
735     <section>
736
737       <title>accept Á÷·ÄÈ­ - ¼ÒÄÏ ÇÑ°³</title>
738
739       <p>¾ÕÀÇ ¼³¸íÀº ´ÙÁß¼ÒÄÏ ¼­¹ö¿¡´Â ÁÁÁö¸¸, ¼ÒÄÏÀÌ ÇÑ°³ÀÎ
740       ¼­¹ö´Â ¾î¶²°¡? ¿¬°áÀÌ µµÂøÇÒ¶§±îÁö ¸ðµç ÀÚ½ÄÀÌ
741       <code>accept(2)</code>¿¡¼­ ¸ØÃçÀֱ⶧¹®¿¡ À̷л󠰰Àº
742       ¹®Á¦°¡ ¹ß»ýÇÏÁö ¾Ê°í, °í°¥ ¹®Á¦µµ ¾ø´Ù. ±×·¯³ª ½ÇÁ¦·Î´Â
743       ¾Õ¿¡¼­ ¸»ÇÑ ´ë±âÇÏÁö ¾Ê´Â (non-blocking) ¹æ¹ý¿¡¼­ ¹ß»ýÇÏ´Â
744       "°øȸÀü(spinning)" Çö»óÀ» °¨Ãß°í ÀÖ´Ù. ´ëºÎºÐÀÇ TCP ½ºÅÃÀº
745       ¿¬°áÀÌ µµÂøÇϸé Ä¿³ÎÀÌ <code>accept</code>¿¡¼­ ¸ØÃçÀÖ´Â
746       ¸ðµç ÀÚ½ÄÀ» ±ú¿ìµµ·Ï ±¸ÇöµÇÀÖ´Ù. ÇÁ·Î¼¼½ºÁß ÇÑ°³°¡ ¿¬°áÀ»
747       ¾ò°í »ç¿ëÀÚ¿µ¿ªÀ¸·Î µ¹¾Æ°¡°í, ³ª¸ÓÁö´Â Ä¿³Î¿¡¼­ °øȸÀüÇÏ¿©
748       ¿¬°áÀÌ ¾øÀ½À» ¹ß°ßÇϸ頴ٽàÀáÀ» ÀÜ´Ù. »ç¿ëÀÚ¿µ¿ª Äڵ忡¼­´Â
749       ÀÌ·± °øȸÀüÀ» ¾Ë ¼ö ¾øÁö¸¸, ºÐ¸íÈ÷ Á¸ÀçÇÑ´Ù. ±×·¡¼­ ´ÙÁß¼ÒÄÏÀÇ
750       ´ë±âÇÏÁö ¾Ê´Â ¹æ¹ý°ú µ¿ÀÏÇÏ°Ô ºÎÇϸ¦ ³ôÀ̴ ºÒÇÊ¿äÇÑ ÇൿÀÌ
751       ÀϾ´Ù.</p>
752
753       <p>±×·¡¼­ ¿ì¸®´Â ¿©·¯ ¾ÆÅ°ÅØÃÄ¿¡¼­ ¼ÒÄÏÀÌ ÇÑ°³ÀΠ°æ¿ì¿¡µµ
754       Á÷·ÄÈ­Çϸ頴õ "Àß" µ¿ÀÛÇÔÀ» ¹ß°ßÇß´Ù. ±×·¡¼­ °ÅÀÇ ´ëºÎºÐÀÇ
755       °æ¿ì ±âº»ÀûÀ¸·Î Á÷·ÄÈ­¸¦ »ç¿ëÇÑ´Ù. ¸®´ª½º¿¡¼­ (Ä¿³Î 2.0.30,
756       128Mb ¸Þ¸ð¸®¿¡ µà¾ó Pentium pro) ½ÇÇèÇÑ °á°ú ¼ÒÄÏ ÇÑ°³¸¦
757       Á÷·ÄÈ­Çϸé ÇÏÁö ¾ÊÀº °æ¿ì¿¡ ºñÇØ ÃÊ´ç ¿äûÀÌ 3% ¹Ì¸¸
758       ÁÙ¾îµé¾ú´Ù. ±×·¯³ª Á÷·ÄÈ­¸¦ ÇÏÁö ¾ÊÀº °æ¿ì ¿äû´ç 100ms
759       Áö¿¬ÀÌ ¹ß»ýÇß´Ù. ÀÌ Áö¿¬Àº ¾Æ¸¶µµ LAN¿¡¼­ ¹ß»ýÇϴ ±ä
760       ¿¬°á¼±¶§¹®ÀÏ °ÍÀÌ´Ù. ¼ÒÄÏÀÌ ÇÑ°³ÀΠ°æ¿ì Á÷·ÄÈ­¸¦ »ç¿ëÇÏÁö
761       ¾ÊÀ¸·Á¸é <code>SINGLE_LISTEN_UNSERIALIZED_ACCEPT</code>¸¦
762       Á¤ÀÇÇÑ´Ù.</p>
763
764     </section>
765
766     <section>
767
768       <title>Close Áö¿¬(lingering)</title>
769
770       <p><a
771       href="http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-connection-00.txt">
772       draft-ietf-http-connection-00.txt</a> 8Àý¿¡¼­ ¼³¸íÇϵíÀÌ
773       <strong>¾ÈÁ¤ÀûÀÎ</strong> À¥¼­¹ö°¡ µÇ·Á¸é, Åë½ÅÀÇ ¾ç ¹æÇâÀ»
774       µ¶¸³ÀûÀ¸·Î ´ÝÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù (TCP ¿¬°áÀº ½Ö¹æÇâÀÌ°í,
775       ¹æÇâÀº ¼­·Î µ¶¸³ÀûÀÌ´Ù). ÀÌÁ¡À» ´Ù¸¥ ¼­¹ö¿¡¼­´Â ÀÚÁÖ
776       °£°úÇÏÁö¸¸, ¾ÆÆÄÄ¡´Â 1.2ºÎÅÍ Á¤È®È÷ ±¸ÇöÇØ¿Ô´Ù.</p>
777
778       <p>ÀÌ ±â´ÉÀ» ºÎÁÖÀÇÇÏ°Ô ¾ÆÆÄÄ¡¿¡ Ãß°¡ÇßÀ»¶§ ¿©·¯ À¯´Ð½º
779       ¹öÀü¿¡¼­ ¸¹Àº ¹®Á¦°¡ ¹ß»ýÇß´Ù. TCP ±Ô¾àÀº
780       <code>FIN_WAIT_2</code>¿¡ Å¸ÀӾƿôÀÌ ÀÖ´Ù°í Á¤ÇÏÁö ¾Ê¾ÒÁö¸¸,
781       ±ÝÁöÇÏÁöµµ ¾Ê¾Ò´Ù. Å¸ÀӾƿôÀÌ ¾ø´Â ½Ã½ºÅÛ¿¡¼­ ¾ÆÆÄÄ¡ 1.2´Â
782       ¸¹Àº ¼ÒÄÏÀ» ¿µ¿øÈ÷ <code>FIN_WAIT_2</code> »óÅ·Π¸¸µé¾ú´Ù.
783       ¸¹Àº °æ¿ì ÀÌ ¹®Á¦´Â Á¦Àۻ簡 Á¦°øÇϴ ÃֽŠTCP/IP ÆÐÄ¡¸¦
784       Àû¿ëÇÏ¿© ÇØ°áÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª Á¦Àۻ簡 ÆÐÄ¡¸¦ ¹ßÇ¥ÇÏÁö
785       ¾Ê´Â °æ¿ì°¡ (<em>Áï,</em> SunOS4 -- ¼Ò½º ¶óÀ̼±½º°¡ ÀÖ´Â
786       »ç¶÷Àº Á÷Á¢ ÆÐÄ¡ÇÒ ¼ö ÀÖÁö¸¸) Àֱ⶧¹®¿¡ ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö
787       ¾Ê±â·Î °áÁ¤Çß´Ù.</p>
788
789       <p>¹æ¹ýÀº µÎ°¡Áö´Ù. Çϳª´Â ¼ÒÄÏ ¿É¼Ç <code>SO_LINGER</code>¸¦
790       »ç¿ëÇϴ ¹æ¹ýÀÌ´Ù. ±×·¯³ª ºÒÇàÈ÷µµ ´ëºÎºÐÀÇ TCP/IP ½ºÅÃÀº
791       ÀÌ ¿É¼ÇÀ» ¿Ã¹Ù·Î ±¸ÇöÇÏÁö ¾Ê¾Ò´Ù. ¿Ã¹Ù·Î ±¸ÇöÇÑ ½ºÅÿ¡¼­
792       Á¶Â÷µµ (<em>Áï,</em> ¸®´ª½º 2.0.31) ÀÌ ¹æ¹ýÀº ´ÙÀ½ ¹æ¹ýº¸´Ù
793       ´õ cpu¸¦ Àâ¾Æ¸Ô´Â´Ù.</p>
794
795       <p>¾ÆÆÄÄ¡´Â º¸Åë (<code>http_main.c</code>¿¡ ÀÖ´Â)
796       <code>lingering_close</code>¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ÀÌ ÇÔ¼ö´Â
797       ´ëÃæ ´ÙÀ½°ú °°´Ù:</p>
798
799       <example>
800         void lingering_close (int s)<br />
801         {<br />
802         <indent>
803           char junk_buffer[2048];<br />
804           <br />
805           /* shutdown the sending side */<br />
806           shutdown (s, 1);<br />
807           <br />
808           signal (SIGALRM, lingering_death);<br />
809           alarm (30);<br />
810           <br />
811           for (;;) {<br />
812           <indent>
813             select (s for reading, 2 second timeout);<br />
814             if (error) break;<br />
815             if (s is ready for reading) {<br />
816             <indent>
817               if (read (s, junk_buffer, sizeof (junk_buffer)) &lt;= 0) {<br />
818               <indent>
819                 break;<br />
820               </indent>
821               }<br />
822               /* just toss away whatever is here */<br />
823             </indent>
824             }<br />
825           </indent>
826           }<br />
827           <br />
828           close (s);<br />
829         </indent>
830         }
831       </example>
832
833       <p>ÀÌ ÄÚµå´Â ¿¬°áÀ» ´ÝÀ»¶§ ´õ CPU¸¦ »ç¿ëÇÏÁö¸¸, ¾ÈÁ¤ÀûÀÎ
834       ±¸ÇöÀ» À§ÇØ ÇÊ¿äÇÏ´Ù. HTTP/1.1ÀÌ ´õ ³Î¸® ÆÛÁö°í ¸ðµç ¿¬°áÀ»
835       À¯ÁöÇÑ´Ù¸é(persistent), ¿¬°áÀ» ¹Þ´Â ºñ¿ëÀº ¿©·¯ ¿äûÀ»
836       Ã³¸®Çϸ鼭 »ó¼âµÉ °ÍÀÌ´Ù. À§ÇèÇÏ°Ôµµ
837       <code>NO_LINGCLOSE</code>¸¦ Á¤ÀÇÇÏ¿© ÀÌ ±â´ÉÀ» »ç¿ëÇÏÁö
838       ¾ÊÀ» ¼ö ÀÖÁö¸¸, Àý´ë·Î ±ÇÇÏÁö ¾Ê´Â´Ù. Æ¯È÷ HTTP/1.1
839       ÆÄÀÌÇÁ¶óÀΠ<transnote>¿¬°áÀ¯Áö »óÅ¿¡¼­ ÀÀ´äÀ» ±â´Ù¸®Áö
840       ¾Ê°í ¿©·¯ ¿äûÀ» º¸³»´Â ±â¼ú</transnote> ¿¬°áÀ¯Áö¿¡´Â
841       <code>lingering_close</code>°¡ ÇʼöÀûÀÌ´Ù (±×¸®°í <a
842       href="http://www.w3.org/Protocols/HTTP/Performance/Pipeline.html">
843       ÆÄÀÌÇÁ¶óÀΠ¿¬°áÀÌ ´õ ºü¸£±â¶§¹®¿¡</a> »ç¿ëÇϱ根ٶö °ÍÀÌ´Ù).</p>
844
845     </section>
846
847     <section>
848
849       <title>Scoreboard ÆÄÀÏ</title>
850
851       <p>¾ÆÆÄÄ¡ÀÇ ºÎ¸ð¿Í ÀÚ½ÄÀº scoreboard¶ó´Â °ÍÀ» ÅëÇØ ¼­·Î
852       Åë½ÅÇÑ´Ù. ÀÌ»óÀûÀ¸·Î´Â scoreboard¸¦ °øÀ¯¸Þ¸ð¸®·Î ±¸ÇöÇؾß
853       ÇÑ´Ù. ¿ì¸® °³¹ßÀÚ°¡ Çش砿üÁ¦¿¡ Á¢±ÙÇÒ ¼ö Àְųª »ó¼¼ÇÑ
854       Æ÷Æà°á°ú¸¦ ¹ÞÀº °æ¿ì º¸Åë °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÏ¿© ±¸ÇöÇÑ´Ù.
855       ³ª¸ÓÁö´Â µð½ºÅ©¿¡ Àִ ÆÄÀÏÀ» »ç¿ëÇÏ¿© ±¸ÇöÇÑ´Ù. µð½ºÅ©¿¡
856       Àִ ÆÄÀÏÀº ´À¸®°í ½Å·Úµµ°¡ ¶³¾îÁø´Ù (±â´Éµµ ´õ Àû´Ù).
857       <code>src/main/conf.h</code> ÆÄÀÏ¿¡¼­ »ç¿ëÇϴ ¾ÆÅ°ÅØÃĸ¦
858       Ã£¾Æ¼­ <code>USE_MMAP_SCOREBOARD</code> È¤Àº
859       <code>USE_SHMGET_SCOREBOARD</code>ÀÎÁö È®ÀÎÇÑ´Ù. µÑÁß
860       Çϳª¸¦ (°¢°¢ ÇÔ²² »ç¿ëÇÒ <code>HAVE_MMAP</code>À̳ª
861       <code>HAVE_SHMGET</code>µµ °°ÀÌ) Á¤ÀÇÇϸ頰øÀ¯¸Þ¸ð¸® Äڵ带
862       »ç¿ëÇÑ´Ù. ½Ã½ºÅÛÀÌ ´Ù¸¥ Á¾·ùÀÇ °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù¸é
863       <code>src/main/http_main.c</code> ÆÄÀÏÀ» ¼öÁ¤ÇÏ¿© ¾ÆÆÄÄ¡¿¡¼­
864       °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÈÅ(hook)À» Ãß°¡Ç϶ó. (¶ÇÇÑ
865       ÆÐÄ¡¸¦ ¿ì¸®¿¡°Ô º¸³»Áֱ根ٶõ´Ù.)</p>
866
867       <note>¿ª»çÀû ¼³¸í: ¾ÆÆÄÄ¡ÀÇ ¸®´ª½º ¹öÀüÀº ¾ÆÆÄÄ¡ 1.2 ¹öÀüºÎÅÍ
868       °øÀ¯¸Þ¸ð¸®¸¦ »ç¿ëÇϱ⠽ÃÀÛÇß´Ù. ¸®´ª½º¿¡¼­ Ãʱ⠾ÆÆÄÄ¡
869       ¹öÀüÀÌ ´À¸®°í ½Å·Úµµ°¡ ¶³¾îÁ³±â ¶§¹®ÀÌ´Ù.</note>
870
871     </section>
872
873     <section>
874
875       <title>DYNAMIC_MODULE_LIMIT</title>
876
877       <p>¸ðµâÀ» µ¿ÀûÀ¸·Î ÀоîµéÀÌÁö ¾Ê´Â´Ù¸é (°¡´ÉÇÑ Á¶±ÝÀ̶óµµ
878       ¼º´ÉÀ» ³ôÀ̱âÀ§ÇØ ÀÌ ±ÛÀ» Àд´ٸ頾Ƹ¶µµ ¸ðµâÀ» µ¿ÀûÀ¸·Î
879       ÀоîµéÀÌÁö ¾ÊÀ» °ÍÀÌ´Ù), ¼­¹ö¸¦ ÄÄÆÄÀÏÇÒ¶§
880       <code>-DDYNAMIC_MODULE_LIMIT=0</code>À» Ãß°¡ÇÑ´Ù. ±×·¯¸é
881       ¸ðµâÀ» µ¿ÀûÀ¸·Î ÀоîµéÀ̱âÀ§ÇØ ÇÒ´çÇϴ ¸Þ¸ð¸®¸¦ Àý¾àÇÑ´Ù.</p>
882
883     </section>
884
885   </section>
886
887   <section id="trace">
888
889     <title>ºÎ·Ï: ½Ã½ºÅÛÈ£Ãâ ±â·ÏÀ» ÀÚ¼¼È÷ ºÐ¼®Çϱâ</title>
890
891     <p>´ÙÀ½Àº Solaris 8¿¡¼­ worker MPMÀ» »ç¿ëÇÑ ¾ÆÆÄÄ¡ 2.0.38ÀÇ
892     ½Ã½ºÅÛÈ£Ãâ ±â·Ï(trace)ÀÌ´Ù. ¾Æ·¡ ¸í·É¾î¸¦ »ç¿ëÇÏ¿© ±â·ÏÀ»
893     ¾ò¾ú´Ù:</p>
894
895     <example>
896       truss -l -p <var>httpd_child_pid</var>.
897     </example>
898
899     <p><code>-l</code> ¿É¼ÇÀ» »ç¿ëÇϸé truss´Â ½Ã½ºÅÛÈ£ÃâÀ»
900     Çϴ LWP (lightweight process, °æ·®±Þ ÇÁ·Î¼¼½º--SolarisÀÇ
901     Ä¿³Î¼öÁØ ¾²·¹µå) ID¸¦ °°ÀÌ ±â·ÏÇÑ´Ù.</p>
902
903     <p>´Ù¸¥ ½Ã½ºÅÛ¿¡´Â <code>strace</code>, <code>ktrace</code>,
904     <code>par</code> °°Àº ½Ã½ºÅÛÈ£Ãâ ÃßÀû µµ±¸°¡ ÀÖ´Ù. °á°ú´Â
905     ºñ½ÁÇÏ´Ù.</p>
906
907     <p>Ŭ¶óÀ̾ðÆ®´Â À¥¼­¹ö¿¡°Ô Å©±â°¡ 10KBÀΠÁ¤Àû ÆÄÀÏÀ» ¿äûÇÑ´Ù.
908     Á¤ÀûÀΠÆÄÀÏÀ» ¿äûÇÏÁö ¾Ê°Å³ª ³»¿ëÇù»óÇϴ ¿äûÀ» ÇÑ °æ¿ì
909     ±â·ÏÀÌ ¸Å¿ì ´Ù¸£´Ù (¶§·Î´Â ¸Å¿ì ¾Ë¾Æº¸±â Èûµé´Ù).</p>
910
911     <example>
912 <pre>/67:    accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)
913 /67:    accept(3, 0x00200BEC, 0x00200C0C, 1)            = 9</pre>
914     </example>
915
916     <p>À§¿¡¼­ ¿¬°á´ë±â(listener) ¾²·¹µå°¡ LWP #67¿¡¼­ ½ÇÇàµÊÀ»
917     ¾Ë ¼ö ÀÖ´Ù.</p>
918
919     <note><code>accept(2)</code> Á÷·ÄÈ­¸¦ »ç¿ëÇÏÁö ¾ÊÀ½À» ÁÖ¸ñÇ϶ó.
920     ¿©·¯ Æ÷Æ®¸¦ ±â´Ù¸®Áö¾Ê´Â °æ¿ì ÀÌ Ç÷¡ÆûÀÇ worker MPMÀº
921     ±âº»ÀûÀ¸·Î Á÷·ÄÈ­ÇÏÁö ¾ÊÀº accept¸¦ »ç¿ëÇÑ´Ù.</note>
922
923     <example>
924 <pre>/65:    lwp_park(0x00000000, 0)                         = 0
925 /67:    lwp_unpark(65, 1)                               = 0</pre>
926     </example>
927
928     <p>¿¬°áÀº ¹Þ¾ÆµéÀÌ°í(accept) ¿¬°á´ë±â ¾²·¹µå´Â
929     worker ¾²·¹µå¸¦ ±ú¿ö¼­ ¿äûÀ» Ã³¸®ÇÏ°Ô ÇÑ´Ù. ¾Æ·¡ ±â·Ï¿¡¼­
930     ¿äûÀ» Ã³¸®Çϴ worker ¾²·¹µå°¡ LWP #65ÀÓÀ» ¾Ë ¼ö ÀÖ´Ù.</p>
931
932     <example>
933 <pre>/65:    getsockname(9, 0x00200BA4, 0x00200BC4, 1)       = 0</pre>
934     </example>
935
936     <p>°¡»óÈ£½ºÆ®¸¦ ±¸ÇöÇϱâÀ§ÇØ ¾ÆÆÄÄ¡´Â ¿¬°áÀ» ¹Þ¾ÆµéÀÎ
937     Áö¿ª(local) ¼ÒÄÏ ÁÖ¼Ò¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. (°¡»óÈ£½ºÆ®¸¦ »ç¿ëÇÏÁö
938     ¾Ê°Å³ª <directive module="mpm_common">Listen</directive>
939     Áö½Ã¾î¿¡ ¿ÍÀϵåÄ«µå ÁÖ¼Ò¸¦ »ç¿ëÇÏÁö ¾ÊÀº °æ¿ì µî) ¸¹Àº °æ¿ì
940     À̠ȣÃâÀ» ¾ø¾Ù ¼ö ÀÖ´Ù. ±×·¯³ª ¾ÆÁ÷ ÀÌ·± ÃÖÀûÈ­ ÀÛ¾÷ÀÌ
941     ¾ÈµÇÀÖ´Ù. </p>
942
943     <example>
944 <pre>/65:    brk(0x002170E8)                                 = 0
945 /65:    brk(0x002190E8)                                 = 0</pre>
946     </example>
947
948     <p><code>brk(2)</code> È£ÃâÀº Èü(heap)¿¡¼­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù.
949     À¥¼­¹ö´Â ´ëºÎºÐÀÇ ¿äû Ã³¸®½Ã ÀÚü ¸Þ¸ð¸®
950     ÇÒ´çÀÚ(<code>apr_pool</code>°ú <code>apr_bucket_alloc</code>)¸¦
951     »ç¿ëÇϱ⶧¹®¿¡ ½Ã½ºÅÛÈ£Ãâ ±â·Ï¿¡¼­ ÀÌ ½Ã½ºÅÛÈ£ÃâÀ» º¸±â°¡
952     µå¹°´Ù. ÀÌ ±â·Ï¿¡¼­ À¥¼­¹ö´Â ½ÃÀÛÇÏÀÚ¸¶ÀÚ ÀÚü ¸Þ¸ð¸® ÇÒ´çÀÚ°¡
953     »ç¿ëÇÒ ¸Þ¸ð¸®ºí·ÏÀ» ¾ò±âÀ§ÇØ <code>malloc(3)</code>À» È£ÃâÇÑ´Ù.</p>
954
955     <example>
956 <pre>/65:    fcntl(9, F_GETFL, 0x00000000)                   = 2
957 /65:    fstat64(9, 0xFAF7B818)                          = 0
958 /65:    getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0
959 /65:    fstat64(9, 0xFAF7B818)                          = 0
960 /65:    getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0
961 /65:    setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0
962 /65:    fcntl(9, F_SETFL, 0x00000082)                   = 0</pre>
963     </example>
964
965     <p>´ÙÀ½ worker ¾²·¹µå´Â Å¬¶óÀ̾ðÆ®ÀÇ ¿¬°á(ÆÄÀϱâ¼úÀÚ 9)À»
966     ´ë±â¾ÈÇÔ(non-blocking) »óÅ·Π¹Ù²Û´Ù. <code>setsockopt(2)</code>¿Í
967     <code>getsockopt(2)</code> È£ÃâÀº SolarisÀÇ libc°¡ ¼ÒÄÏ¿¡
968     ´ëÇÑ <code>fcntl(2)</code>À» ¾î¶»°Ô Ã³¸®ÇÏ´ÂÁö º¸¿©ÁØ´Ù.</p>
969
970     <example>
971 <pre>/65:    read(9, " G E T   / 1 0 k . h t m".., 8000)     = 97</pre>
972     </example>
973
974     <p>worker ¾²·¹µå´Â Å¬¶óÀ̾ðÆ®·Î ºÎÅÍ ¿äûÀ» Àд´Ù.</p>
975
976     <example>
977 <pre>/65:    stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0
978 /65:    open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10</pre>
979     </example>
980
981     <p>À¥¼­¹ö ¼³Á¤Àº <code>Options FollowSymLinks</code>¿Í
982     <code>AllowOverride None</code>ÀÌ´Ù. ±×·¡¼­ ¿äûÇÑ ÆÄÀÏ°æ·ÎÀÇ
983     °¢ µð·ºÅ丮¿¡ ´ëÇØ <code>lstat(2)</code>Çϰųª
984     <code>.htaccess</code> ÆÄÀÏÀ» °Ë»çÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ÆÄÀÏÀ»
985     °Ë»çÇϱâÀ§ÇØ, 1) ÆÄÀÏÀÌ ÀÖ´ÂÁö, 2) µð·ºÅ丮°¡ ¾Æ´Ñ ÀϹÝÆÄÀÏÀÎÁö,
986     <code>stat(2)</code> È£Ã⸸ Çϸ頵ȴÙ.</p>
987
988     <example>
989 <pre>/65:    sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C)      = 10269</pre>
990     </example>
991
992     <p>ÀÌ °æ¿ì À¥¼­¹ö´Â ÇѹøÀÇ <code>sendfilev(2)</code> ½Ã½ºÅÛÈ£Ãâ·Î
993     HTTP ÀÀ´äÇì´õ¿Í ¿äûÇÑ ÆÄÀÏÀ» Àü¼ÛÇÒ ¼ö ÀÖ´Ù. Sendfile Áö¿ø¿©ºÎ´Â
994     ¿î¿µÃ¼Á¦¸¶´Ù ´Ù¸£´Ù. ´Ù¸¥ ½Ã½ºÅÛÀ̶ó¸é <code>sendfile(2)</code>À»
995     È£ÃâÇϱâ Àü¿¡ Çì´õ¸¦ º¸³»±âÀ§ÇØ <code>write(2)</code>³ª
996     <code>writev(2)</code> È£ÃâÀ» ÇÑ´Ù.</p>
997
998     <example>
999 <pre>/65:    write(4, " 1 2 7 . 0 . 0 . 1   -  ".., 78)      = 78</pre>
1000     </example>
1001
1002     <p><code>write(2)</code> È£ÃâÀº Á¢±Ù·Î±×(access log)¿¡ ¿äûÀ»
1003     ±â·ÏÇÑ´Ù. ÀÌ ±â·Ï¿¡ <code>time(2)</code> È£ÃâÀÌ ¾øÀ½À» ÁÖ¸ñÇ϶ó.
1004     ¾ÆÆÄÄ¡ 1.3°ú ´Þ¸® ¾ÆÆÄÄ¡ 2.0Àº ½Ã°£À» ¾Ë±âÀ§ÇØ
1005     <code>gettimeofday(3)</code>¸¦ »ç¿ëÇÑ´Ù.
1006     <code>gettimeofday</code>¸¦ ÃÖÀûÈ­ÇÑ ¸®´ª½º¿Í Solaris °°Àº
1007     ¸î¸î ¿î¿µÃ¼Á¦¿¡¼­´Â ÀϹÝÀûÀΠ½Ã½ºÅÛÈ£Ã⠺δãÀÌ ¾ø´Ù.</p>
1008
1009     <example>
1010 <pre>/65:    shutdown(9, 1, 1)                               = 0
1011 /65:    poll(0xFAF7B980, 1, 2000)                       = 1
1012 /65:    read(9, 0xFAF7BC20, 512)                        = 0
1013 /65:    close(9)                                        = 0</pre>
1014     </example>
1015
1016     <p>worker ¾²·¹µå´Â ¿¬°áÀ» Áö¿¬´Ý±â(lingering close)ÇÑ´Ù.</p>
1017
1018     <example>
1019 <pre>/65:    close(10)                                       = 0
1020 /65:    lwp_park(0x00000000, 0)         (sleeping...)</pre>
1021     </example>
1022
1023     <p>¸¶Áö¸·À¸·Î worker ¾²·¹µå´Â ¹æ±Ý Àü¼ÛÇÑ ÆÄÀÏÀ» ´Ý°í,
1024     ¿¬°á´ë±â(listener) ¾²·¹µå°¡ ´Ù¸¥ ¿¬°áÀ» ÇÒ´çÇÒ ¶§±îÁö
1025     Á¤ÁöÇÑ´Ù.</p>
1026
1027     <example>
1028 <pre>/67:    accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)</pre>
1029     </example>
1030
1031     <p>±×µ¿¾È ¿¬°á´ë±â ¾²·¹µå´Â ¿¬°áÀ» (¸ðµç worker°¡ ÀÛ¾÷ÁßÀ̸é
1032     ¿¬°á´ë±â ¾²·¹µå¸¦ ¸ØÃߴ worker MPMÀÇ È帧Á¦¾î ±â´É¿¡ µû¶ó)
1033     worker ¾²·¹µå¿¡ ÇÒ´çÇÏÀÚ¸¶ÀÚ ´Ù¸¥ ¿¬°áÀ» ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Ù.
1034     ÀÌ ±â·Ï¿¡´Â ³ª¿ÀÁö ¾ÊÁö¸¸, worker ¾²·¹µå°¡ ¹æ±Ý ¹ÞÀº ¿¬°áÀ»
1035     Ã³¸®Çϴ µ¿¾È ´ÙÀ½ <code>accept(2)</code>°¡ (¿äûÀÌ ¸Å¿ì
1036     ¸¹Àº °æ¿ì Ç×»ó) ÀϾ ¼ö ÀÖ´Ù.</p>
1037
1038   </section>
1039
1040 </manualpage>
1041