Apache HTTP Server Version 2.4
ƢÉÇÑ î: tr
ÄÄ 2.0À âÉú ÃƢÉú ÉÀÇ ÕÇüÀÌ ÂµµÏ èÇÑ üë À¥öÀÌÙ. ¥ÄÅ© âÏÀ» ìâÀÇ èÇÏÁö ÊÒÁö ÄÄ 2.0À ÇÁ¦ À Ʃì ôÀ ÉÀ» Ù.
ÄÄ 1.3ú ñÇ 2.0 öÀüÀ Ã硤ú ÈÀå(scalability)À» ôÀÌâÀÇ À ÃÖÀûȦ ÇÙ. â»ƨÀÎ ëÎ ÃÖÀûÈÇÑ ƨÀ» »çëÇÑÙ. ¯ ÄÄÄÀÏà ÈÀ ÇÇàà ÁÀÌ É Å« µÇâÀ» ÁÙ ö ÀÖÙ. ÀÌ Â ÄÄ 2.0ÀÇ ÉÀ» Çâ»óÇÏâÀÇ ö üÀÚƢ ÁÇÒ ö ÀÖ ÉÇÀ» íÇÑÙ. îҩ Á ÉÇÀ À¥öƢ ÇϵåîÍ îµÃÁ¦ÀÇ âÉÀ» õ À ÈƢëÇϵµÏ ÇÏ Ýé, îҩ ÉÇÀ Óµµ¦ ÀÇ âÉÀ» Èñ»ýÇÑÙ.
À¥ö É ƢÀå Å« µÇâÀ» ÁÖ ÍÀ 碥Ù. ÒÀ äûç Áö¬Ã£À» »çëÀÚƢ "ÃÈ ü£Ùí" »ý¢ÇÏÁö ÇÏÔ Ã硾âҡש碯 À¥ö ÒÀ» ÇÏé ȵÈÙ. ÀÁÁöé »çëÀÚ ÁÁöÇÏí Ùà Á¢ÓÇÏ© ÎÇÏƢ èÓ ÁõƢÇÑÙ. MaxClients
ÁöÃî¦ ÁÀýÇÏ© À¥öƢ ÒÀ» ÇÒ ÁµµÎ À ÀÚÄÀ» µéÁöʵµÏ Ç ÇÑÙ. ýÀ £ÜÇÏÙ: top
ú ơÀ µµ ÇÁÎ ñÏÀ» í ÄÄ ÇÁÎÀÇ òÕ »çëÀ» ËÈÄ, Àüà »çëƢÉÇÑ 碯 Ù¥ ÇÁεéÀÌ »çëÇÒ Ʃ£À» »« ƨ «Ù.
ÓÁö òüÇÏÙ: ÃÈ ü¥ U, ÃÈ ü¥ 碯Ä«µå, ÃÈ ü¥ µÅ©, ©â "ÃÈ ü¥"À ÇÇèÀ» Ç áÁÇ ÇÑÙ.
îµÃÁ¦Â Åë ¢ÀÚ Ë ÅÃÇÒ ÀÏÀÌÙ. ¯ ÀÏÝÀûÀÎ À¯ëÇÏÙí ÇíµÈ îƢÁö ÁöÄÀÌ ÀÖÙ:
ÅÃÇÑ îµÃÁ¦ÀÇ ÃÖÅ ÈÁ öÀüú Ħ ÇÇàÇÑÙ. À îµÃÁ¦ Á¦ÀÛ»ç ÃÖÙ T ÅÃú µå óÀÌê¯碯 À ÓµµÇâ»óÀ» ÇÙ.
îµÃÁ¦Ƣ sendfile(2)
ÃÅÛÈ£ÃâÀ» ÁöÇÑÙé, À̦ »çëÇÏâÀÇÑ öÀüÀÌ Ä¦ ÄÇÏÂÁö ÈÀÎÇÑÙ. (¦ µéî, 碥óé 2.4 ÀÌ»ó öÀüÀ» ҩÇÑÙ. Solaris 8 ÃÊâ öÀüÀ ÄƢ ÇÊäÇÏÙ.) ÁöÇÏ ÃÅÛÀÌóé ÄÄ 2 sendfile
À» »çëÇÏ© U¦ ú »çëÇÏç ÁÀû ÄÀÏÀ» õ » ÀüÛÇÒ ö ÀÕÙ.
üÃµÈ µâ | üÃµÈ ÁöÃî |
---|---|
ÄÄ 1.3 ÀÌÀü logresolve
ÇÁÎ¥À» »çëÇÏó.
Îà ÀÛÀÌ ö É ÇµÇâÀ» ÌÄÇÎ ÇÁ¦ »çëÇÏ À¥öƢ Ñ Ù¥ ÄÄÇ»ÅÍ ÎÄÀÏÀ» ÈÄÃÇÏ ÙõÙ.
ÁöÃî¦ »çëÇÑÙé (Áï, IP ÁÖÒƢ Ñ È£碬íÀÌ µµÀÎíÀ» »çëÇÑÙé) εÀÌ Á- DNS Ë»öÀ» (Ë»öÀ» ÇÑÈÄ ÇÀÇÎ ¯ƩµÇúÂÁö ÈÀÎÇÏâÀÇ Ùà ˻ö) Ç ÇÑÙ. ¯ÇÎ ÉÀ» ôÀÌâÀÇ ÀÌ ÁöÃî ƢÉÇÏé ÀÌעëÅ IP ÁÖÒ¦ »çëÇÑÙ.Deny
from domain
<Location /server-status>
Ç µîÀÎ ÁöÃîÀÇ ÀûëüÀע¦ Á¦ÇÑÇÒ ö ÀÖÀÀ» âïÇÏó. ÀÌ Ʃì ÁҡÇ Â äû DNS ÁȦ ÇÑÙ. ÙÀÀ .html
ú .cgi
ÄÀÏ DNS Ë»öÀ» ÇÏ Á¦Ù:
HostnameLookups off
<Files ~ "\.(html|cgi)$">
HostnameLookups on
</Files>
¯ CGI DNSíÀÌ ÇÊäÇÒ »ÓÀÌóé, ÇÊäÇÑ ¯Á CGI gethostbyname
È£ÃâÀ» ÇϵµÏ íÁÇ ö ÀÖÙ.
URL Ʃ£ Options FollowSymLinks
¦ »çëÇÏÁöÊí Options SymLinksIfOwnerMatch
¦ »çëÇÏé ÄÄ ɵũ¦ Ë»çÇÏâÀÇ ÃÅÛÈ£ÃâÀ» ÇÑ õ Ç ÇÑÙ. ÄÀÏíÀÇ ¢ ÎҢÙ ÇÑ õ È£ÃâÀ» ÇÑÙ. ¦ µéî, ÁÀÌ ÙÀú ơơí:
DocumentRoot /www/htdocs
<Directory />
Options SymLinksIfOwnerMatch
</Directory>
/index.html
URI ëÇÑ äûÀÌ ÀÖÙí ƢÁÇÏÀÚ. ¯é ÄÄ /www
, /www/htdocs
, /www/htdocs/index.html
¢¢ ëÇ lstat(2)
¦ È£ÃâÇÑÙ. lstats
áú¦ ÄÌÇÏÁö Êâҡש碯 äûÀÌ µéîà ҡעҢÙ Å ơÀ ÀÛÀ» ÇÑÙ. ÁÂ¥ ɵũ È Ë»ç¦ ÇÑÙé ÙÀú ơÀÌ ÇÒ ö ÀÖÙ:
DocumentRoot /www/htdocs
<Directory />
Options FollowSymLinks
</Directory>
<Directory /www/htdocs>
Options -FollowSymLinks +SymLinksIfOwnerMatch
</Directory>
ÀÌ Ʃì ÃÖÒÇÑ RewriteRule
À» »çëÇÑ Ʃìµµ ÀעÍ ñÁÇÑ ÇÀÌ ÇÊäÇÏÙ. ɵũ ÈÀ» íÁÇÏÁö Êí ÃÖíÀÇ ÉÀ» òÀÁé, FollowSymLinks
¦ ÁÇÏí, SymLinksIfOwnerMatch
 ÀýëΠȵÈÙ.
