Memory 如何防止gnuplot吞噬我的内存?

Memory 如何防止gnuplot吞噬我的内存?,memory,gnuplot,Memory,Gnuplot,我有一组大约500个文件和33个数据点 我正在使用以下gnuplot脚本打印这些文件 do for [i=1:477] { reset set label sprintf('Time=%03d s',i) at 0, 0.4 @png infile = sprintf('%d/lineX2_U.xy',i) outfile = sprintf('plot%03d.png',i) print i," ",infile," ",outfile set out

我有一组大约500个文件和33个数据点

我正在使用以下
gnuplot
脚本打印这些文件

do for [i=1:477] {
   reset
   set label sprintf('Time=%03d s',i) at 0, 0.4
   @png
   infile = sprintf('%d/lineX2_U.xy',i)
   outfile = sprintf('plot%03d.png',i)
   print i," ",infile," ",outfile
   set output outfile
   set xlabel "y [m]"
   set ylabel "u [m/s]"
   set xrange [-1:1]
   set yrange [0:1.2]
   plot infile  with line ls 1
}
我在哪里使用这个宏

png="set terminal pngcairo size 1800,1800 crop enhanced font \"/usr/share/fonts/truetype/times.ttf,30\" dashlength 2; set termoption linewidth 3"
问题是,系统的内存使用随着时间的推移而增加,直到
gnuplot
完成。证明:

> while true; do \grep MemFree /proc/meminfo ; sleep 10s; done;
MemFree:         9720956 kB
MemFree:         9121936 kB
MemFree:         8401072 kB
MemFree:         7682248 kB
MemFree:         6963356 kB
MemFree:         6219948 kB
MemFree:         5501612 kB
MemFree:         4758256 kB
MemFree:         4064564 kB
MemFree:         3346416 kB
MemFree:         2651620 kB
MemFree:         1933656 kB
MemFree:         1241644 kB
MemFree:          547836 kB
MemFree:          152200 kB
MemFree:          126396 kB
MemFree:          118232 kB
MemFree:          131612 kB
MemFree:          117760 kB
MemFree:          117936 kB
MemFree:          118368 kB
MemFree:        10934164 kB
MemFree:        10898460 kB
MemFree:        10863592 kB
MemFree:        10822712 kB
它在执行
gnuplot
脚本期间监视自由可用的内存。当然,内存不足是非常不希望的。有无
重置
似乎没有什么区别

经过一些测试,我发现通过省略
pngcairo
终端的
crop
选项,问题得以解决

那么,最基本的繁殖脚本是:

set terminal png crop
do for [i=1:500] {
 set output sprintf('plot%03d.png', i)
 plot '+' using 1:(rand(0)) w l
}
如何解决由
pngcairo
终端的
crop
选项引起的内存问题


注意:我正在使用gnuplot 4.6

这是在使用
crop
选项时
pngcairo
终端中的一个错误。再现这一点的最小示例是

set terminal pngcairo size 1000,1000 crop
do for [i=1:500] {
  set output 'plot.png'
  plot x w l
  set output
}
在内部,保存裁剪图像的结构没有被释放,这导致了内存泄漏。这在生成许多图像时变得明显

该漏洞在4.6 patchlevel 3中仍然存在,但在2013-09-09的开发版本中已修复,请参阅


编辑:已在patchlevel 4中修复。

此问题已在新发布的4.6 patchlevel 4中修复。很好,感谢分享:)