<-
Apache > HTTP Server > �ĵ� > �汾2.2 > �����ĵ�
���� ��л | �������� | ��ƪ���ߣ��𲽹� | ��ҳ�����£�2006��3��21�� | ��ȡ���°汾

���ܷ������ʾ

Apache2.0��һ������;��web�������������������ԡ�����ֲ�Ժ����������ƽ�⡣��Ȼû��������Ͽ���׷������ָ�꣬����Apache2.0��Ȼ�������ʵ������ӵ�кܸߵ����ܡ�

�����Apache 1.3 ��2.0�汾���˴������Ż����������������Ϳ������ԣ����Ҵ�����ĸĽ���Ĭ��״̬�¾Ϳ�����Ч�����ǣ��ڱ���ʱ������ʱ����������������������ܵ�ѡ�񡣱��IJ����ڰ�װApache2.0ʱ������������Ա���Ը������ܵĸ��ַ��������У���������ѡ�����ʹhttpd���õ�����Ӳ���Ͳ���ϵͳ�ļ����ԣ����������Թ��ܻ�ȡ�ٶȡ�

top

Ӳ���Ͳ���ϵͳ

Ӱ��web���������ܵ������������ڴ档һ��web������Ӧ�ôӲ�ʹ�ý������ƣ���Ϊ�����������ͺ�ʹ�û��ܸо�"������"�������û��Ϳ���ȥ��"ֹͣ"��"ˢ��"���Ӷ���������ĸ��ء�����ԣ�ҲӦ�ã�����MaxClients�����ã��Ա������������̫����ӽ��̶�����������������̺ܼ򵥣�ͨ��top��������ÿ��Apache����ƽ�����ĵ��ڴ棬Ȼ����Ϊ�������������㹻����ڴ档

�������ؾͺ���ͨ�ˣ�װһ���㹻���CPU��һ���㹻��������������㹻���Ӳ�̣�����˵��"�㹻��"��ָ������ʵ��Ӧ�õ�����

����ϵͳ�Ǻ�ֵ�ù�ע����һ�����أ��Ѿ���֤ʵ�ĺ����õľ����У�

top

����ʱ������

HostnameLookups ������DNS����

��Apache1.3��ǰ�İ汾�У�HostnameLookupsĬ�ϱ���Ϊ On ����������ӳ٣���Ϊ��ÿһ��������Ҫ��һ��DNS��ѯ����Apache1.3�У�����Ĭ�ϵ�����Ϊ Off �������Ҫ��־�ļ��ṩ��������Ϣ�����ɷ������棬�����ʹ����־�������logresolve �������DNS��ѯ�����ͻ�������ȴ���

�Ƽ�������������������ϣ���������web��������ִ�к����������־ͳ�Ʋ���������Ӱ������������ܡ�

�����ʹ�����κ�"Allow from domain"��"Deny from domain"ָ��(Ҳ����domainʹ�õ���������������IP��ַ)���������Ҫ��������DNS��ѯ(һ�������һ�η�����ȷ��û������)�����ԣ�Ϊ�˵õ���ߵ����ܣ�Ӧ�ñ���ʹ����Щָ��(������������IP��ַҲ�ǿ��Ե�)��

ע�⣬���԰���Щָ�������<Location /server-status>����ʹ֮�ֲ���������������£�ֻ�ж�������������Żᷢ��DNS��ѯ��������ֹ����.html��.cgi���������DNS��ѯ��

HostnameLookups off
<Files ~ "\.(html|cgi)$">
HostnameLookups on
</Files>

�����ijЩCGI��ż����ҪDNS���ƣ�����Ե���gethostbyname�������

FollowSymLinks �� SymLinksIfOwnerMatch

�����վ�ռ���û��ʹ�� Options FollowSymLinks ����ʹ���� Options SymLinksIfOwnerMatch ��Apache�ͱ���ִ�ж����ϵͳ��������֤�������ӡ��ļ�����ÿһ����ɲ��ֶ���Ҫһ������ĵ��á����磬��������ˣ�

