Test the OOM situation

Peter Leonov gojpeg at gmail.com
Wed May 19 16:01:07 MSD 2010


On 18.05.2010, at 23:26, Maxim Dounin wrote:

> Hello!
> 
> On Tue, May 18, 2010 at 08:25:46PM +0400, Peter Leonov wrote:
> 
>> Hello devels,
>> 
>> There is a module that requires a heavy testing in environment with
>> low memory. Especialy it could be good to test how it goes if no
>> more memory is available in the system.
>> 
>> So the questions are: is there a way to test such a module without a
>> virtual machines? and are there some tools which might be of help?
> 
> You may tune memory limit for a given process instead of using 
> virtual machine.  Though this won't really help with testing nginx 
> modules as pool allocator will protect most of allocations from 
> seeing errors (while they still can happen with sligtly different 
> config).

You mean that the module will be even left untouched as far
as the main request pool fail to be allocated. Understood.

> 
> Injecting random errors into allocation routines proven to be much 
> more usable.  Just for completeness: attached trivial patch which 
> I used while searching for allocation error handling bugs in nginx 
> itself.

That is near what I was looking for :)

But it gives a very interesting results. For example a crash within the core:

40740 Bus error               (core dumped)

#0  0x0000484b in ngx_destroy_pool (pool=0x3262b0) at src/core/ngx_palloc.c:74
74	    for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {

#0  0x0000484b in ngx_destroy_pool (pool=0x3262b0) at src/core/ngx_palloc.c:74
#1  0x0002cd16 in ngx_http_close_connection (c=0x879e58) at src/http/ngx_http_request.c:3020
#2  0x0002f56a in ngx_http_set_keepalive [inlined] () at /Users/peter/pro/nginx/src/http/ngx_http_request.c:2559
#3  0x0002f56a in ngx_http_finalize_connection (r=<value temporarily unavailable, due to optimizations>) at src/http/ngx_http_request.c:2121
#4  0x0002ff66 in ngx_http_finalize_request (r=0x807c00, rc=0) at src/http/ngx_http_request.c:2029
#5  0x0003068a in ngx_http_writer (r=0x807c00) at src/http/ngx_http_request.c:2247
#6  0x0002ca70 in ngx_http_run_posted_requests (c=0x879e58) at src/http/ngx_http_request.c:1812
#7  0x0003eb06 in ngx_http_upstream_handler (ev=0x88fe78) at src/http/ngx_http_upstream.c:879
#8  0x00022ebe in ngx_kqueue_process_events (cycle=0x813628, timer=2990, flags=<value temporarily unavailable, due to optimizations>) at src/event/modules/ngx_kqueue_module.c:683
#9  0x00018d85 in ngx_process_events_and_timers (cycle=0x813628) at src/event/ngx_event.c:245
#10 0x0001fb44 in ngx_single_process_cycle (cycle=0x813628) at src/os/unix/ngx_process_cycle.c:306
#11 0x00003c5c in main (argc=7, argv=0xbffff558) at src/core/nginx.c:393


Best regards,
Peter.


More information about the nginx-devel mailing list