0

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は変わらないようです。

いくつかのテストの後、端末のcropオプションを省略することで問題が解決されることがわかりました。pngcairo

最小限の生殖スクリプトは次のようになります。

set terminal png crop
do for [i=1:500] {
 set output sprintf('plot%03d.png', i)
 plot '+' using 1:(rand(0)) w l
}

端末のcropオプションが原因で発生するこのメモリの問題は、どのように解決できますか?pngcairo

注: gnuplot 4.6 を使用しています

4

1 に答える 1

1

これはオプションpngcairo使用時のターミナルのバグです。cropこれを再現するための最小限の例は

set terminal pngcairo size 1000,1000 crop
do for [i=1:500] {
  set output 'plot.png'
  plot x w l
  set output
}

内部的には、トリミングされた画像を保持する構造体が解放されていなかったため、メモリ リークが発生していました。これは、多くの画像を生成するときに明らかになります。

このバグは 4.6パッチレベル3 でも解決されていませんが、2013 年 9 月 9 日の開発バージョンで修正されました。

編集: パッチレベル 4 で修正されています。

于 2013-09-09T21:44:30.627 に答える