[英]How can I prevent gnuplot from eating my memory?
我有一组包含33个数据点的大约500个文件。
我正在使用以下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
脚本执行期间,它正在监视可用内存。 当然,耗尽内存是非常不希望的。 有和没有reset
似乎没有什么区别。
经过一些测试,我发现通过省略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的开发版本中修复,请参阅#1278'pngcairo crop'的内存泄漏 。
编辑:在补丁程序级别4中已修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.