<-
Apache > HTTP Server > Documentation > Version 2.4 > Miscellaneous Documentation

9 �� �

�% �  en� |  fr� |  ko� |  tr�

¹® 5 � 5±Ù ó°� �) ¹® � Âü� .

9 2.0 ±âå°� � �%1°ú �� � �� � � � º« º¥ � ±â �0±â � ' '� 9 2.0 � � °æ �� �

9 1.3� ù±� 2.0 � 2¸® � � scalability) ´±� � 5� ±âº»°¾ �� 5 � �) ±×� ÄÄ � � � � �� � $ ¹® 9 2.0 �� � ±â � ´¸� � � � � � � � � �� �4 � ü ±â� � � �� � � � ±â� �

Âü

top

�4 � ü �

� � �� � � ÁÖ � é¸ð¸� � 2 ® � �) � "Ãæ ù¸�� " �' ¸ø � ¸®±â¹® � � � � � � �) '� � �� � &� MaxClients � Á¶ � �� � � � ¸Å � � ¹æ �( top� � ±¸ ·Ö ¸ñ º¸ 9 ·Ö$ � é¸ð¸� �) � , 2 �)� é¸ð¸� ¤¸� ·Ö$� �) °ø � �

¸Ó � Ãæ �� CPU, Ãæ �� � � Ä« , Ãæ �� � ¬±� "Ãæ �� � � °á4

� ü º¸ � �4 ±×� �� � � � ��' 'ħ

top

� � �

HostnameLookups DNS °ï /a>

9 1.3 � HostnameLookups ±âº»� On� 2 �9±â DNS � �� 2 ® °å 9 1.3 � ±âº»� Off� ó°� á±� � ÁÖ � �$ �� ¼ä¸é � á±� � á±�� 9 � � logresolve á±�� �)

á±� � � �� � ¹Ì �� � �) � �� ¤¸� ÄÄ � � á±� � 2¸® � �

Allow from domainDeny from domain � �) ¤¸� (&, IP ÁÖ � �$ �� ¸ê �) ¤¸�) � $� DNS � ( � ó°� ' � ±â � �) � ±×� � �� ´±� � � �% � � IP ÁÖ � �)

� �< � � � ±â5 °æ Á¶°Ç � 2� DNS Á¶ � � .html� .cgi � DNS �

HostnameLookups off

HostnameLookups on

±×� CGI DNS� ¿ôü¸�, � CGI� gethostbyname � � °ï ´º�

FollowSymLinks SymLinksIfOwnerMatch

URL °ø Options FollowSymLinks� �) '� Options SymLinksIfOwnerMatch� �) � 9 ¬º¼¸� °ß ±â � � � � � � ��� � � � � � � � ��:

DocumentRoot /www/htdocs

Options SymLinksIfOwnerMatch

/index.html URI 2 � �. ±×ì¸� 9 /www, /www/htdocs, /www/htdocs/index.html �� lstat(2)� � lstats °á°ú� α ' ±â ¹® 2 �4 � ¸Å � '' ¬º�� º¸ °ß ¤¸� � � �

DocumentRoot /www/htdocs

Options FollowSymLinks



Options -FollowSymLinks +SymLinksIfOwnerMatch

°æ 5 DocumentRoot °æ °ß ' DocumentRoot � °æ � Alias RewriteRule �) °æ0 ¾w � ¬º�� º¸ °ï ' � 5� �� �<ä¸�, FollowSymLinks� � �, SymLinksIfOwnerMatch �

AllowOverride

URL °ø overrides� � ¤¸� (º¸ .htaccess 9 � � ��� .htaccess� ´±� � �

DocumentRoot /www/htdocs

AllowOverride all

/index.html URI 2 � �. 9 /.htaccess, /www/.htaccess, /www/htdocs/.htaccess� �� ´°�1 Options FollowSymLinks °æ0 ¾w 5� �� �<ä¸� �$ � AllowOverride None �)

�)