URL Ʃ£ overrides¦ ÇãëÇÑÙé (Åë .htaccess
ÄÀÏ) ÄÄ ÄÀÏíÀÇ ¢ ÎҢÙ .htaccess
¦ õµÇÑÙ. ¦ µéî,
DocumentRoot /www/htdocs
<Directory />
AllowOverride all
</Directory>
/index.html
URI ëÇÑ äûÀÌ ÀÖÙí ƢÁÇÏÀÚ. ÄÄ /.htaccess
, /www/.htaccess
, /www/htdocs/.htaccess
¦ Áí õµÇÑÙ. ÇáÃ¥À ÕÀÇ Options FollowSymLinks
ƩìÍ ñÁÇÏÙ. ÃÖíÀÇ ÉÀ» òÀÁé ÄÀÏÃÅÛ ëÇ Ç»ó AllowOverride None
À» »çëÇÑÙ.
ƢÉÇÏí ÁÂ¥ ÁҡÝÀÇ ÉÇâ»óµµ üÉÀÌ ÀÖÙé »ëÇù»óÀ» ÂÙ. ÇÁ¦Î Çù»óÀÇ À̵À ÉÀúÇÏÙ ÀÛÙ. ö¦ ü£Ô ÇÒ ö ÀÖÙ. ÙÀú ơÀÌ ÍÀϵåÄ«µå¦ »çëÇÏ ëÅ:
DirectoryIndex index
ÏÀüÇÑ ñÏÀ» »çëÇÑÙ:
DirectoryIndex index.cgi index.pl index.shtml index.html
ƢÀå ÈçÇÑ ÍÀ» Õ µÙ.
Ç, µÅä碯 ÄÀϵéÀ» ã MultiViews
ÙÂ, ÇÑ ÄÀÏ ÀÀé ÇÊäÇÑ Á¦ òÀ» ö ÀÖ type-map
ÄÀÏÀ» ÁÁ¢ µå ÍÀÌ õ üÀ» íÉÇÏó.
»çÀÌ碯 »ëÇù»óÀÌ ÇÊäÇÏÙé Çù»óÀ» ÀÇ Options MultiViews
ÁöÃî¦ »çëÇÏâÙ type-map
ÄÀÏÀ» íÁÇÏó. Çù»óý ëÇÑ ÀÚÇÑ íú type-map
ÄÀÏÀ» µå ýÀ »ëÇù»ó ¦ ÂüíÇÏó.
¦ µéî, server-side-include¦ ÃÇÏ µî ÄÄ 2.0ÀÌ ÀüÛÇÒ ÄÀÏÀ» ÀÀ»ҡ îµÃÁ¦Ƣ mmap(2)
µîÀ» ÁöÇÑÙé ÄÀÏÀ» 碥ëÀÀÇÑÙ.
©¯ ÇÃû 碥ëÀÀÀ» ÉÀ» Çâ»óÇÑÙ. ¯ 碥ëÀÀÀÌ öÀÇ ÉÀ» ҩî碬í ÉÁöî ÈÁÀ» ÇÄ ƩìƢ ÀÖÙ:
îҩ îµÃÁ¦ mmap
À U ƩöƢ Áúҡ read(2)
Å ÈÀåÀÌ ÁÁÁö ÊÙ. ¦ µéî, ÙÁÇÁÎ Solaris ö ÄÄ 2.0À ÁÁ mmap
À» »çëÇÏÁö ÊÀ»ҡ öƢ ÃÇÑ ÄÀÏÀ» õ » ÀüÛÇÑÙ.
NFS ҢîÇÑ ÄÀÏÃÅÛ ÀÖ ÄÀÏÀ» 碥ëÀÀÇÏ µµÁ Ù¥ NFS ŬóÀÌ碯 ÀÖ ÇÁÎƢ ÄÀÏÀ» ÁöìÅ ÄÀÏũ⦠ÁÙÀÌé, À¥ö ÇÁÎƢ ÙÀ 碥ëÀÀÇÑ ÄÀÏ»ëÀ» ÀÀ»ҡ bus errorƢ »ýÇÒ ö ÀÖÙ.
ÀÀÇ ÁҡÇ ÇçÇÏé ÀüÛÇÏ ÄÀÏÀ» 碥ëÀÀÇÏÁö ʵµÏ EnableMMAP off
¦ »çëÇ ÇÑÙ. (ÁÖÀÇ: ÀÌ ÁöÃî µÅä稬ơÎ ¯ƩÇÒ ö ÀÖÙ.)
ÄÄ îµÃÁ¦Ƣ sendfile(2)
À» ÁöÇÏé ÄÎ sendfileÀ» »çëÇÏ© -- ¦ µéî, ÁÀû ÄÀÏÀ» ñÇÒҡ -- ÀüÛÇÒ ÄÀÏÀ» ÁÁ¢ ÀÁöÊÀ» ö ÀÖÙ.
©¯ ÇÃû sendfileÀ» »çëÇÏé readÍ send¦ µûÎ ÇÒ ÇÊäƢ î »óÁÙ. ¯ sendfileÀ» »çëÇÏé À¥öÀÇ ÈÁÀ» ÇÄԵǠƩìƢ ÀÖÙ:
sendfile ÁöÀÌ ÀµÇúí ÄÄÄÀÏ ÃÅÛÀÌ ÀÌÁÀ» ƩÇÏÁö ÇÏ ÇÃûÀÌ ÀÖÙ. ¯È Ù¥ ÄÄÇ»ÅÍ ÇÇàÄÀÏÀ» ÄÄÄÀÏÇÏ© sendfile ÁöÀÌ ÀµÈ ÄÄÇ»ÅÍÎ ƢÁ碯 Ʃì ƢÉÇÏÙ.
ÄÎÀ ÀÚÅÀÇ Ä¬¦ »çëÇÏ© NFSÎ ҢîÇÑ ÄÀÏÀ» ÈÁÀûÀÎ ñÇÒ ö  ƩìƢ ÀÖÙ.
ÀÀÇ ÁҡÇ ÇçÇÏé ÄÀÏÀ» sendfile ÀüÛÇÏÁö ʵµÏ EnableSendfile off
¦ »çëÇ ÇÑÙ. (ÁÖÀÇ: ÀÌ ÁöÃî µÅä稬ơÎ ¯ƩÇÒ ö ÀÖÙ.)
ÄÄ 1.3 ÀÌÀü StartServers
â»ƨÀÌ 5
ÀÎ ö ŬóÀÌ 100ƩƢ µÃ Á¢ÓÇÏé ÎÇϦ ÃÇÏâ ÃÇÑ ÀÚÄÀ» µéâîÁö 95ÃÊƢ ÉÈÙ. ÀÚÁÖ ÀçÃÀÛÇÏÁö Ê ÇÁ¦ ö À µÀÛÇÏÁö, 10£ ÇÇàÇÏ ¥ÄÅ© áú Åì »ÚÔ ÂÙ.
ÃÊç ÇÑƩ ÔÄ¢À ÀÚÄÀ» »õÎ ÃÀÛÇÏé ö «碬¦ ÁÖÁö ÊÀÁí ÁÇÙ. ÄÄÇ»ÅÍƢ ÀÚÄÀ» ÃÀÛÇÏÀó Ù»Úé äûÀ» ñÇÒ ö Ù. ¯ ÀÌ ÔÄ¢ÀÌ ÄÄÀÇ Ãơ É ÇµÇâÀ» ÁÖî ¯ƩÇÏÙ. ÄÄ 1.3 ÃÊç ÇÑƩ ÔÄ¢À ÏȵÇúÙ. ÄÚµå ÀÚÄ ÇÑƩ¦ µéí, 1ÃÊ ¬í, µÎƩ¦ µéí, 1ÃÊ ¬í, Ʃ¦ µéí, ÀÌ ÄÀÎ ÃÊç ÀÚÄÀ» 32Ʃ µéҡסîÁö ÁööÎ ÁõƢÇÑÙ. ÀÚÄöƢ MinSpareServers
Á ÙÙ£é ÁõƢ¦ ÁÜÇÑÙ.
ÀÌ Ʃì ÝÀÀÓµµƢ »óÁ mod_status
áúƢ µµòÀÌ µÉ ÍÀÌÙ.
ÇÁÎ »ýú üÃÇÏ© MaxRequestsPerChild
ÁÀ ÇÁΦ ÁáÇÑÙ. â»ƨÀ ÀÚÄç ÃÇÒ äûö Á¦ÇÑÀÌ Ù 0
ÀÌÙ. ÇöÀç ÁÀÌ 30
ú ơÀÌ Åì ÀÛÀ ƨÀÎ ÁµÇÀÖÙé, ƨÀ» »óçÈ ôÈú ÇÊäƢ ÀÖÙ. SunOS ÀµÈ Solaris öÀüÀ» »çëÇÑÙé, À¯Ãâҡש碯 ÀÌ ƨÀ» 10000
ÁµµÎ ÁÇÏó.
¬áÀ¯Áö(keep-alive)¦ »çëÇÑÙé ÀÚĵéÀ ÀÌÌ ¬á ÃƢ äûÀ» âÙ碬ç «Íµµ ÇÏÁöÊâҡש碯 èÓ Ù»ÚÙ. KeepAliveTimeout
ÀÇ â»ƨ 15
ÃÊ ÀÌ Çö»óÀ» ÃÖÒÈÇÑÙ. 碯 ëú ö ÀÚ £ÀÇ ÕÇüÀÌ ÂÔ ÁÇÑÙ. ¬áÀ¯ÁöÀÇ ëÎÀÇ ÀÌÁÀÌ »çóÁöâҡש碯 îҩ Ʃìµµ ÀÌ ƨÀ» 60
ÃÊ ÀÌ»óÀÎ ÃÁö Ңó.
ÄÄ 2.x mpm_winntÍ ơÀÌ ¯Á ÇÃû »çëÇÒ ö ÀÖ MPMµµ ÀÖÙ. ÀÏÝÀûÀÎ À¯ù ÃÅÛÀ ©¯ MPM Á ÇϦ ÅÃÇÒ ö ÀÖÙ. À¥öÀÇ ÓµµÍ ÈÀå(scalability)À îҩ MPMÀ» ÅÃÇÄ ÈÙ:
worker
MPMÀ ©¯ ÀÚÄ ÇÁÎƢ ¢¢ ©¯ µå¦ »çëÇÑÙ. ¢ µå ÇÑ ÇÑ ¬áÀ» ãçÇÑÙ. ÀÏÝÀûÀÎ worker prefork MPM Ù ÀûÀ 碬¦ »çëÇÏÇÎ ÅëÅÀÌ À ö ÀûÀýÇÏÙ.prefork
MPMÀ µåƢ ÇÑƩÀÎ ÀÚÄ ÇÁΦ ©¯Ʃ »çëÇÑÙ. ¢ ÇÁΠÇÑ ÇÑ ¬áÀ» ãçÇÑÙ. ©¯ ÃÅÛ preforkÀÇ ÓµµÂ workerÍ ñÁÇÏÁö, õ À 碬¦ »çëÇÑÙ. ÙÀú ơÀ »óÈ µå¦ »çëÇÏÁö Ê prefork ÄÀÌ worker ñÇ ÀÌÁÀ» ƢÁÙ: µå ÈÀüÇÏÁö (thread-safe) ÊÀ Á¦»ïÀÚƢ µç µâÀ» »çëÇÒ ö ÀÖí, µå µöë ÁöÀÌ óàÇÑ ÇÃû Ô µöëÇÒ ö ÀÖÙ.ÀÌ MPMµéú Ù¥ MPM ëÇ õ ÀÚÇÑ Á MPM ¦ ÂüíÇÏ ÙõÙ.
»çëÀÌ É ƢÀå ÁäÇÑ äÀÎÀÌâҡש碯 ÇÁ¦Î »çëÇÏÁö Ê µâÀ» Á¦ÅÇÀÚ. µâÀ» Loodule ÁöÃî¦ ÁÖÃÇÏé µÈÙ. µâÀ» Á¦ÅÇÏí ÇÇàÇÏ© »çÀÌƢ µâÀ̵µ Á»óÀûÀÎ µÀÛÇÏÂÁö »ìì ö ÀÖÙ.
ÝëÎ µâÀÌ ÄÄ ÇÇàÄÀÏ ÁÀûÀÎ µÅ©µÇÀÖÙé ÇÏÁö Ê µâÀ» Á¦ÅÇÏâÀÇ ÄĦ ÀçÄÄÄÀÏÇ ÇÑÙ.
©â ç¬È îҩ µâÀ» »çëÇÏí »çëÇÏÁö »Áö ÀÇÀÌ »ýäÙ. ÁäÀ À¥»çÀÌ碬ҢÙ Ù£Ù. ¯ µµ ÃÖÒÇÑ mod_log_config
µâÀ »çëÇÒ ÍÀÌÙ. ơ À¥»çÀÌ碯 ÎÄÀÏÀÌ ÇÊäÙé mod_log_config
  µÈÙ. ¯ ÃõÇÏÁö ÊÂÙ.
mod_cache
ơÀ µâú ÃÖÙ ƩÁÀÎ worker MPMÀ APRÀÇ atomic API¦ »çëÇÑÙ. ÀÌ API Ʃ硾 µå µâȦ ÀÇÒ atomic íÉÀ» Á¦ƩÇÑÙ.
â»ÀûÀÎ APRÀ ¢ îµÃÁ¦/U ÇÃû ƢÀå ÈÀÀûÀÎ ýÀ» »çëÇÏ© ÀÌ íÉÀ» ÇöÇÑÙ. ¦ µéî, ©¯ ÃÖÅ U ÇϵåîÎ atomic compare-and-swap (CAS) ¬»êÀ» ÇÏ íÉîƢ ÀÖÙ. ¯ îҩ ÇÃû APRÀ ÀÌ íÉîƢ  ÀµÈ UÍ È£È¯À» ÀÇ õ À mutexâÝ ÇöÀ» â»ÀûÀÎ »çëÇÑÙ. ÀÌ ÇÃû ÄĦ ÄÄÄÀÏÇÒҡ ÄĦ ÃÖÅ U ÇÇàÇÒ èÈÀÌóé, ÄĦ ÇÒҡ --enable-nonportable-atomics
ÉÇÀ» »çëÇÏ© õ ü¥ atomic ÇöÀ» ÅÃÇÒ ö ÀÖÙ:
./buildconf
./configure --with-mpm=worker --enable-nonportable-atomics=yes
--enable-nonportable-atomics
ÉÇÀ ÙÀú ơÀ ÇÃû µÇâÀÌ ÀÖÙ:
--enable-nonportable-atomics
¦ »çëÇÏé APRÀ ü¥ Çϵåî compare-and-swapÀ» ÀÇÑ SPARC v8plus íÉî¦ »çëÇÑÙ. ÀÌ ÉÇÀ» »çëÇÏé atomic íÉÀÌ õ ÈÀÀûÀÌÁö (U¦ ú »çëÇÏí õ ôÀ µâÈƢ ƢÉÇÏÙ), ÄÄÄÀÏÇÑ ÇÇàÄÀÏÀ UltraSPARC Ä ÇÇàÇÒ ö ÀÖÙ.--enable-nonportable-atomics
¦ »çëÇÏé APRÀ ü¥ Çϵåî compare-and-swapÀ» ÀÇÑ 486 íÉî¦ »çëÇÑÙ. õ ÈÀÀûÀÎ atomic íÉÀÌ ƢÉÇÏÁö, ÄÄÄÀÏÇÑ ÇÇàÄÀÏÀ 486 ÀÌ»ó Ä (386À ȵÈÙ) ÇÇàÇÒ ö ÀÖÙ.ÄĦ ÄÄÄÀÏÇÒҡ mod_status
¦ ÇÔÇÏí ÇÇàÇÒҡ ExtendedStatus On
À» ÁÇÏé ÄÄ äûÀ» À»ҡעҢÙ gettimeofday(2)
(ÈÀ îµÃÁ¦ µûó times(2)
)¦ µÎ È£ÃâÇÏí (1.3 ÀÌÀüÂ) time(2)
µµ ÃƢÎ ©¯ È£ÃâÇÑÙ. »óÅÂ í µÀÛãÀÌ ÇÊäÇÏâ ҡשÀÌÙ. ÃÖ»óÀÇ ÉÀ» òÀÁé (â»ƨÀÎ) ExtendedStatus off
¦ ÁÇÑÙ.
 ÄÄ À¥ö 2.0 öÀü ¯ƩµÈ »ëÀ» ãí ÀÖÁö ÊÙ. Áµµ À¯ÈÇÑ ÁƢ ÀÖÁö, ÁÖÀÇÇ »çëÇÏ ÙõÙ.
À¯ ÒÄÏ APIÀÇ ÜÁÀ» íÇÑÙ. À¥öƢ ©¯ ÈÀ ©¯ ÁÖÒ¦ âÙ硾âÀÇ ©¯ Listen
À» »çëÇÑÙí ƢÁÇÏÀÚ. ¬áÀÌ ƢÉÇÑÁö ¢ ÒÄÏÀ» Ë»çÇÏâÀÇ ÄÄ select(2)
¦ »çëÇÑÙ. select(2)
 ÒÄÏ âÙí ÀÖ ¬áÀÌ ÂÁö ÈÀ ÃÖÒÇÑ ÇÑƩ ÀÖÂÁö ËÁÁÙ. ÄÄ ©¯ ÀÚÄÀÌ ÀÖí, ¬í ÀÖ µç ÀÚÄÀ µÃ »õÎî ¬áÀ» Ë»çÇÑÙ. ÇöÀ ÙÀú ñÁÇÏÙ (ÀÌ Â ÄÚµå ƢÁ碯ÀÁö ÊÒÙ. ÜÁö íÇÏâÀÇÑ ëµµÎ µéúÙ.):
for (;;) {
for (;;) {
fd_set accept_fds;
FD_ZERO (&accept_fds);
for (i = first_socket; i <= last_socket; ++i) {
FD_SET (i, &accept_fds);
}
rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
if (rc < 1) continue;
new_connection = -1;
for (i = first_socket; i <= last_socket; ++i) {
if (FD_ISSET (i, &accept_fds)) {
new_connection = accept (i, NULL, NULL);
if (new_connection != -1) break;
}
}
if (new_connection != -1) break;
}
process the new_connection;
}
¯ ÀÀÇ ÜÇÑ Çö ɢÇÑ í¥(starvation) Á¦Ƣ ÀÖÙ. ©¯ ÀÚÄÀÌ µÃ ÀÌ ÝÀ» ÇÇàÇÏé, äûÀ» âÙ碬ç µÎ select
ÃáÙ. ÀÌҡ îҩ ÒÄÏ äûÀÌ ÇÏóµµ µéîÀé µç ÀÚÄÀÌ úîÙ (úî ÀÚÄÀÇ Ʃö îµÃÁ¦Í ÅÀÌÖ µûó Ù£Ù). À̵éÀ µÎ ¬áÀ» accept
ÇÏ ÃµµÇÑÙ. ¯ (Áµµ ÇÑ ¬á ëâÁÀÌóé) ÇÑ ÀÚÄ ƩÇÏí, ÓÁö accept
ÃáÙ. ¯é ÀÌ ÀÚĵéÀ ÇÑ ÒÄÏÀÇ äûÀ» ñÇϵµÏ ©, ÒÄÏÀÎ »õÎî äûÀÌ ÃÈ µéîÍ µç ÀÚÄÀ» úïҡסîÁö ÁÁöÇÀÖÙ. ÀÌ í¥ Á¦Â PR#467 ÃÀ íµÇúÙ. ÃÖÒÇÑ µÎƢÁö ÇáÃ¥ÀÌ ÀÖÙ.
ÇÑƢÁö ÒÄÏÀ» ëâÇÏÁö ʵµÏ (non-blocking) µå ýÀÌÙ. ÀÌ Ʃì ÀÚÄÀÌ accept
¦ ǵµ ÃÁö Êí, Áïà ÁÇàÇÒ ö ÀÖÙ. ¯ U ãÀ» ҨñÇÑÙ. select
¬Â ÀÚÄÀÌ 10Ʃ ÀÖí, »õÎ ¬áÀÌ ÇÑƩ µéîÔÙí ƢÁÇÏÀÚ. ¯é ÀÌ ÀÚÄÁ 9Ʃ úî ¬áÀ» accept
ÇÏ ÃµµÇÏí ÇÇÏé « Àϵµ ÇÏÁö Êí Ùà select
¦ ÝÇÑÙ. ÙÃ select
Î µÃ ҡסîÁö îҩ ÀÚĵµ Ù¥ ÒÄÏ µéî äûÀ» ñÇÏÁö ÊÂÙ. (ÙÁÇÁÎ ÄÄÇ»ÅÍ) ¬Â ÀÚÄ ƩöÅ U ƩöƢ ÀÖ µå ƩìƢ Ïóé ÀÌ ÇáÃ¥À ơÎ ÁÁÀÌÁö ÊÂÙ.
Ù¥ ýÀ ÄÄƢ »çëÇÏ ýÀÎ »Î Ý碯 ÇÑ ÀÚÄÀ» µé©Ù. ÝÀ ÙÀú ơƢÙ (ÂÀ̦ ơÁÇÀ):
for (;;) {
accept_mutex_on ();
for (;;) {
fd_set accept_fds;
FD_ZERO (&accept_fds);
for (i = first_socket; i <= last_socket; ++i) {
FD_SET (i, &accept_fds);
}
rc = select (last_socket+1, &accept_fds, NULL, NULL, NULL);
if (rc < 1) continue;
new_connection = -1;
for (i = first_socket; i <= last_socket; ++i) {
if (FD_ISSET (i, &accept_fds)) {
new_connection = accept (i, NULL, NULL);
if (new_connection != -1) break;
}
}
if (new_connection != -1) break;
}
accept_mutex_off ();
process the new_connection;
}
accept_mutex_on
ú accept_mutex_off
ÇÔö mutex Ҩî¦ ÇöÇÑÙ. ÇÑ ÀÁ ÇÑ ÀÚÄÀÌ mutex¦ ƢÁú ö ÀÖÙ. mutex¦ ÇöÇÏ ýÀ ©¯ƢÁöÀÌÙ. Çö ýÀ (1.3 ÀÌÀü) src/conf.h
(1.3ú ÀÌÈÄ) src/include/ap_config.h
ÁÀǵÇÀÖÙ. îҩ ÅÅÃÄ ÀáÝ(locking) ýÀ» ÅÃÇÏÁö Êâҡש碯, ÀÌ ÅÅÃÄ ©¯ Listen
ÁöÃî¦ »çëÇÏé ÀÇèÇÏÙ.
ÇÇàà AcceptMutex
ÁöÃî¦ »çëÇÏ© mutex ÇöÀ» ¯ƩÇÒ ö ÀÖÙ.
AcceptMutex flock
ÀÌ ýÀ ÀáÝÄÀÏÀ» ÀáâÀÇ flock(2)
ÃÅÛÈ£ÃâÀ» »çëÇÑÙ (ÀáÝÄÀÏ ÀÄ LockFile
ÁöÃîÎ ÁöÁ).
AcceptMutex fcntl
ÀÌ ýÀ ÀáÝÄÀÏÀ» ÀáâÀÇ fcntl(2)
ÃÅÛÈ£ÃâÀ» »çëÇÑÙ (ÀáÝÄÀÏ ÀÄ LockFile
ÁöÃîÎ ÁöÁ).
AcceptMutex sysvsem
(1.3ú ÀÌÈÄ) ÀÌ ýÀ» SysVÄ Ҩî¦ »çëÇÏ© mutex¦ ÇöÇÑÙ. ÒÇàȵµ SysVÄ Ҩî »Û ÎÀÛëÀÌ ÀÖÙ. ÇÏ ÄÄƢ Ҩî¦ ÁÇÏÁö Êí ÁÀ» ö ÀÖ ÁÀÌÙ (ipcs(8)
manpage Âüí). Ù¥ ÇÏ À¥öÍ µÀÏÇÑ uidÎ ÇÇàÇÏ CGIƢ (Áï, suexec
cgiwrapper
¦ »çëÇÏÁöÊ ÇÑ µç CGI) Ҩî API¦ »çëÇÏ© ñÅÎƩÝÀ» ÇÒ ö ÀÖ ÁÀÌÙ. ÀÌ ÀÌÀ¯ҡש碯 IRIX¦ Á¦ÜÇÑ ÅÅÃÄ ÀÌ ýÀ» »çëÇÏÁö ÊÂÙ (ëÎÀÇ IRIX ÄÄÇ»ÅÍ ÕÀÇ µÎ ýÀ ÁöÄÔ öÌÙ).
AcceptMutex pthread
(1.3ú ÀÌÈÄ) ÀÌ ýÀ POSIX mutex¦ »çëÇÏâҡש碯 POSIX µå ÔàÀ» ÏÀüÈ ÇöÇÑ ÅÅÃÄóé µÎ »çëƢÉÇÏÁö, (2.5 ÀÌÈÄ) Solaris ͵µ ¯Á µÀÛÇÏ µíÇÏÙ. ÀÌ ýÀ» õµÇ»Ùé öƢ Ãç ÀÀäÀ» ÈÇÏÂÁö »ììÁ ÇÑÙ. ÁÀû »ë ñÇÏ ö À µÀÛÇÏÂ Í ơƢÙ.
AcceptMutex posixsem
(2.0ú ÀÌÈÄ) ÀÌ ýÀ POSIX Ҩî¦ »çëÇÑÙ. mutex¦ ƢÁ ÇÁÎÀÇ µåƢ ÁÂÙé(segfault) Ҩî ÒÀ¯ÇÀÌ ÈµÇÁö Ê À¥öƢ ÃáÙ.
ÃÅÛ À ñÏ Â ÁÄÈ(serialization) ýÀÌ ÀÖÙé ýÀ» »çëÇÏ ÄÚµå¦ APR ÃƢÇÒ ƢÄƢ ÀÖÙ.
íÁ ÇÃÁö ÇöÇÏÁöÊÀ Ù¥ ýÀ ÎÀûÀÎ ÝÀ» ÁÄÈÇÏ ýÀÌÙ. Áï, ÇÁΦ îƩ µé©»Â ÍÀÌÙ. ÀÌ ýÀ ©¯ ÀÚÄÀ» µÃ ÇÇàÇÒ ö ÀÖî ÁÄÈҡש碯 Àüà ëÀ» ÈƢëÇÏÁö ÇÏ ÙÁÇÁÎ ÄÄÇ»ÅÍ üÉÀ» ƢÁ稬 ö ÀÖÙ. ÕÀÎ »ìì ÎÀÌÁö, Åì ÄÈµÈ À¥öƢ ÈçÇÏÁö Ê ìÀסƢ Ù.
ÃÖ»óÀÇ ÉÀ» òâÀÇ ©¯ Listen
À» »çëÇÏÁö Ê ÍÀÌ ÀÌ»óÀûÀÌÙ. ¯ èÓ íÇÑÙ.
ÕÀÇ íÀ ÙÁÒÄÏ ö ÁÁÁö, ÒÄÏÀÌ ÇÑƩÀÎ ö îҩƢ? ¬áÀÌ µµÂÇÒҡסîÁö µç ÀÚÄÀÌ accept(2)
ÃçÀÖâҡש碯 ÀÌ»ó ơÀ Á¦Ƣ »ýÇÏÁö Êí, í¥ Á¦µµ Ù. ¯ ÇÁ¦ÎÂ Õ »ÇÑ ëâÇÏÁö Ê (non-blocking) ý »ýÇÏ "ƩÈÀü(spinning)" Çö»óÀ» ơÃí ÀÖÙ. ëÎÀÇ T ÅÃÀ ¬áÀÌ µµÂÇÏé ÄÎÀÌ accept
ÃçÀÖ µç ÀÚÄÀ» úìµµÏ ÇöµÇÀÖÙ. ÇÁÎÁ ÇÑƩƢ ¬áÀ» òí »çëÀÚµÀÎ µƢí, ÓÁö ÄÎ ƩÈÀüÇÏ© ¬áÀÌ ÀÀ» ƩÇÏé Ùà ÀáÀ» ÀÜÙ. »çëÀÚµ ÄÚµå ÀÌ ƩÈÀüÀ» Ë ö Áö, íÈ ÁÀçÇÑÙ. ÙÁÒÄÏÀÇ ëâÇÏÁö Ê ýú µÀÏÇÏÔ ÎÇϦ ôÀÌ ÒÇÊäÇÑ ÇàµÀÌ ÀÏîÙ.
ì碥 ©¯ ÅÅÃÄ ÒÄÏÀÌ ÇÑƩÀÎ Ʃìµµ ÁÄÈÇÏé õ "À" µÀÛÇÔÀ» ƩÇÙ. ÅÀÇ ëÎÀÇ Ʃì â»ÀûÀÎ ÁÄȦ »çëÇÑÙ. 碥 (ÄÎ 2.0.30, 128Mb 碯 µàó Pentium pro) ÇÇèÇÑ áú ÒÄÏ ÇÑƩ¦ ÁÄÈÇÏé ÇÏÁö ÊÀ Ʃì ñÇ ÃÊç äûÀÌ 3% Ì ÁÙîµéúÙ. ¯ ÁÄȦ ÇÏÁö ÊÀ Ʃì äûç 100ms Áö¬ÀÌ »ýÇÙ. ÀÌ Áö¬À µµ LAN »ýÇÏÂ ä ¬áҡשÀÏ ÍÀÌÙ. ÒÄÏÀÌ ÇÑƩÀÎ Ʃì ÁÄȦ »çëÇÏÁö ÊÀÁé SINGLE_LISTEN_UNSERIALIZED_ACCEPT
¦ ÁÀÇÇÑÙ.
draft-ietf-http-connection-00.txt 8Àý íÇϵíÀÌ ÈÁÀûÀÎ À¥öƢ µÇÁé, ÅëÅÀÇ ç ÇâÀ» µҢÀûÀÎ ÝÀ» ö ÀÖî ÇÑÙ (T ¬áÀ ÖÇâÀÌí, ÇâÀ Î µҢÀûÀÌÙ). ÀÌÁÀ» Ù¥ ö ÀÚÁÖ £úÇÏÁö, ÄÄ 1.2ÎÅÍ ÁÈÈ ÇöÇÔÙ.
ÀÌ âÉÀ» ÎÁÖÀÇÇÏÔ ÄÄ ÃƢÇÀ»ҡ ©¯ À¯ öÀü À Á¦Ƣ »ýÇÙ. T ÔàÀ FIN_WAIT_2
ÅÀÓôÀÌ ÀÖÙí ÁÇÏÁö ÊÒÁö, ÝÁöÇÏÁöµµ ÊÒÙ. ÅÀÓôÀÌ Â ÃÅÛ ÄÄ 1.2 À ÒÄÏÀ» µÈ FIN_WAIT_2
»óÅÂÎ µéúÙ. À Ʃì ÀÌ Á¦Â Á¦ÀÛ»çƢ Á¦ƩÇÏ ÃÖÅ T/IP Ħ ÀûëÇÏ© ÇáÇÒ ö ÀÖÙ. ¯ Á¦ÀÛ»çƢ Ħ Ç¥ÇÏÁö Ê ƩìƢ (Áï, SunOS4 -- Ò óÀÌƢ ÀÖ »çҡÀ ÁÁ¢ ÄÇÒ ö ÀÖÁö) ÀÖâҡש碯 ÀÌ âÉÀ» »çëÇÏÁö ÊâÎ áÁÇÙ.
ýÀ µÎƢÁöÙ. ÇÏ ÒÄÏ ÉÇ SO_LINGER
¦ »çëÇÏ ýÀÌÙ. ¯ ÒÇàȵµ ëÎÀÇ T/IP ÅÃÀ ÀÌ ÉÇÀ» ÃÙÎ ÇöÇÏÁö ÊÒÙ. ÃÙÎ ÇöÇÑ Åà Áµµ (Áï, 碥 2.0.31) ÀÌ ýÀ ÙÀ ýÙ õ u¦ ÀâÔÂÙ.
ÄÄÂ Åë (http_main.c
ÀÖÂ) lingering_close
ó ÇÔö¦ »çëÇÑÙ. ÀÌ ÇÔö ëà ÙÀú ơƢÙ:
void lingering_close (int s)
{
char junk_buffer[2048];
/* shutdown the sending side */
shutdown (s, 1);
signal (SIGALRM, lingering_death);
alarm (30);
for (;;) {
select (s for reading, 2 second timeout);
if (error) break;
if (s is ready for reading) {
if (read (s, junk_buffer, sizeof (junk_buffer)) <= 0) {
break;
}
/* just toss away whatever is here */
}
}
close (s);
}
ÀÌ Äڵ堬áÀ» ÝÀ»ҡ õ U¦ »çëÇÏÁö, ÈÁÀûÀÎ ÇöÀ» ÀÇ ÇÊäÇÏÙ. HTTP/1.1ÀÌ õ Î ÛÁöí µç ¬áÀ» À¯ÁöÇÑÙé(persistent), ¬áÀ»  ñëÀ ©¯ äûÀ» ÃÇÏé »óâµÉ ÍÀÌÙ. ÀÇèÇÏÔµµ NO_LINGCLOSE
¦ ÁÀÇÇÏ© ÀÌ âÉÀ» »çëÇÏÁö ÊÀ» ö ÀÖÁö, ÀýëÎ ÇÇÏÁö ÊÂÙ. ¯È HTTP/1.1 ÄÀÌÇÁóÀÎ (ÁÖ; ¬áÀ¯Áö »óÅ ÀÀäÀ» âÙÁö Êí ©¯ äûÀ» »Â âú) ¬áÀ¯Áö lingering_close
Ƣ ÇÊöÀûÀÌÙ (í ÄÀÌÇÁóÀÎ ¬áÀÌ õ ü£âҡש碯 »çëÇÏ Ùö ÍÀÌÙ).
ÄÄÀÇ ÎÍ ÀÚÄÀ scoreboardó ÍÀ» ÅëÇ Î ÅëÅÇÑÙ. ÀÌ»óÀûÀΠscoreboard¦ ƩÀ¯硤Î ÇöÇ ÇÑÙ. ì ƩÀÚƢ Çç îµÃÁ¦ Á¢ÙÇÒ ö ÀÖÅ »óÇÑ Ã áú¦ À Ʃì Åë ƩÀ¯碬¦ »çëÇÏ© ÇöÇÑÙ. ÓÁö µÅ© ÀÖ ÄÀÏÀ» »çëÇÏ© ÇöÇÑÙ. µÅ© ÀÖ ÄÀÏÀ Àí ÅÚµµƢ ҩîÁÙ (âɵµ õ ÀûÙ). src/main/conf.h
ÄÀÏ »çëÇÏ ÅÅÃĦ ã USE_MMAP_SCOREBOARD
ÈÀ USE_SHMGET_SCOREBOARD
ÀÎÁö ÈÀÎÇÑÙ. µÑÁ ÇϦ (¢¢ ÇÔ »çëÇÒ HAVE_MMAP
ÀÌ HAVE_SHMGET
µµ ơÀÌ) ÁÀÇÇÏé ƩÀ¯ ÄÚµå¦ »çëÇÑÙ. ÃÅÛÀÌ Ù¥ ÁùÀÇ ƩÀ¯碬¦ »çëÇÑÙé src/main/http_main.c
ÄÀÏÀ» öÁÇÏ© ÄÄ ƩÀ¯碬¦ »çëÇÒ ö ÀÖµµÏ ÈÅ(hook)À» ÃƢÇÏó. (ÇÇÑ Ä¦ ì碯Ô »ÁÖ ÙõÙ.)
µâÀ» µÀûÀÎ ÀîµéÀÌÁö ÊÂÙé (ƢÉÇÑ ÁҡÝÀÌóµµ ÉÀ» ôÀÌâÀÇ ÀÌ ÛÀ» ÀÂÙé µµ µâÀ» µÀûÀÎ ÀîµéÀÌÁö ÊÀ» ÍÀÌÙ), ö¦ ÄÄÄÀÏÇÒҡ -DDYNAMIC_MODULE_LIMIT=0
À» ÃƢÇÑÙ. ¯é µâÀ» µÀûÀÎ ÀîµéÀÌâÀÇ ÇÒçÇÏ 碬¦ ÀýàÇÑÙ.
ÙÀÀ Solaris 8 worker MPMÀ» »çëÇÑ ÄÄ 2.0.38ÀÇ ÃÅÛÈ£Ãâ âÏ(trace)ÀÌÙ. íÉî¦ »çëÇÏ© âÏÀ» òúÙ:
truss -l -p httpd_child_pid.
-l
ÉÇÀ» »çëÇÏé truss ÃÅÛÈ£ÃâÀ» ÇÏ LWP (lightweight process, Ʃ硾 ÇÁÎ--SolarisÀÇ ÄÎöÁ µå) ID¦ ơÀÌ âÏÇÑÙ.
Ù¥ ÃÅÛÂ strace
, ktrace
, par
ơÀ ÃÅÛÈ£Ãâ ÃÀû µµƢ ÀÖÙ. áú ñÁÇÏÙ.
ŬóÀÌ碥 À¥öÔ Å©âƢ 10KBÀÎ ÁÀû ÄÀÏÀ» äûÇÑÙ. ÁÀûÀÎ ÄÀÏÀ» äûÇÏÁö ÊÅ »ëÇù»óÇÏ äûÀ» ÇÑ Ʃì âÏÀÌ Åì Ù£Ù (ҡסΠÅì Ëâ ÈûµéÙ).
/67: accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...) /67: accept(3, 0x00200BEC, 0x00200C0C, 1) = 9
Àע ¬áëâ(listener) µåƢ LWP #67 ÇÇàµÊÀ» Ë ö ÀÖÙ.
accept(2)
ÁÄȦ »çëÇÏÁö ÊÀÀ» ÁÖñÇÏó. ©¯ 碬¦ âÙÁöÊ Ʃì ÀÌ ÇÃûÀÇ worker MPMÀ â»ÀûÀÎ ÁÄÈÇÏÁö ÊÀ accept¦ »çëÇÑÙ.
/65: lwp_park(0x00000000, 0) = 0 /67: lwp_unpark(65, 1) = 0
¬áÀ µéÀÌí(accept) ¬áëâ µå worker µå¦ úö äûÀ» ÃÇÏÔ ÇÑÙ. âÏ äûÀ» ÃÇÏ worker µåƢ LWP #65ÀÓÀ» Ë ö ÀÖÙ.
/65: getsockname(9, 0x00200BA4, 0x00200BC4, 1) = 0
Ƣ»óÈ£碬¦ ÇöÇÏâÀÇ ÄÄ ¬áÀ» µéÀÎ Áö(local) ÒÄÏ ÁÖÒ¦ Ë ÇÑÙ. (Ƣ»óÈ£碬¦ »çëÇÏÁö ÊÅ Listen
ÁöÃî ÍÀϵåÄ«µå ÁÖÒ¦ »çëÇÏÁö ÊÀ Ʃì µî) À Ʃì ÀÌ È£ÃâÀ» Ù ö ÀÖÙ. ¯ Á ÀÌ ÃÖÀûÈ ÀÛÀÌ ÈµÇÀÖÙ.
/65: brk(0x002170E8) = 0 /65: brk(0x002190E8) = 0
brk(2)
È£ÃâÀ Èü(heap) 碬¦ ÇÒçÇÑÙ. À¥ö ëÎÀÇ äû Ãà ÀÚà ÇÒçÀÚ(apr_pool
ú apr_bucket_alloc
)¦ »çëÇÏâҡש碯 ÃÅÛÈ£Ãâ âÏ ÀÌ ÃÅÛÈ£ÃâÀ» âƢ µåƢÙ. ÀÌ âÏ À¥ö ÃÀÛÇÏÀÚÀÚ ÀÚà ÇÒçÀÚƢ »çëÇÒ 稬íÏÀ» òâÀÇ malloc(3)
À» È£ÃâÇÑÙ.
/65: fcntl(9, F_GETFL, 0x00000000) = 2 /65: fstat64(9, 0xFAF7B818) = 0 /65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B910, 2190656) = 0 /65: fstat64(9, 0xFAF7B818) = 0 /65: getsockopt(9, 65535, 8192, 0xFAF7B918, 0xFAF7B914, 2190656) = 0 /65: setsockopt(9, 65535, 8192, 0xFAF7B918, 4, 2190656) = 0 /65: fcntl(9, F_SETFL, 0x00000082) = 0
ÙÀ worker µå ŬóÀÌÀÇ ¬á(ÄÀÏâúÀÚ 9)À» ëâÈÇÔ(non-blocking) »óÅÂÎ ÙÛÙ. setsockopt(2)
Í getsockopt(2)
È£ÃâÀ SolarisÀÇ libcƢ ÒÄÏ ëÇÑ fcntl(2)
À» î»Ô ÃÇÏÂÁö ©ÁÙ.
/65: read(9, " G E T / 1 0 k . h t m".., 8000) = 97
worker µå ŬóÀÌ硤Î ÎÅÍ äûÀ» ÀÂÙ.
/65: stat("/var/httpd/apache/httpd-8999/htdocs/10k.html", 0xFAF7B978) = 0 /65: open("/var/httpd/apache/httpd-8999/htdocs/10k.html", O_RDONLY) = 10
À¥ö ÁÀ Options FollowSymLinks
Í AllowOverride None
ÀÌÙ. äûÇÑ ÄÀÏƩÎÀÇ ¢ µÅä碯 ëÇ lstat(2)
ÇÏÅ .htaccess
ÄÀÏÀ» Ë»çÇÒ ÇÊäƢ Ù. ÄÀÏÀ» Ë»çÇÏâÀÇ, 1) ÄÀÏÀÌ ÀÖÂÁö, 2) µÅäƢ Ñ ÀÏÝÄÀÏÀÎÁö, stat(2)
È£Ãâ ÇÏé µÈÙ.
/65: sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C) = 10269
ÀÌ Ʃì À¥ö ÇÑÀÇ sendfilev(2)
ÃÅÛÈ£ÃâÎ HTTP ÀÀäÇìõÍ äûÇÑ ÄÀÏÀ» ÀüÛÇÒ ö ÀÖÙ. Sendfile Áö©Î îµÃÁ¦ҢÙ Ù£Ù. Ù¥ ÃÅÛÀÌóé sendfile(2)
À» È£ÃâÇÏâ Àü Çìõ¦ »âÀÇ write(2)
writev(2)
È£ÃâÀ» ÇÑÙ.
/65: write(4, " 1 2 7 . 0 . 0 . 1 - ".., 78) = 78
write(2)
È£ÃâÀ Á¢ÙÎ(access log) äûÀ» âÏÇÑÙ. ÀÌ âÏ time(2)
È£ÃâÀÌ ÀÀ» ÁÖñÇÏó. ÄÄ 1.3ú ÄÄ 2.0À ãÀ» ËâÀÇ gettimeofday(3)
¦ »çëÇÑÙ. gettimeofday
¦ ÃÖÀûÈÇÑ 碥Í Solaris ơÀ îî îµÃÁ¦Â ÀÏÝÀûÀÎ ÃÅÛÈ£Ãâ ÎãÀÌ Ù.
/65: shutdown(9, 1, 1) = 0 /65: poll(0xFAF7B980, 1, 2000) = 1 /65: read(9, 0xFAF7BC20, 512) = 0 /65: close(9) = 0
worker µå ¬áÀ» Áö¬Ýâ(lingering close)ÇÑÙ.
/65: close(10) = 0 /65: lwp_park(0x00000000, 0) (sleeping...)
ÁöÀÎ worker µåÂ Ý ÀüÛÇÑ ÄÀÏÀ» Ýí, ¬áëâ(listener) µåƢ Ù¥ ¬áÀ» ÇÒçÇÒ ҡסîÁö ÁÁöÇÑÙ.
/67: accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)
µÈ ¬áë⠵堬áÀ» (µç workerƢ ÀÛÁÀÌé ¬áëâ µå¦ Ã worker MPMÀÇ ÈåÁ¦î âÉ µûó) worker µå ÇÒçÇÏÀÚÀÚ Ù¥ ¬áÀ» µéÀÏ ö ÀÖÙ. ÀÌ âÏ ÀÁö ÊÁö, worker µåƢ Ý À ¬áÀ» ÃÇÏ µÈ ÙÀ accept(2)
Ƣ (äûÀÌ Åì À Ʃì Ç»ó) ÀÏî¯ ö ÀÖÙ.
ƢÉÇÑ î: tr