Prev: hugetlbfs: Kill applications that use MAP_NORESERVE with SIGBUS instead of OOM-killer
Next: [tip:x86/urgent] x86, mrst: Conditionally register cpu hotplug notifier for apbt
From: Paweł Sikora on 21 Apr 2010 04:50 Dnia 21-04-2010 o 11:22:19 Yann Droneaud <yann(a)droneaud.fr> napisał(a): >> (...) >> mmap(NULL, 4896, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0) >> = >> 0x7f5fd97df000 >> mprotect(0x7f5fd97df000, 4096, PROT_NONE) = -1 ENOMEM (Cannot allocate >> memory) > > Have you checked available memory on your system ? Or user limit ? > > You test program is going to allocate > 79 + 1 pages for bm > 1 + 1 for each double arrays (x 40000) > > So in the end your program is allocating 80080 pages, so about > 312MBytes. > > It not that big for a 64bits system. afaics in gdb, the mprotect fails at i=32756. it's near to 2^15. maybe some kernel data structures are full? -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Peter Zijlstra on 21 Apr 2010 06:20 On Wed, 2010-04-21 at 01:05 +0200, Paweł Sikora wrote: > hi, > > i'm trying to debug an ugly application with ElectricFence. > in fact, on x86-64 box with 8GB ram and 16GB swap i'm getting following error: > > "ElectricFence Exiting: mprotect() failed: Cannot allocate memory" > > the program has been compiled with gcc-4.5, glibc-2.11.1, kernel-2.6.32. > did you ever come across such (kernel/glibc) limitations? > > here's a simple testcase which triggs -ENOMEM in mprotect(). You probably depleted the max map count, see: /proc/sys/vm/max_map_count We have a limit on the number of maps you can have, those mprotect() calls split you maps like crazy, see also /proc/$pid/maps. eg. change your second test program to include something like: char buf[128]; snprintf(buf, sizeof(buf), "cat /proc/%d/maps", (int)getpid()); system(buf); at the end after lowering your NN count to fit, and observe the result of those mprotect() calls. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
From: Paweł Sikora on 21 Apr 2010 06:50
Dnia 21-04-2010 o 13:16:50 Peter Zijlstra <peterz(a)infradead.org> napisał(a): > On Wed, 2010-04-21 at 01:05 +0200, Paweł Sikora wrote: >> hi, >> >> i'm trying to debug an ugly application with ElectricFence. >> in fact, on x86-64 box with 8GB ram and 16GB swap i'm getting following >> error: >> >> "ElectricFence Exiting: mprotect() failed: Cannot allocate memory" >> >> the program has been compiled with gcc-4.5, glibc-2.11.1, kernel-2.6.32. >> did you ever come across such (kernel/glibc) limitations? >> >> here's a simple testcase which triggs -ENOMEM in mprotect(). > > You probably depleted the max map count, see: > /proc/sys/vm/max_map_count yes, that is the clue :) the limit in /proc/sys/vm/max_map_count was set to 65530. with `echo 128000 > /proc/sys/vm/max_map_count` the testcase passes. thanks for hint. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |