Apache 性能最優(yōu)化分析(3)_Windows教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
四. 關(guān)于編譯時(shí)設(shè)置
1) mod_status 和 ExtendedStatus On
如果在編譯Apache時(shí)您包含了mod_status并且將ExtendedStatus設(shè)置為On,Apache將為每個(gè)請(qǐng)求進(jìn)行兩次gettimeofday(2)系統(tǒng)調(diào)用(或者針對(duì)不同的系統(tǒng)調(diào)用times(2))及(在1.3以前的版本)許多次time(2)。這些都是為了在報(bào)告中含有時(shí)間戳。為了得到最佳性能,請(qǐng)將ExtendedStatus設(shè)為Off(這是缺省的設(shè)置)。
2) 多socket中的accept 串行化
這部分文章將討論Unix socket API不利的一方面。假設(shè)您的服務(wù)器用多個(gè)Listen命令偵聽多個(gè)端口或者多個(gè)IP地址。Apache使用select(2)檢測每個(gè)socket連接(connection)是否就緒。select(2)示意有零個(gè)或至少一個(gè)連接等待某個(gè)socket。Apache含有多個(gè)子進(jìn)程,所有空閑的子進(jìn)程同時(shí)偵聽新的連接。原始的實(shí)現(xiàn)如下所示(這個(gè)例子不是真正的代碼,它出于教學(xué)目的被簡化了)
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;
}
1) mod_status 和 ExtendedStatus On
如果在編譯Apache時(shí)您包含了mod_status并且將ExtendedStatus設(shè)置為On,Apache將為每個(gè)請(qǐng)求進(jìn)行兩次gettimeofday(2)系統(tǒng)調(diào)用(或者針對(duì)不同的系統(tǒng)調(diào)用times(2))及(在1.3以前的版本)許多次time(2)。這些都是為了在報(bào)告中含有時(shí)間戳。為了得到最佳性能,請(qǐng)將ExtendedStatus設(shè)為Off(這是缺省的設(shè)置)。
2) 多socket中的accept 串行化
這部分文章將討論Unix socket API不利的一方面。假設(shè)您的服務(wù)器用多個(gè)Listen命令偵聽多個(gè)端口或者多個(gè)IP地址。Apache使用select(2)檢測每個(gè)socket連接(connection)是否就緒。select(2)示意有零個(gè)或至少一個(gè)連接等待某個(gè)socket。Apache含有多個(gè)子進(jìn)程,所有空閑的子進(jìn)程同時(shí)偵聽新的連接。原始的實(shí)現(xiàn)如下所示(這個(gè)例子不是真正的代碼,它出于教學(xué)目的被簡化了)
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;
}
相關(guān)Windows教程:
- 相關(guān)鏈接:
- 教程說明:
Windows教程-Apache 性能最優(yōu)化分析(3)
。