Even, <br><br>We use the JP2ECW driver.<br><br>I did the valgrind test and did not see any reported leak. Here is some of the outputs from valgrind:<br><br>==11469== Invalid free() / delete / delete[]<br>==11469==    at 0x4C2222E: free (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)<br>
==11469==    by 0x95D1CDA: (within /lib64/<a href="http://libc-2.9.so">libc-2.9.so</a>)<br>==11469==    by 0x95D1879: (within /lib64/<a href="http://libc-2.9.so">libc-2.9.so</a>)<br>==11469==    by 0x4A1D60C: _vgnU_freeres (in /usr/lib64/valgrind/amd64-linux/vgpreload_core.so)<br>
==11469==    by 0x950AB98: exit (in /lib64/<a href="http://libc-2.9.so">libc-2.9.so</a>)<br>==11469==    by 0x94F55EA: (below main) (in /lib64/<a href="http://libc-2.9.so">libc-2.9.so</a>)<br>==11469==  Address 0x40366f0 is not stack&#39;d, malloc&#39;d or (recently) free&#39;d<br>
==11469==<br>==11469== ERROR SUMMARY: 13177 errors from 14 contexts (suppressed: 0 from 0)<br>==11469== malloc/free: in use at exit: 376 bytes in 9 blocks.<br>==11469== malloc/free: 8,856,910 allocs, 8,856,902 frees, 5,762,693,361 bytes allocated.<br>
==11469== For counts of detected errors, rerun with: -v<br>==11469== Use --track-origins=yes to see where uninitialised values come from<br>==11469== searching for pointers to 9 not-freed blocks.<br>==11469== checked 1,934,448 bytes.<br>
==11469==<br>==11469== LEAK SUMMARY:<br>==11469==    definitely lost: 0 bytes in 0 blocks.<br>==11469==      possibly lost: 0 bytes in 0 blocks.<br>==11469==    still reachable: 376 bytes in 9 blocks.<br>==11469==         suppressed: 0 bytes in 0 blocks.<br>
==11469== Reachable blocks (those to which a pointer was found) are not shown.<br><br>I will check gdal trunk, but we are looking forward to an upgrade to 1.7.<br>For now, I try to find a scanline and uncompressed NITF image and perform the same gdal_translate operation on it. If the memory use does not climb when operating on uncompressed image, then we can say with more certainty that the problems lay with JPG2000 drivers. I&#39;ll let you know.<br>
<br>Thanks.<br>Ozy<br><br><div class="gmail_quote">On Wed, Jan 13, 2010 at 1:46 PM, Even Rouault <span dir="ltr">&lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Ozy,<br>
<br>
The interesting info is that your input image is JPEG2000 compressed.<br>
This explains why you were able to read a scanline oriented NITF with<br>
blockwidth &gt; 9999. My guess would be that the leak is in the JPEG2000<br>
driver in question, so this may be more a problem on the reading part<br>
than on the writing part. You can check that by running : gdalinfo<br>
-checksum NITF_IM:0:input.ntf. If you see the memory increasing again<br>
and again, there&#39;s definitely a problem. In case you have GDAL<br>
configured with several JPEG2000 drivers, you&#39;ll have to find which one<br>
is used : JP2KAK (Kakadu based), JP2ECW (ECW SDK based), JPEG2000<br>
(Jasper based, but I doubt you&#39;re using it with such a big dataset),<br>
JP2MRSID. Normally, they are selected in the order I&#39;ve described<br>
(JP2KAK first, etc). As you&#39;re on Linux, it might be interesting that<br>
you run valgrind to see if it reports leaks. As it might very slow on<br>
such a big dataset, you could try translating just a smaller window of<br>
your input dataset, like<br>
<br>
valgrind --leak-check=full gdal_translate NITF_IM:0:input.ntf output.tif<br>
-srcwin 0 0 37504 128<br>
<br>
I&#39;ve selected TIF as output format as it shouldn&#39;t matter if you confirm<br>
that the problem is in the reading part. As far as the window size is<br>
concerned, it&#39;s difficult to guess which value will show the leak.<br>
<br>
Filing a ticket with your findings on GDAL Trac might be appropriate.<br>
<br>
It might be good trying with GDAL trunk first though, in case the leak<br>
might have been fixed since 1.6.2. The beta2 source zip are to be found<br>
here : <a href="http://download.osgeo.org/gdal/gdal-1.7.0b2.tar.gz" target="_blank">http://download.osgeo.org/gdal/gdal-1.7.0b2.tar.gz</a><br>
<br>
Best regards,<br>
<br>
Even<br>
<br>
ozy sjahputera a écrit :<br>
<div class="im">&gt; Hi Even,<br>
&gt;<br>
&gt; yes, I tried:<br>
&gt; gdal_translate -of &quot;NITF&quot; -co &quot;ICORDS=G&quot; -co &quot;BLOCKXSIZE=128&quot; -co<br>
&gt; &quot;BLOCKYSIZE=128&quot;  NITF_IM:0:input.ntf output.ntf<br>
&gt;<br>
&gt; I monitored the memory use using top and it was steadily increasing<br>
&gt; till it reached 98.4% (I have 8GB of RAM and 140 GB of local disk for<br>
&gt; swap etc.) before the node died (not just the program, but the whole<br>
&gt; system just stopped responding).<br>
&gt;<br>
&gt; My GDAL version is 1.6.2.<br>
&gt;<br>
&gt; gdalinfo on this image shows the raster size of (37504, 98772) and<br>
&gt; Block=37504x1.<br>
&gt; The image is compressed using JPEG2000 option and contains two<br>
&gt; subdatasets (data and cloud data ~ I used only the data for<br>
&gt; gdal_translate test).<br>
&gt;<br>
&gt; Band info from gdalinfo:<br>
&gt; Band 1 Block=37504x1 Type=UInt16, ColorInterp=Gray<br>
&gt;<br>
&gt; Ozy<br>
&gt;<br>
&gt; On Tue, Jan 12, 2010 at 5:38 PM, Even Rouault<br>
</div>&gt; &lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a> &lt;mailto:<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;&gt;<br>
<div><div></div><div class="h5">&gt; wrote:<br>
&gt;<br>
&gt;     Ozy,<br>
&gt;<br>
&gt;     Did you try with gdal_translate -of NITF src.tif output.tif -co<br>
&gt;     BLOCKSIZE=128 ? Does it give similar results ?<br>
&gt;<br>
&gt;     I&#39;m a bit surprised that you even managed to read a 40Kx100K large<br>
&gt;     NITF<br>
&gt;     file organized as scanlines. There was a limit until very recently<br>
&gt;     that<br>
&gt;     prevented to read blocks whose one dimension was bigger than 9999.<br>
&gt;     This<br>
&gt;     was fixed recently in trunk ( see ticket<br>
&gt;     <a href="http://trac.osgeo.org/gdal/ticket/3263" target="_blank">http://trac.osgeo.org/gdal/ticket/3263</a> ) and branches/1.6, but it has<br>
&gt;     not yet been released to an officially released version. So which GDAL<br>
&gt;     version are you using ?<br>
&gt;<br>
&gt;     Does the output of gdalinfo on your scanline oriented input NITF gives<br>
&gt;     something like :<br>
&gt;     Band 1 Block=40000x1 Type=Byte, ColorInterp=Gray<br>
&gt;<br>
&gt;     Is your input NITF compressed or uncompressed ?<br>
&gt;<br>
&gt;     Anyway, with latest trunk, I&#39;ve simulated creating a similarly large<br>
&gt;     NITF image with the following python snippet :<br>
&gt;<br>
&gt;     import gdal<br>
&gt;     ds = gdal.GetDriverByName(&#39;NITF&#39;).Create(&#39;scanline.ntf&#39;, 40000,<br>
&gt;     100000)<br>
&gt;     ds = None<br>
&gt;<br>
&gt;     and then creating the tiled NITF :<br>
&gt;<br>
&gt;     gdal_translate -of NITF scanline.ntf tiled.ntf -co BLOCKSIZE=128<br>
&gt;<br>
&gt;     The memory consumption is very reasonnable (less than 50 MB : the<br>
&gt;     default block cache size of 40 MB + temporary buffers ), so I&#39;m not<br>
&gt;     clear why you would have a problem of increasing memory use.<br>
&gt;<br>
&gt;     ozy sjahputera a écrit :<br>
&gt;     &gt; I was trying to make a copy of a very large NITF image (about<br>
&gt;     40Kx100K<br>
&gt;     &gt; pixels) using GDALDriver::CreateCopy(). The new file was set to have<br>
&gt;     &gt; different block-size (input was a scanline image, output is to<br>
&gt;     have a<br>
&gt;     &gt; 128x128 blocksize). The program keeps getting killed by the system<br>
&gt;     &gt; (Linux). I monitor the memory use of the program as it was executing<br>
&gt;     &gt; CreateCopy and the memory use was steadily increasing as the<br>
&gt;     progress<br>
&gt;     &gt; indicator from CreateCopy was moving forward.<br>
&gt;     &gt;<br>
&gt;     &gt; Why does CreateCopy() use so much memory? I have not perused the<br>
&gt;     &gt; source code of CreateCopy() yet, but I am guessing it employs<br>
&gt;     &gt; RasterIO() to perform the read/write?<br>
&gt;     &gt;<br>
&gt;     &gt; I was trying different sizes for GDAL  cache from 64MB, 256MB,<br>
&gt;     512MB,<br>
&gt;     &gt; 1GB, and 2GB. The program got killed in all these cache sizes. In<br>
&gt;     &gt; fact, my Linux box became unresponsive when I set<br>
&gt;     GDALSetCacheMax() to<br>
&gt;     &gt; 64MB.<br>
&gt;     &gt;<br>
&gt;     &gt; Thank you.<br>
&gt;     &gt; Ozy<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     ------------------------------------------------------------------------<br>
&gt;     &gt;<br>
&gt;     &gt; _______________________________________________<br>
&gt;     &gt; gdal-dev mailing list<br>
</div></div>&gt;     &gt; <a href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a> &lt;mailto:<a href="mailto:gdal-dev@lists.osgeo.org">gdal-dev@lists.osgeo.org</a>&gt;<br>
<div><div></div><div class="h5">&gt;     &gt; <a href="http://lists.osgeo.org/mailman/listinfo/gdal-dev" target="_blank">http://lists.osgeo.org/mailman/listinfo/gdal-dev</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div><br>