�% � '' Á¶ �� � ±© ¤¸� �) � � � � �� º¸ �� ù¸� � � � � Ä« � �) :

DirectoryIndex index

¸ñ �)

DirectoryIndex index.cgi index.pl index.shtml index.html

� �

, ¸® �� ã MultiViews º¸� , � �<¸é º¸ � type-map � ' � � �� ¸ó

�4 � �) ¤¸� Options MultiViews � �) ±âº¸ type-map � °ï ¹æ � � � type-map � � ¹æ �) ¹® � Âü

é¸ð¸� (memory-mapping)

� � server-side-include� 2¸® 9 2.0 � � � � ü � mmap(2) � ©¸é � é¸ð¸�

� � é¸ð¸� �� � ±×� é¸ð¸� � �� �4 ¸¸�� � � � °æ0

Á¶°Ç �� � � � é¸ð¸�' � EnableMMAP off� �) � (ÁÖ : � ¸® � ó°� )

Sendfile

9 � ü � sendfile(2) '� Ä¿ sendfile �) -- � � � ºþ -- � � ' �

� � sendfile �) � read send� � � � »¡� ±×� sendfile �) � � � � � � °æ0

Á¶°Ç �� � � sendfile � ' � EnableSendfile off� �) � (ÁÖ : � ¸® � ó°� )

·Ö /a>

9 1.3 � MinSpareServers, MaxSpareServers, StartServers � ¸ð º¥ � °á°ú � ¹ÌÃÆ � 9 ºþ ±â Ãæ �� �' " ±â 2 StartServers� �, MinSpareServers � ��' 4 ¸Å ±× StartServers ±âº»� 5 � ��48 100�� � �� 2¸® ±â Ãæ ¸Å±â�' 954� °É� # � ' � � '�, 10��� � º¥ � °á°ú ¸Å � �

4 � �9 � ¸é � ¹«¸®� ÁÖ �� ÄÄ � � �� 2 ºþ ±×� �9 9 ü �� � ÁÖ ó°� 9 1.3 4 � �9 = �� ¸Å , 14 � , �� ¸Å , 14 � , � � ¸Å , � � 4 32� ¸Å �' '� &� � MinSpareServers � �ä¸�� &�� �(

°æ �� »¡�8 MinSpareServers, MaxSpareServers, StartServers� °Å � � � 4� � � � ErrorLog ±â � � ¹® � º¸4¸é �$ Á¶ � � mod_status °á°ú� ¬´

·Ö ±°� �( MaxRequestsPerChild � ·Ö$ "� ±âº»� 2¸® 2 � 0� � 30� � ¸Å °¾ �$¸é, � � � SunOS � Solaris � �) ¤¸�, é¸ð¸�6¹® � 10000 � �

°°�'(keep-alive)� �) ¤¸� � � ´¸� °°� 6� 2 ±âä¸�� ¹« '±â ¹® � � KeepAliveTimeout ±âº»� 15 4 � 5 � � �� � � � �� � °°�' �� � �� ±â ¹® � °æ0 � 60 4 �< ¬¸�' �

top

ÄÄ � � �

MPM

9 2.x � 2¸®¸ð (MPMs)�� µÃ� ±â ¸ð� ' 9� ÄÄ � MPM � beos, mpm_netware, mpmt_os2, mpm_winnt � � � � �) MPM � � � � MPM $ � � � � scalability) � MPM ��

MPM¤°� ¤¸� MPM � º¸ MPM ¹® � Âü � �

¸ð

é¸ð¸� �) �� � $ �4±â¹® � � �) ' ¸ð °Å ´º�. ¸ð DSO� ÄÄ � ¤¸� �( � ¸ð LoadModule � ÁÖ 2¸® � ±× ¸ð °Å � � �4 � ¸ð� � ' � ´º�

�� ¸ð 9 � � � ¸Èä¸� ' ¸ð °Å ±â 9� ��� �

¬±� �0 � ¸ð �) � �) ' �' ¹® ±ä � �,4 � ¤¸� ±×� � 5 mod_mime, mod_dir, mod_log_config ¸ð �) ¬´ ¹° �,4 � á±� � ¤¸� mod_log_config � ±×� 62'

