CentOS 5.5 + nginx + aio
Panasonic1
nginx-forum на nginx.us
Вс Окт 17 14:53:52 MSD 2010
>diff -u
]# diff -u -r nginx-0.8.50 nginx-0.8.50-patched/
diff -u -r nginx-0.8.50/src/core/ngx_output_chain.c
nginx-0.8.50-patched/src/core/ngx_output_chain.c
--- nginx-0.8.50/src/core/ngx_output_chain.c 2010-10-15
22:33:14.000000000 +0600
+++ nginx-0.8.50-patched/src/core/ngx_output_chain.c 2010-10-15
04:48:47.000000000 +0600
@@ -74,18 +74,18 @@
}
}
+#if (NGX_HAVE_FILE_AIO)
+ if (ctx->aio) {
+ return NGX_AGAIN;
+ }
+#endif
+
out = NULL;
last_out = &out;
last = NGX_NONE;
for ( ;; ) {
-#if (NGX_HAVE_FILE_AIO)
- if (ctx->aio) {
- return NGX_AGAIN;
- }
-#endif
-
while (ctx->in) {
/*
diff -u -r nginx-0.8.50/src/http/ngx_http_copy_filter_module.c
nginx-0.8.50-patched/src/http/ngx_http_copy_filter_module.c
--- nginx-0.8.50/src/http/ngx_http_copy_filter_module.c 2010-05-14
18:18:44.000000000 +0600
+++ nginx-0.8.50-patched/src/http/ngx_http_copy_filter_module.c
2010-10-15 04:53:23.000000000 +0600
@@ -118,8 +118,10 @@
ctx->filter_ctx = r;
#if (NGX_HAVE_FILE_AIO)
- if (ngx_file_aio && clcf->aio) {
- ctx->aio_handler = ngx_http_copy_aio_handler;
+ if (ngx_file_aio) {
+ if (clcf->aio) {
+ ctx->aio_handler = ngx_http_copy_aio_handler;
+ }
#if (NGX_HAVE_AIO_SENDFILE)
c->aio_sendfile = (clcf->aio == NGX_HTTP_AIO_SENDFILE);
#endif
@@ -156,6 +158,11 @@
ngx_file_t *file;
ngx_http_ephemeral_t *e;
+ if (r->aio) {
+ c->busy_sendfile = NULL;
+ return rc;
+ }
+
file = c->busy_sendfile->file;
offset = c->busy_sendfile->file_pos;
@@ -211,6 +218,8 @@
r->main->blocked++;
r->aio = 1;
+
+ ctx->aio = 1;
}
diff -u -r nginx-0.8.50/src/http/ngx_http_request.c
nginx-0.8.50-patched/src/http/ngx_http_request.c
--- nginx-0.8.50/src/http/ngx_http_request.c 2010-07-05
19:35:20.000000000 +0600
+++ nginx-0.8.50-patched/src/http/ngx_http_request.c 2010-10-15
04:53:23.000000000 +0600
@@ -2218,17 +2218,17 @@
return;
}
- } else {
- if (wev->delayed || r->aio) {
- ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
- "http writer delayed");
+ }
- if (ngx_handle_write_event(wev, clcf->send_lowat) !=
NGX_OK) {
- ngx_http_close_request(r, 0);
- }
+ if (wev->delayed || r->aio) {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
+ "http writer delayed");
- return;
+ if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) {
+ ngx_http_close_request(r, 0);
}
+
+ return;
}
rc = ngx_http_output_filter(r, NULL);
@@ -2244,7 +2244,7 @@
if (r->buffered || r->postponed || (r == r->main && c->buffered))
{
- if (!wev->ready && !wev->delayed) {
+ if (!wev->delayed) {
ngx_add_timer(wev, clcf->send_timeout);
}
diff -u -r nginx-0.8.50/src/os/unix/ngx_linux_aio_read.c
nginx-0.8.50-patched/src/os/unix/ngx_linux_aio_read.c
--- nginx-0.8.50/src/os/unix/ngx_linux_aio_read.c 2009-11-05
19:12:30.000000000 +0600
+++ nginx-0.8.50-patched/src/os/unix/ngx_linux_aio_read.c
2010-10-15 04:48:47.000000000 +0600
@@ -95,6 +95,10 @@
n = io_submit(ngx_aio_ctx, 1, piocb);
if (n == 1) {
+ ev->active = 1;
+ ev->ready = 0;
+ ev->complete = 0;
+
return NGX_AGAIN;
}
>grep alert /path/to/error.log
Очень много алертов. Кусок:
2010/10/17 16:39:08 [alert] 18916#0: *159817 second aio post for
"file.mp4" while sending response to client, client: 77.244.215.40,
server: example.com, request: "GET file.mp4 HTTP/1.1", host:
"example.com"
2010/10/17 16:40:03 [alert] 18899#0: *113623 second aio post for
"file.mp4" while sending response to client, client: 212.142.93.180,
server: example.com, request: "GET file.mp4 HTTP/1.1", host:
"example.com"
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,105802,141500#msg-141500
Подробная информация о списке рассылки nginx-ru