DocumentRoot /www/htdocs
<Directory />
Options SymLinksIfOwnerMatch
</Directory>

������"/index.html"ʱ��Apache����"/www"��"/www/htdocs"��"/www/htdocs/index.html"ִ��lstat()���á�����lstat()��ִ�н���������棬��˶�ÿһ������Ҫִ��һ�Ρ����ȷʵ��Ҫ��֤�������ӵİ�ȫ�ԣ������������

DocumentRoot /www/htdocs
<Directory />
Options FollowSymLinks
</Directory>

<Directory /www/htdocs>
Options -FollowSymLinks +SymLinksIfOwnerMatch
</Directory>

���������ٿ��Ա����DocumentRoot·���Ķ������֤��ע�⣬���Alias��RewriteRule�к���DocumentRoot�����·������ôͬ����Ҫ���������ĶΡ�Ϊ�˵õ�������ܣ�Ӧ�������Է������ӵı����������еط�������FollowSymLinks ��������ʹ��SymLinksIfOwnerMatch ��

AllowOverride

�����վ�ռ�������(ͨ������.htaccess�ļ�)����Apache����ͼ���ļ�����ÿһ����ɲ��ֶ���.htaccess �����磺

DocumentRoot /www/htdocs
<Directory />
AllowOverride all
</Directory>

�������"/index.html"����Apache����ͼ��"/.htaccess"��"/www/.htaccess"��"/www/htdocs/.htaccess"������������ǰ�������� Options FollowSymLinks ���ơ�Ϊ�˵õ�������ܣ�Ӧ�����ļ�ϵͳ�����еĵط���ʹ�� AllowOverride None ��

������

ʵ���У�����Э�̵ĺô��������ܵ���ʧ��������������һ����������ʧ������Խ�ֹʹ������Э�̡�������Ȼ�и�����������߷��������ٶȣ����Dz�Ҫʹ��ͨ������磺

DirectoryIndex index

��ʹ���������б��磺

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

������õ�Ӧ�÷���ǰ�档

���У�����һ����ȷ��type-map�ļ�������������ʹ��"Options MultiViews"����Ϊ������Ҫ����Ϣ����һ���������ļ��У�����������Ŀ¼����ο�����Э���ĵ��Ի�ø���ϸ��Э�̷����ʹ���type-map�ļ���ָ����

�ڴ�ӳ��

��Apache2.0��Ҫ�����������ļ�������ʱ�����紦��������˰���ʱ���������ϵͳ֧��ij����ʽ��mmap() �����Դ��ļ�ִ���ڴ�ӳ�䡣

��ijЩƽ̨�ϣ��ڴ�ӳ�����������ܣ�������ijЩ����£��ڴ�ӳ��ή����������Ӱ�쵽httpd���ȶ��ԣ�

��������������������Ӧ��ʹ�� EnableMMAP off �رնԷ����ļ����ڴ�ӳ�䡣ע�⣺��ָ����Ա����Ŀ¼�����ø��ǡ�

Sendfile

��Apache2.0�ܹ����Խ�Ҫ�����͵��ļ������ݵ�ʱ��(���緢�;�̬����)���������ϵͳ֧��sendfile() ����Apache��ʹ���ں��ṩ��sendfile()�������ļ���

�ڴ����ƽ̨�ϣ�ʹ��sendfile����ͨ���������Ķ���д�������������ܡ�Ȼ����ijЩ����£�ʹ��sendfile��Σ����httpd���ȶ���

������������������Ӧ��ʹ��"EnableSendfile off"������sendfile ��ע�⣬���ָ����Ա����Ŀ¼�����ø��ǡ�

���̵Ľ���

��Apache1.3��ǰ��MinSpareServers, MaxSpareServers, StartServers�����ö����ܶ��кܴ��Ӱ�졣������Ϊ��Ӧ�Ը��ض������㹻���ӽ���ʱ��Apache��Ҫ��һ��"����"�Ĺ��̡����������StartServers�������ӽ��̺�Ϊ������MinSpareServers���õ���Ҫ��ÿһ����ֻ�ܽ���һ���ӽ��̡����ԣ���һ����Ҫͬʱ����100���ͻ��˵ķ����������StartServersʹ��Ĭ�ϵ�����5����Ϊ��Ӧ�Ը��ض������㹻����ӽ�����Ҫ95�롣��ʵ��Ӧ���У������Ƶ���������������������������ԣ������������Ϊ���ṩ10���ӵķ��������ͺ�����ˡ�

"һ����һ��"�Ĺ涨��Ϊ�˱����ڴ����ӽ��̹����з��������������Ӧͣ�٣��������Է��������ܵ�Ӱ��̫���ˣ��������Ըı䡣��Apache1.3�У����"һ����һ��"�Ĺ涨��ÿ����ˣ�����һ�����̣��ȴ�һ���ӣ����������ڶ������ٵȴ�һ���ӣ��̶������ĸ�����˰�ָ�������Ӵ����Ľ����������ﵽÿ��32����ֱ������MinSpareServers���õ�ֵΪֹ��

�Ӷ�����ӳ�������ƺ�û�б�Ҫ����MinSpareServers, MaxSpareServers, StartServers �����ÿ���Ӵ����Ľ���������4���������ErrorLog�в���һ����Ϣ�����������������Ϣ������Կ����޸���Щ���á�����ʹ��mod_status�������Ϊ�ο���

����̴�����ص�����MaxRequestsPerChild�����Ľ��̵����١���Ĭ��ֵ��"0"����ζ��ÿ��������������������Dz������Ƶġ������ֵ���õú�С������30���������Ҫ������ӡ���SunOS����Solaris�����ڰ汾�ϣ������ֵΪ10000�����ڴ�й©��

��������˳־����ӣ��ӽ��̽�����æµ״̬�Եȴ����������ϵ�������Ϊ����С���为��Ӱ�죬KeepAliveTimeout��Ĭ��ֵ������Ϊ5�룬��ı���������ͷ�������Դ֮���ƽ�⡣���κ�����´�ֵ����Ӧ������60�룬�μ�most of the benefits are lost��

top

����ʱ������

ѡ��һ��MPM

Apache 2.x ֧�ֲ���ʽ���д���ģ�飬��Ϊ��·����ģ��(MPM)���ڱ���Apacheʱ�����ѡ��Ҳֻ��ѡ��һ��MPM�������м�����Է�UNIXϵͳ��MPM��beos, mpm_netware, mpmt_os2, mpm_winnt������UNIXϵͳ���м�����ͬ��MPM�ɹ�ѡ�����Ƕ���Ӱ�쵽httpd���ٶȺͿ������ԣ�

����MPM�ĸ������ݣ���ο����ĵ���

ģ��

��Ȼ�ڴ�������Ӱ�����ܵ���Ҫ���أ����Ӧ������ȥ���㲻��Ҫ��ģ�顣����㽫ģ������DSO ��ȡ������Ҫ��ģ�����һ���dz��򵥵����飺ע�͵�LoadModuleָ���в���Ҫ��ģ�顣

������Ѿ���ģ�龲̬���ӽ�Apache�����ƺ��ģ���ͱ������±���Apache��ȥ���㲻��Ҫ��ģ�顣

����ģ��ǣ�浽��һ�������ǣ�������Ҫ��Щģ�顢����Ҫ��Щģ�飿��ȡ���ڷ������ľ��������һ��˵��������Ҫ��������ģ�飺mod_mime, mod_dir, mod_log_config ����Ҳ���Բ�Ҫmod_log_config ������һ�㲻�Ƽ���������

ԭ�Ӳ���

һЩģ�飬����mod_cache��workerʹ��APR(Apache����ֲ����ʱ)��ԭ��API����ЩAPI�ṩ���ܹ������������߳�ͬ����ԭ�Ӳ�����

Ĭ������£�APR��ÿ��Ŀ��OS/CPU��ʹ��������Ч������ִ����Щ��������������ִ�CPU��ָ�����һ��ԭ�ӵıȽϽ���(compare-and-swap, CAS)����ָ���һЩ��ʽƽ̨�ϣ�APRĬ��ʹ��һ�ֻ����ġ����ڻ���ִ�е�ԭ��API�Ա��ֶ�û��CASָ�����ʽCPU�ļ��ݡ������ֻ��������ʽ��CPU������Apache��������ڱ���ʱʹ�� --enable-nonportable-atomics ѡ�

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

--enable-nonportable-atomics ѡ��ֻ������ƽ̨��أ�

mod_status �� "ExtendedStatus On"

���Apache�ڱ���ʱ������mod_status ������������ʱ������"ExtendedStatus On"����ôApache���ÿ�������������gettimeofday()(���߸��ݲ���ϵͳ�IJ�ͬ������times())�Լ�(1.3��֮ǰ)���������time()���ã�ʹ״̬��¼����ʱ���־��Ϊ�˵õ�������ܣ���������"ExtendedStatus off"(��Ҳ��Ĭ��ֵ)��

��socket����µĴ���accept

����

�ⲿ��������δ��ȫ����Apache2.0�еı仯���и��� ��һЩ��Ϣ��Ȼ��Ч��ʹ������ע�⡣

����Ҫ˵���� Unix socket API ��һ��ȱ�㡣����web������ʹ���˶��Listen����������˿ڻ��߶����ַ��Apache��ʹ��select()�Լ��ÿ��socket�Ƿ������select()�����һ��socket����������һ���������Ⱥ�������Apache��ģ���Ƕ��ӽ��̵ģ����п��н��̻�ͬʱ����µ����ӡ�һ���������ʵ�ַ�����������(��Щ���Ӳ�����Դ���룬ֻ��Ϊ��˵���������)��

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

���������ʵ�ַ�����һ�����ص�"����"���⡣�������ӽ���ͬʱִ�����ѭ�������ڶ������֮�䣬���̻ᱻ������select ���漴����ѭ������ͼaccept�����ӣ�����ֻ��һ�����̿��Գɹ�ִ��(���軹��һ�����Ӿ���)�����������ᱻ������accept ��������ֻ����һ��socket���Դ������󣬶�����������ס�ˣ�ֱ�����㹻����������ǻ��ѡ���"����"������PR#467����ר�ŵĽ�����Ŀǰ���������ֽ��������

һ�ַ�����ʹ�÷�������socket ���������ӽ��̲�����������������ִ�С������������˷�CPUʱ�䡣����һ�£�select��10���ӽ��̣���һ�����󵽴��ʱ������9�������ѣ�����ͼaccept�����ӣ��̶�����selectѭ�����������£��������û��һ���ӽ����ܹ���Ӧ����������socket�ϵ�����ֱ���˳�selectѭ������֮���������Ч�ʲ�����ô�ߣ��������кܶ��CPU�����ҿ��˺ܶ��ӽ��̡�

��һ��Ҳ��Apache��ʹ�õķ����ǣ�ʹ�ڲ�ѭ������ڴ��л�������(��֮ͬ���Ը�����ʾ)��

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ʵ����һ�������źŵƣ����κ�ʱ��ֻ��Ϊһ���ӽ�����ӵ�С�ʵ�ֻ���ķ����ж��֣��䶨��λ��src/conf.h(1.3��ǰ�İ汾)��src/include/ap_config.h(1.3���Ժ�İ汾)�С���һЩ����û���������Ƶ���ϵ�У�ʹ�ö��Listenָ����Dz���ȫ�ġ�

AcceptMutexָ������ı�������ʱʹ�õĻ��ⷽ����

AcceptMutex flock

���ַ�������ϵͳ����flock()������һ�������ļ�(��λ��ȡ����LockFileָ��)��

AcceptMutex fcntl

���ַ�������ϵͳ����fcntl()������һ�������ļ�(��λ��ȡ����LockFileָ��)��

AcceptMutex sysvsem

(1.3�����°汾)���ַ���ʹ��SysV�����źŵ���ʵ�ֻ��⡣���ҵ��ǣ�SysV�����źŵ���һЩ�����ã���һ�ǣ�Apache�п��ܲ����ڽ�����ǰ�ͷ������źŵ�(��ipcs()��man page)�����⣬�����źŵ�API�����������������ͬuid��CGI�ṩ�˾ܾ����񹥻��Ļ���(����CGI��������������suexec��cgiwrapper)�����ڴˣ��ڶ�����ϵ�ж��������ַ���������IRIX(��Ϊǰ���ַ�����IRIX�д���̫��)��

AcceptMutex pthread

(1.3�����°汾)���ַ���ʹ����POSIX���⣬����Ӧ�ÿ���������������ʵ����POSIX�̹߳淶����ϵ�У������ƺ�ֻ������Solaris2.5�����°汾�У�����ֻ����ij�������²�����������������������������Ӧ������������Ĺ����ʧȥ��Ӧ��ֻ�ṩ��̬���ݵķ��������ܲ���Ӱ�졣

AcceptMutex posixsem

(2.0�����°汾)���ַ���ʹ����POSIX�źŵơ����һ�������е��߳�ռ���˻���segfault �����źŵƵ������߽����ᱻ�ָ����Ӷ����·������Ĺ����ʧȥ��Ӧ��

������ϵͳ�ṩ��������������Ĵ��л��ƣ��ǾͿ�����ҪΪAPR���Ӵ���(�����ύһ��������Apache)��

����һ���������ǹ�����δ����ʵʩ�ķ�����ʹѭ�����ֵش��л�����ֻ����һ�������Ľ��̽���ѭ�������ַ������ڶ�����̿���ͬʱ���еĶദ������ϵͳ�в����м�ֵ�ģ����������Ĵ��з�����û��ռ������������Ҳ���ǽ����о���һ�����򣬵������ڸ߶Ȳ��е�����������������Ϲ淶�������䱻���ȿ��ǵij̶Ȼ�Ƚϵ͡�

��Ȼ��Ϊ�˵õ�������ܣ����͸�����ʹ�ö��Listen��䡣�����������ݻ���ֵ�ö�һ����

��socket����µĴ���accept

�����Զ�socket�ķ�����������һ���Ľ�������ô�Ե�socket�ķ������������أ��������ƺ�Ӧ��û��ʲô���⣬��Ϊ���н��������ӵ�����ʱ�������accept()�������������������"����"�����⣬������ʵ��Ӧ���У����ڸ�������������������������ͬ�����⡣�������TCPջ��ʵ�ַ������ڵ������ӵ���ʱ���ں�ʵ���ϻ���������������accept�Ľ��̣���ֻ��һ���ܵõ������Ӳ����ص��û��ռ䣬����������ڵò������Ӷ����ں��д�������״̬����������״̬Ϊ�������ڸǣ�����ȷ���ڣ����������socket�в��÷�����������ͬ�ĸ��ؼ����˷ѡ�

ͬʱ�����Ƿ����������ϵ�ṹ�У���ʹ�ڵ�socket������£�ʵʩ���л���Ч��Ҳ��������ڼ������е�����£���ʵ�ϾͶ����������ˡ���Linux(2.0.30��˫Pentium pro 166/128M RAM)�µIJ�����ʾ���Ե�socket�����л��Ȳ����л�ÿ���ӿ��Դ�����������˲���3%�����ǣ������л���ÿһ��������˶����100ms���ӳ٣����ӳٿ�������Ϊ�������������·���£����ҽ�������LAN�С������Ҫ�ı�Ե�socket�Ĵ��л������Զ���SINGLE_LISTEN_UNSERIALIZED_ACCEPT ��ʹ��socket�ķ��������׷������л���

�ӳٵĹر�

����draft-ietf-http-connection-00.txt section 8������HTTP������Ϊ���ɿ���ʵ�ִ�Э�飬��Ҫ��������ÿ�������Ϲر�ͨѶ(����һ�£�һ��TCP������˫��ģ���������֮���Ƕ�����)������һ���ϣ����������������������£�����1.2�汾��ʼ��Apache��ȷʵ���ˡ�

���������˴˹����Ժ�����һЩUnix�汾�Ķ̼�����֮Ҳ������������⡣TCP�淶��û�й涨FIN_WAIT_2������һ����ʱ����Ҳû����ȷ��ֹ����û�г�ʱ��ϵͳ�У�Apache1.2����������FIN_WAIT_2״̬�С���������£������������ù�Ӧ���ṩ��TCP/IP�������Խ�����������Ӧ�̲��ṩ����(ָSunOS4 -- �����û��dz��������Լ��޲���������֤)����ôֻ�ܹرմ˹��ܡ�

ʵ�ֵķ��������֣���һ��socketѡ��SO_LINGER �������ƺ�����ע���������TCP/IPջ����δ������ȷʵ�֡���ʹ����ȷʵ�ֵ�ջ��(ָLinux2.0.31)���˷���Ҳ��֤������۱���һ�ַ����߰���

Apache�Դ˵�ʵ�ִ�����λ�ں���lingering_close(λ��http_main.c)�С��˺����������磺

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

�˴��������ӽ���ʱ����һЩ�����������ǿɿ�ʵ��������ġ�����HTTP/1.1Խ��Խ���У������������Ӷ����ȶ��ģ��˿������ɸ��������ͬ�ֵ��������Ҫ���ȥ�ر�������ܣ����Զ���NO_LINGCLOSE ���������Ƽ��������������ǣ�����HTTP/1.1�йܵ����ȶ����ӵ����ã�lingering_close�Ѿ���Ϊ���Ա��롣���ң��ܵ��������ٶȸ�����Ӧ�ÿ�������֧�֡�

Scoreboard �ļ�

Apache�����̺��ӽ���ͨ��scoreboard����ͨѶ��ͨ�������ڴ���ʵ�ֵ�Ȼ��������ġ�����������ʵ���������ṩ��������ֲ�IJ���ϵͳ�У���ʹ�ù����ڴ棬�������ʹ�ô����ļ��������ļ������ٶ��������Ҳ��ɿ�(����Ҳ��)����ϸ�Ķ������ϵ����Ӧ��src/main/conf.h�ļ���������USE_MMAP_SCOREBOARD��USE_SHMGET_SCOREBOARD ����������֮һ(���߷ֱ�����HAVE_MMAP��HAVE_SHMGET)������ʹ�������ݵ���ش�����Ч��������ϵͳ�ṩ�������͵Ĺ������ݣ�����Ҫ�޸�src/main/http_main.c�ļ������ѱ���Ĺҹ���ӵ��������С�(Ҳ�뷢��һ������������)

ע�⣺�ڶ�Linux��Apache1.2��ֲ�汾֮ǰ��û��ʹ���ڴ湲����ʧ��ʹApache�����ڰ汾��Linux�б��ֺܲ

DYNAMIC_MODULE_LIMIT

����㲻��ʹ�ö�̬����ģ��(��������Ϊ��������λ���������Ϊ�˻�����һ��������ϵ����)�������ڱ��������ʱ���� -DDYNAMIC_MODULE_LIMIT=0 ���������Խ�ʡΪ֧�ֶ�̬����ģ���������ڴ档

top

��¼���ټ�����ϸ����

��Solaris8��MPM�У�Apache2.0.38ʹ��һ��ϵͳ�������ռ��ټ���

truss -l -p httpd_child_pid.

-l ����ʹtruss��¼ÿ��ִ��ϵͳ���õ�LWP(lightweight process--Solaris���ļ��߳�)��ID��

����ϵͳ����ʹ�ò�ͬ��ϵͳ����׷�ٹ��ߣ�����strace, ktrace, par ��������������Ƶġ�

�����У�һ���ͻ�����httpd������һ��10KB�ľ�̬�ļ����ԷǾ�̬������Э������ļ�¼���кܴ�ͬ(��ʱҲ���ѿ�����)��

/67:    accept(3, 0x00200BEC, 0x00200C0C, 1) (sleeping...)
/67:    accept(3, 0x00200BEC, 0x00200C0C, 1)            = 9

�����У������߳��� LWP #67 ��

ע���accept()���л�֧�ֵ��ѷ������������ƽ̨��Ӧ��MPM��Ĭ�������ʹ�÷Ǵ��е�accept �������ڼ�������˿ڵ�ʱ��
/65:    lwp_park(0x00000000, 0)                         = 0
/67:    lwp_unpark(65, 1)                               = 0

������һ�����Ӻ󣬼����̻߳���һ�������߳��Դ�������������У�����������Ǹ������߳��� LWP #65 ��

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

Ϊ��ʵ������������Apache��Ҫ֪���������ӵı���socket��ַ�����������£��п�������ִ�д˵���(����û����������������Listenָ����û��ʹ��ͨ���ַ)������Ŀǰ��û�жԴ����Ż�����

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

��brk()�����ǴӶ��з����ڴ�ģ�����ϵͳ���ü�¼�в����������Ϊhttpd�ڶ�����������ʹ�����Լ����ڴ������(apr_pool��apr_bucket_alloc)�������У�httpd�ո��������������������malloc()�Է���ԭʼ�ڴ�������Լ����ڴ��������

/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

���ţ������߳�ʹ�ͻ������Ӵ��ڷ�����ģʽ��setsockopt()��getsockopt()������Solaris��libc��socketִ��fcntl()������ġ�

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

�����̴߳ӿͻ��˶�ȡ����

/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

���httpd������Ϊ"Options FollowSymLinks"��"AllowOverride None"�����ԣ������ÿ���������ļ�·���е�Ŀ¼ִ��lstat()��Ҳ����Ҫ���.htaccess�ļ������򵥵ص���stat()�Լ����ļ��Ƿ���ڣ��Լ���һ����ͨ���ļ�����һ��Ŀ¼��

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

�����У�httpd����ͨ������ϵͳ����sendfilev()����HTTP��Ӧͷ�ͱ�������ļ���Sendfile�����ϵͳ��������ͬ����Щϵͳ�У��ڵ���sendfile()��ǰ����Ҫ����write()��writev()�Է�����Ӧͷ��

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

��write()�����ڷ�����־�ж��������˼�¼��ע�⣬����û�ж�time()�ĵ��õļ�¼����Apache1.3��ͬ��Apache2.0ʹ��gettimeofday()�Բ�ѯʱ�䡣����Щ����ϵͳ�У�����Linux��Solaris��gettimeofday��һ���Ż��İ汾���俪����һ����ͨ��ϵͳ����ҪСһ�㡣

/65:    shutdown(9, 1, 1)                               = 0
/65:    poll(0xFAF7B980, 1, 2000)                       = 1
/65:    read(9, 0xFAF7BC20, 512)                        = 0
/65:    close(9)                                        = 0

�����̶߳��������ӳٵĹرա�

/65:    close(10)                                       = 0
/65:    lwp_park(0x00000000, 0)         (sleeping...)

��󣬹����̹߳رշ�������ļ��Ϳ飬ֱ���������̰���ָ�ɸ���һ�����ӡ�

/67:    accept(3, 0x001FEB74, 0x001FEB94, 1) (sleeping...)

��䣬�������̿����ڰ�һ������ָ�ɸ�һ���������̺�����������һ������(����������й������̶�����æµ״̬�������MPM�е�һЩ��������߼�����Լ)����Ȼ�ڴ����в������ԣ��ڹ����̸߳ս�����һ������֮����һ��accept()��(�ڸ߸��ɵ�����¸���)�������в�����