nginx module memory problem

Pass86 pass86 at gmail.com
Thu Oct 4 14:30:28 UTC 2012


maybe pool ?

发自我的 iPhone

在 2012-10-4,13:13,김영진 <yjkim2040 at gmail.com> 写道:

> hi, i am web server(nginx) module developer. 
> my nginx modules has a major problem.
> maybe... this problem is seem to nginx core bug.
> i hope this is my module problem. Because, i wish the problem to be settled soon.
> 
> my module function:
> large post data logging from specified file(nginx.conf setting : /home1/test_access.log)
> 
> problem:
> constant use of memory(nginx-1.2.2 , same situation)
> <memory.jpg>
>  
>  
> nginx environment:
> ./nginx -V
> nginx version: nginx/1.0.14
> built by gcc 4.1.2 20080704 (Red Hat 4.1.2-44)
> configure arguments: --prefix=/home1/apps/nginx --with-http_gzip_static_module --with-http_stub_status_module --add-module=/home1/apps/nginx-1.0.14/modules/testmodule
>  
> server environment:
> uname -a
> Linux test.server 2.6.18-164.el5 #1 SMP Thu Sep 3 03:28:30 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
> /etc/redhat-release:
> CentOS release 5.3 (Final)
> nginx.conf:
> worker_processes 2;
> worker_cpu_affinity 01 10;
> worker_rlimit_core 500M;
> working_directory /home1/cores/;
> worker_rlimit_nofile 15000;
> ...
> events {
> worker_connections 15000;
> accept_mutex on;
> }
> ...
> http {
> client_body_in_single_buffer on;
> client_body_in_file_only off;
> client_body_buffer_size 10m;
> client_max_body_size 10m;
> client_header_buffer_size 10m;
> server {
> listen 80;
> server_name test.test.com;
> location = /test {
> testaccess_log /home1/test_access.log;
> ...
> }
> ...
> }
> }
> ...
> 
>  my module source code :
> static int ngx_testmodule_log_write(ngx_http_request_t *r, char * content, unsigned int content_size)
> {
> this function is file writting...
> }
> 
> void
> ngx_testmodule_post_read_request_body(ngx_http_request_t *r)
> {
> ngx_int_t totalreadsize;
> ngx_int_t movepos;
> 
> ngx_chain_t * cl=NULL;
> ngx_chain_t * cl2=NULL;
> ngx_buf_t * buf=NULL;
> char * container=NULL;
> ngx_http_testmodule_conf_t * pConfig = NULL;
> int split_returnvalue;
> pConfig = ngx_http_get_module_loc_conf(r, ngx_http_testmodule_module);
> 
> if(r->request_body == NULL || r->request_body->bufs == NULL || r->request_body->bufs->buf == NULL)
> {
> ngx_http_finalize_request(r, NGX_DONE);
> return;
> }
> 
> cl = r->request_body->bufs;
> if(cl->next == NULL)
> {
> buf = cl->buf;
> totalreadsize = buf->last-buf->pos;
> if(totalreadsize > 0)
> {
> container = (char *)ngx_pcalloc(r->pool, totalreadsize+1);
> if(container == NULL)
> {
> ngx_http_finalize_request(r, NGX_DONE);
> return;
> }
> memcpy(container, (char *)buf->pos, buf->last-buf->pos);
> *(container+(buf->last-buf->pos)) = '\0';
> }
> else
> {
> ngx_http_finalize_request(r, NGX_DONE);
> return;
> }
> }
> else
> {
> fprintf(stderr, "=====MULTI BUFFER=====\n");
> totalreadsize = 0;
> cl2 = cl;
> while(cl2)
> {
> totalreadsize += cl2->buf->last - cl2->buf->pos;
> cl2 = cl2->next;
> }
> if(totalreadsize > 0)
> {
> container = (char *)ngx_pcalloc(r->pool, totalreadsize+1);
> if(container == NULL)
> {
> ngx_http_finalize_request(r, NGX_DONE);
> return;
> }
> 
> movepos = 0;
> while(cl)
> {
> memcpy(container + movepos, (char *)cl->buf->pos, cl->buf->last - cl->buf->pos);
> movepos += (cl->buf->last - cl->buf->pos);
> cl = cl->next;
> }
> *(container + movepos) = '\0';
> }
> else
> {
> ngx_http_finalize_request(r, NGX_DONE);
> return;
> }
> 
> if(totalreadsize != movepos)
> {
> ngx_http_finalize_request(r, NGX_DONE);
> return;
> }
> }
> 
> split_returnvalue = ngx_testmodule_log_write(r, container, totalreadsize);
> ngx_http_finalize_request(r, NGX_DONE);
> return;
> 
> }
> 
> ngx_http_testmodule_handler(ngx_http_request_t *r)
> {
> if (!(r->method & NGX_HTTP_POST)) {
> return NGX_HTTP_NOT_ALLOWED;
> }
> else if(!pConfig->enable) {
> return NGX_DECLINED;
> }
> 
> rc_post = ngx_http_read_client_request_body(r, ngx_testmodule_post_read_request_body);
> 
> ngx_testmodule_resheader(r);
> ...
> return ngx_http_send_response(r, NGX_HTTP_OK, &ngx_http_text_type, &cv);
> }
> 
> 
> i have tested my nginx module. but... i don't know.. difficult problem..
> i am turning to you for help.
> 
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20121004/e8b59ab6/attachment.html>


More information about the nginx-devel mailing list