Atomic �/h3>

mod_cache � ¸ð � 5� ��$ worker MPM APR atomic API� �) API °æ � � ±â � atomic ¸÷ °ø

±âº»� APR � � ü /CPU � � �( ¹æ �) ¸÷ ±¸ � � � 5 CPU �4 atomic compare-and-swap (CAS) �0 ¸÷4 ±×� � � APR � ¸÷4 � CPU � � � mutex±â ±¸ ±âº»� �) � � 9� ÄÄ � 9� 5 CPU� � �ü¸�, 9� ±¸1 --enable-nonportable-atomics � �) �� atomic ±¸

./buildconf
./configure --with-mpm=worker --enable-nonportable-atomics=yes

--enable-nonportable-atomics � � � � � �

mod_status ExtendedStatus On

9� ÄÄ � mod_status� � � � � ExtendedStatus On � � 9 2 �� gettimeofday(2)(� � ü � times(2))� � � � (1.3 � ) time(2) 6�� �� � º¸ � � ¹®4 5 �� �<ä¸� (±âº»� ExtendedStatus off� �

accept « - � <

ÁÖ :

¹® 9 � � 2.0 � ó°� �) � ' ' � º¸ '�, ÁÖ4 �) � �

< API � � � �� � � � � ÁÖ � ±âä¸�� � Listen �) � �. °°� �% ' � < °ß ±â 9 select(2)� �) select(2) < ±âä¸�� °°� '5 � ' � 9 � �, � ¸ð � °°� °ß ±¸ � � ¾w ( = °¼$ � � ±â � � ¸Å ):

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) ¹® � � 𺹹� � � 2 ±âä¸�� ¸ð select �6 � � < 2 � �4$¸é ¸ð ±ú4 (±ú4 � � ü � � ¤¸�. �� ¸ð °°� accept� ±×� (' °°�� ±â4ü¸�) � ±°��, ¸Ó accept �6 ±×ì¸� � < 2 ºþ � ¹­, , � �< � 2 Ãæ �4 ¸ð ±ú8 �' � � �� ¹® PR#467 2 º¸ 5 �' ´°�1

�' < ±â ' � (non-blocking) � ¹æ� °æ accept� � �6' �, & ' ±×� CPU � select � 10� �, � °°� � �4$ �. ±×ì¸� $ 9� ±ú4 °°� accept� � � � � � � ' � � select� ðº� � select� �' � ¤¸� < �4 2 ºþ ' (� ·Ö ÄÄ � � ) � �� CPU �� � °æ0 ¼¸� ´°�1 �� "º¸4

¤¸� ¹æ 9� �) ¹æ� � 𺹹� � �,º¸� 𺹹� � � � (Â÷4 °Á� ):

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 ��4 ±¸ � � � mutex� �' mutex� ±¸ ¹æ �� � ±¸ ¹æ (1.3 � ) src/conf.h (1.3� � � ) src/include/ap_config.h � � 3 �(locking) ¹æ ' ±â ¹® , � � 3 � Listen � �) �

AcceptMutex � �) mutex ±¸ ó°�

AcceptMutex flock

¹æ �< ±×±â flock(2) � � �) (� 9 LockFile � ').

AcceptMutex fcntl

¹æ �< ±×±â fcntl(2) � � �) (� 9 LockFile � ').

AcceptMutex sysvsem

(1.3� � � ) ¹æ SysV ��4 �) mutex� ±¸ � SysV ��4 ½© 9� ��4 ¸® ' � Á× � (ipcs(8) manpage Âü ). ¤¸� � � � uid� � CGI� (&, suexec cgiwrapper� �) ' ¸ð CGI) �� API� �) ºþ°Åö°ø°� � � � ¹® IRIX� � � 3 ¹æ �) ' (�� IRIX ÄÄ � � ¹æ '9� ��.

AcceptMutex pthread

(1.3� � � ) ¹æ POSIX mutex� �) ±â ¹® POSIX � � ±¸ � Ìü¸é ¸ð �)� '�, (2.5 � ) Solaris� ±× � ±¸1 � ¹æ ´º�¤¸� �� éÃ� � ' � � �) ºþ � � �

AcceptMutex posixsem

(2.0� � � ) ¹æ POSIX ��4 �) mutex� �' ·Ö$ � � Á×ä¸�(segfault) �� � º¹ ' � �� �6

� ¸ñ « (serialization) ¹æ ¤¸� � ¹æ �) =� APR 6� �9�

°ï ´º�'� ±¸ ' ¤¸� ¹æ ö½� 𺹹� « ¹æ� &, ·Ö � ��� �,º¸� ¬´ ¹æ � � � « ¹® 2 � ' ¸ø � ·Ö ÄÄ � � � ±© °¼º¼ � � ´º� ö½� �, ¸Å ¼ì � �� ' � �

5 �� »±�� � Listen ¹® �) ' � �4 ±×� � �

accept « - < �

� � < � "'�, < � � �� ? °°� Âø �' ¸ð accept(2) éÃ� ±â ¹® � � ¹® � �' �, �� ¹® ±×� � � � ±â ' (non-blocking) ¹æ � "°ø (spinning)" �6� �� TCP � °°� Âø � Ä¿ accept éÃ� ¸ð ±ú0 � ±¸ ·Ö$ �� °°� � �)< ��, ¸Ó Ä¿ °ø °°� ð°� � � �) = � °ø '�, �� Á¸, ±× � < ±â ' ¹æ � � � �� � � �4

±× °¸� � � 3 < � °æ0 « � "" � ð°� ±× °Å �� °æ ±âº»� « � �) ¸®� (Ä¿ 2.0.30, 128Mb é¸ð¸� Pentium pro) � °á°ú < �� « � ' °æ0 � 4 2 3% ¹Ì Áâ� ±×� « � ' °æ 2 100ms ® � ® � LAN � � °°á¹� ¬´ < � °æ « � �) ' �ä¸� SINGLE_LISTEN_UNSERIALIZED_ACCEPT�

Close 'lingering)

draft-ietf-http-connection-00.txt 8 � /strong> � �� ¤¸�, � ¹æ � ¸³< � � (TCP °°� ¹æ �4 , ¹æ � � ¸³4 . � ¤¸� � # °°� '�, 9 1.2� ±¸ �

±â� öÁ� � 9 6� � � � ¹® � � TCP � FIN_WAIT_2 � ' '�, �'' � 9 1.2 � < FIN_WAIT_2 � ¸Å � °æ ¹® � °ø 5 TCP/IP � � � ´°� ±×� � � � �' °æ0 (&, SunOS4 -- �4$ � ' � '�) ±â ¹® ±â� �) ' ±â °á

¹æ �' < � SO_LINGER� �) ¹æ� ±×� � �� TCP/IP � � � � ±¸ ' � � ±¸ � Á¶Â÷ (&, ¸® 2.0.31) ¹æ � ¹æ º¸ cpu� � ¸Ô

9 º¸ (http_main.c ) lingering_close� � � �) � 6 � � �

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);
}

= °°� � CPU� �) '�, ±¸ HTTP/1.1 � � � ¸ð °°� ©¸é(persistent), °°� � ¾i � 2 2¸® ¸é ¬´ � NO_LINGCLOSE� ±â� �) ' '�, � �' � HTTP/1.1 � � (��; °°�' � ±âä¸�' � � 2 º¸� ±â ) °°�' lingering_close� � (±×¸®� � � °°� ù¸£±â¹� �) � � ¬´ .

Scoreboard /h3>

9 ö¸� scoreboard� � � � � �< scoreboard� °ø é¸ð¸�� ±¸ � °¸� ��� � � ü ±Ù °Å � � °á°ú� � °æ º¸ °ø é¸ð¸�� �) ±¸ ¸Ó � � � �) ±¸ � � � ¸® ·Ú � �4 (±â� . src/main/conf.h � �) � 3� ã USE_MMAP_SCOREBOARDUSE_SHMGET_SCOREBOARD� � $ � (�� � �) HAVE_MMAPHAVE_SHMGET � � °ø é¸ð¸� =� �) � ¤¸� "� °ø é¸ð¸�� �) ¤¸� src/main/http_main.c � 9 °ø é¸ð¸�� �) � (hook) 6� ( � � °¸�� º¸ôÁ�� �)

� � : 9 ¸® � 9 1.2 �� °ø é¸ð¸�� �) � ¸®� 4� 9 � ¸® ·Ú � �4 � ¹®4

DYNAMIC_MODULE_LIMIT

¸ð � �4�4 ¤¸� (�% Á¶�� �� ´±� � �ä¸� � ¸ð � �4�4 ¬´ , �� ÄÄ � -DDYNAMIC_MODULE_LIMIT=0 6� ±×ì¸� ¸ð � �4�4±â � é¸ð¸�� �

top

��: � � ±â � ��/a>

� Solaris 8 worker MPM �) 9 2.0.38 � � ±â (trace)� ¸÷4 �) ±â �

truss -l -p httpd_child_pid.

-l � �) � truss � � LWP (lightweight process, °æ � ·Ö -Solaris Ä¿ $ � ) ID� � ±â

¤¸� � strace, ktrace, par � � � 6 ±¸ °á°ú ¾w

��48 � � �� ¬±�� 10KB � 2 � 2' °Å �) 2 °æ ±â ¸Å ¤¸� (� ¸Å º¸±â � .

/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

°°� ¹ã4 (accept) °°�� � worker � � ±ú 2 2¸® � ±â 2 2¸® worker � � LWP #65

/65:    getsockname(9, 0x00200BA4, 0x00200BC4, 1)       = 0

°¼$ � ±¸ ±â 9 °°� ¹ã 'local) < ÁÖ � (°¼$ � �) ' °Å Listen � � Ä« ÁÖ � �) ' °æ � °æ � ±×� ' � 5

/65:    brk(0x002170E8)                                 = 0
/65:    brk(0x002190E8)                                 = 0

brk(2) � (heap) é¸ð¸�� � � � �� 2 2¸® 2 é¸ð¸� � (apr_pool� apr_bucket_alloc)� �) ±â ¹® � � ±â � � º¸±â� ¹° ±â � � � 2 é¸ð¸� � � �) é¸ð¸��� »±� 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 � ��48 � °°�(¼±� 9) ±â non-blocking) � ð²� setsockopt(2) getsockopt(2) � Solaris libc� < fcntl(2) �� 2¸® ' º¸,

/65:    read(9, " G E T   / 1 0 k . h t m".., 8000)     = 97

worker � ��48 � � 2 �

/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� ±× 2 ¼°�� � ¸® lstat(2)°Å .htaccess � °ß � � °ß ±â 1) � ', 2) ¸® ��8 , stat(2) � � �

/65:    sendfilev(0, 9, 0x00200F90, 2, 0xFAF7B53C)      = 10269

°æ � � � sendfilev(2) � � � HTTP � � 2 � � Sendfile « � ü � ¤¸� ¤¸� � �ü¸� sendfile(2) � � � � º¸ô±� write(2) writev(2)

/65:    write(4, " 1 2 7 . 0 . 0 . 1   -  ".., 78)      = 78

write(2) � ±Ù ·access log) 2 ±â ±â time(2) � ÁÖ¸ñ 9 1.3� ¬¸� 9 2.0 � ±â gettimeofday(3)� �) gettimeofday� 5 ¸®� 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� Áâ¸é °°�� � � �6 worker MPM � ±â� � worker � � � ¤¸� °°� ¹ã ±â � '�, worker � � ¹æ � °°� 2¸® � accept(2)� (2 ¸Å � °æ ) �4

�% �  en� |  fr� |  ko� |  tr�

top

Comments

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.