http://techlife.cookpad.com/entry/2016/05/18/180703 を参考に。
$ cp /usr/share/doc/nodejs/guides/doc_img/compare-boxplot.png /tmp/t.png
$ convert -debug Resource t.png -auto-orient -resize "1280x1280>" -quality 90 -strip u.png
:
2017-11-25T11:39:12-10:00 0:00.550 0.910u 6.9.7 Resource convert-im6.q16[7236]: resource.c/RelinquishMagickResource/1013/Resource
Memory: 13.11MB/0B/256MiB
デバグの表示はよくわからない。valgrindを使ってみよう。
$ valgrind --tool=massif convert t.png -auto-orient -resize "1280x1280>" -quality 90 -strip u.png
$ ls -tr massif.out.* | tail -1 | xargs ms_print | less
:
Detailed snapshots: [20, 22, 24, 25, 30, 41, 45 (peak), 55, 65, 75]
:
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
:
45 624,292,496 70,129,928 70,111,869 18,059 0
:
$ MAGICK_AREA_LIMIT=131072 valgrind --tool=massif convert t.png -auto-orient -resize "1280x1280>" -quality 90 -strip u.png
$ ls -tr massif.out.* | tail -1 | xargs ms_print | less
:
Detailed snapshots: [20, 25, 31, 37, 42, 44, 58, 65, 68, 78, 88 (peak)]
:
88 4,219,812,388 754,368 738,081 16,287 0
$ MAGICK_MEMORY_LIMIT=131072 valgrind --tool=massif convert t.png -auto-orient -resize "1280x1280>" -quality 90 -strip u.png
$ ls -tr massif.out.* | tail -1 | xargs ms_print | less
:
94 4,222,065,192 754,256 738,082 16,174 0
:
$ MAGICK_AREA_LIMIT=131072 MAGICK_MEMORY_LIMIT=131072 valgrind --tool=massif convert t.png -auto-orient -resize "1280x1280>" -quality 90 -strip u.png
$ ls -tr massif.out.* | tail -1 | xargs ms_print | less
:
86 4,221,203,438 754,256 738,082 16,174 0
:
環境変数で挙動が変化することは確かめられたがリミットよりも多く使っているのはなぜだろう。
$ MAGICK_MEMORY_LIMIT=131072 convert -debug Resource t.png -auto-orient -resize "1280x1280>" -quality 90 -strip u.png
なんやわからないねえ。
512MBの実環境に合わせてみる。67MiB使用。画像が小さすぎるか。
$ MAGICK_MEMORY_LIMIT=536870912 valgrind --tool=massif convert t.png -auto-orient -resize "1280x1280>" -quality 90 -strip u.png
$ ls -tr massif.out.* | tail -1 | xargs ms_print | less
:
45 624,308,653 70,129,816 70,111,869 17,947 0
:
32MiBだと13MiB使用。リミットをMiB単位に大きくしておけば期待する挙動になるのかな?
$ MAGICK_MEMORY_LIMIT=33554432 valgrind --tool=massif convert t.png -auto-orient -resize "1280x1280>" -quality 90 -strip u.png
$ ls -tr massif.out.* | tail -1 | xargs ms_print | less
:
89 4,221,767,229 13,861,352 13,845,221 16,131 0
: