Apache 性能最優化分析(3)_Windows教程
教程Tag:暫無Tag,歡迎添加,賺取U幣!
四. 關于編譯時設置
1) mod_status 和 ExtendedStatus On
如果在編譯Apache時您包含了mod_status并且將ExtendedStatus設置為On,Apache將為每個請求進行兩次gettimeofday(2)系統調用(或者針對不同的系統調用times(2))及(在1.3以前的版本)許多次time(2)。這些都是為了在報告中含有時間戳。為了得到最佳性能,請將ExtendedStatus設為Off(這是缺省的設置)。
2) 多socket中的accept 串行化
這部分文章將討論Unix socket API不利的一方面。假設您的服務器用多個Listen命令偵聽多個端口或者多個IP地址。Apache使用select(2)檢測每個socket連接(connection)是否就緒。select(2)示意有零個或至少一個連接等待某個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;
}
1) mod_status 和 ExtendedStatus On
如果在編譯Apache時您包含了mod_status并且將ExtendedStatus設置為On,Apache將為每個請求進行兩次gettimeofday(2)系統調用(或者針對不同的系統調用times(2))及(在1.3以前的版本)許多次time(2)。這些都是為了在報告中含有時間戳。為了得到最佳性能,請將ExtendedStatus設為Off(這是缺省的設置)。
2) 多socket中的accept 串行化
這部分文章將討論Unix socket API不利的一方面。假設您的服務器用多個Listen命令偵聽多個端口或者多個IP地址。Apache使用select(2)檢測每個socket連接(connection)是否就緒。select(2)示意有零個或至少一個連接等待某個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;
}
相關Windows教程:
- 相關鏈接:
- 教程說明:
Windows教程-Apache 性能最優化分析(3)。