[rrd-users] rrdtool 1.3.0 - memory eaten away by mmap.

Tobias Oetiker tobi at oetiker.ch
Wed Jun 18 15:08:55 CEST 2008


Hi Raimund,

can you try creating a sample script that replicates this
behaviour, containing 'create, update, graph' calls ?

thanks
tobi

Yesterday Raimund Berger wrote:

>
> Hi
>
> I was just checking out possibly new features of rrdtool 1.3.0 and ran
> into an issue where a runaway rrdtool process ate all memory on my
> machine to the point of completely stalling it. More specifically
>
> my platform is Debian Etch
> $ uname -a
> Linux schioetz 2.6.18-5-686 #1 SMP Tue Dec 18 21:24:20 UTC 2007 i686 GNU/Linux
>
> with default rrdtool previously installed
> $ dpkg -l rrdtool
> ii  rrdtool    1.2.15-0.3  Time-series data storage and display system
>
> I use munin server to capture some stuff off other machines in my LAN.
>
> Yesterday, I installed rrdtool 1.3.0 in a custom location and then
> tried to run graph on one of the munin files. The rrdtool call looked
> like this
>
> ./bin/rrdtool graph router-net-up.png \
>  --imgformat=PNG \
>  --vertical-label="router net up" \
>  --start=end-1day \
>  --end=now \
>  --height=300 \
>  --width=640 \
>  --base=1000 \
>  --lower-limit=0 \
>  --upper-limit=52000 \
>  --rigid \
>  --color=BACK#000000 \
>  --color=SHADEA#000000 \
>  --color=SHADEB#000000 \
>  --color=FONT#DDDDDD \
>  --color=CANVAS#202020 \
>  --color=GRID#666666 \
>  --color=MGRID#AAAAAA \
>  --color=FRAME#202020 \
>  --color=ARROW#FFFFFF \
>  DEF:d=/var/lib/munin/quasi.internal/router.quasi.internal-if_ppp0-up-c.rrd:42:AVERAGE \
>  DEF:a=/var/lib/munin/quasi.internal/router.quasi.internal-if_eth0-up-c.rrd:42:AVERAGE \
>  AREA:d#606060:ppp0 \
>  LINE1:a#EE204D:eth0
>
> This very call has been working ok with the default rrdtool install
> all the time, but as said, with 1.3.0 it doesn't. Doing an strace on
> it, I see
>
>  open("/var/lib/munin/quasi.internal/router.quasi.internal-if_eth0-up-c.rrd", O_RDONLY) = 4
>  fstat64(4, {st_mode=S_IFREG|0644, st_size=50604, ...}) = 0
>  fadvise64(4, 0, 0, POSIX_FADV_RANDOM)   = 0
>  mmap2(NULL, 50604, PROT_READ, MAP_PRIVATE|MAP_NORESERVE, 4, 0) = 0xb78c9000
>  madvise(0xb78c9000, 50604, 0x1 /* MADV_??? */) = 0
>  madvise(0xb78c9000, 112, MADV_SEQUENTIAL|0x1) = 0
>  madvise(0xb78c9000, 120, MADV_SEQUENTIAL|0x1) = 0
>  madvise(0xb78c9000, 1296, MADV_SEQUENTIAL|0x1) = 0
>  madvise(0xb78c9000, 4, MADV_SEQUENTIAL|0x1) = 0
>  msync(0xb78c9000, 50604, MS_ASYNC)      = 0
>  munmap(0xb78c9000, 50604)               = 0
>  close(4)                                = 0
>  time(NULL)                              = 1213703114
>  mmap2(NULL, 1073152, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77d0000
>  brk(0x80b1000)                          = 0x80b1000
>  brk(0x80d9000)                          = 0x80d9000
>  mmap2(NULL, 266240, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb778f000
>  brk(0x80b8000)                          = 0x80b8000
>  mmap2(NULL, 528384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb770e000
>  munmap(0xb778f000, 266240)              = 0
>  mmap2(NULL, 1052672, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb760d000
>  munmap(0xb770e000, 528384)              = 0
>  mmap2(NULL, 2101248, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb740c000
>  munmap(0xb760d000, 1052672)             = 0
>  mmap2(NULL, 4198400, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb700b000
>  munmap(0xb740c000, 2101248)             = 0
>  mmap2(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb680a000
>  munmap(0xb700b000, 4198400)             = 0
>  mmap2(NULL, 16781312, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb5809000
>  munmap(0xb680a000, 8392704)             = 0
>  mmap2(NULL, 33558528, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb3808000
>  munmap(0xb5809000, 16781312)            = 0
>  mmap2(NULL, 67112960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xaf807000
>  munmap(0xb3808000, 33558528)            = 0
>  mmap2(NULL, 134221824, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xa7806000
>  munmap(0xaf807000, 67112960)            = 0
>  mmap2(NULL, 268439552, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x97805000
>  munmap(0xa7806000, 134221824)           = 0
>  mmap2(NULL, 536875008, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x77804000
>
> that is, mmap going and allocating memory to powers of 2, doubling
> each time.
>
> Finally, an interesting observation. I tried that same call on older
> files, and it worked allright. The same applies if I just change the
> start time in the above call and on the same file to 9am-1day, while
> just 9am gives the said memory problem. Thought this might be of
> interest.
>
> Let me know if you'd like me to provide more input.
>
> R.
>
> _______________________________________________
> rrd-users mailing list
> rrd-users at lists.oetiker.ch
> https://lists.oetiker.ch/cgi-bin/listinfo/rrd-users
>
>

-- 
Tobi Oetiker, OETIKER+PARTNER AG, Aarweg 15 CH-4600 Olten
http://it.oetiker.ch tobi at oetiker.ch ++41 62 213 9902



More information about the rrd-users mailing list