`

JMagick的JNI-hazard问题

 
阅读更多

JNI-hazard问题
       JMagick使用JNI技术调用ImageMagick,存在JNI-hazard问题。不适合在长时间运行的Web应用程序使用ImageMagick +Jmagick,可能导致JVM崩溃。

       我就在项目中遇到过,Tomcat在跑了数天后会crash,异常内容为:magick.MagickException: Unable to retrieve handle  。

        从表象看,应该是没有释放ImageMagick的句柄导致的,查找API后发现程序中没有调用:magick.MagickImage.destroyImages()  Called by finalize to deallocate the image handle。 在程序加上本方法,情况有所改善,大概在十多天后出现了一次tomcat进程crash。并不能根本解决问题。
       建议使用IM4JAVA。

 

在JMagick的邮件列表中找到一份我认为有价值的邮件

The "JNI hazard" here is that if something you use (f.ex libtiff for reading  
TIFF files) has a memory bug then it can make your whole JVM crash. Thats of  
course frustrating and therefore its great to have im4java around, which  
starts IM as an external process, so JVM crashes are avoided.  
 * *  
Coolest thing would be if JMagick and im4java could have the same API so it  
was easy to switch depending on luckyness. Ive asked the author of im4java  
to attemt to be as compatible as possible, but as im4java is very much  
different internally its limited how much can be done in that direction.  
  
If you don't like the risk, stick to im4java. If your want optimal  
performance give JMagick a try.  
  
And, its not JMagick that is buggy, its what it depends on (hereunder IM)  
that is not always (memory) bug free on long running processes.  
I also have never seen a mismatch between JMagick binary and ImageMagick  
binaries leading to crashes. 

 

IM4JAVA官方文档也有相关说明:

1.1. What exactly do you mean with JNI-hazard? 
Running native code using JNI from within java always imposes additional risks. The JVM is no longer sandboxed, so there might be some security issues. In addition, there could be errors like memory leaks or memory corruption within the JNI-layer (JMagick) or within the native code (ImageMagick). 
This is especially dangerous for long running processes (typically web-application-servers). Memory corruption or a segmentation fault (maybe triggered by a intentionally manipulated image) might bring down the whole server. 
On the other side, in reality the situation is not as bad as it sounds above. JMagick is well tested, and for standard use-cases it prooves to be very stable. 
Some additional information is available on the JMagick-users mailing list where this topic has been discussed to some detail. 

 

3
0
分享到:
评论
1 楼 yanbingwei86 2015-04-16  
您好!关于Jmagick,我们使用了最新的6.7.7版本,在压测时(http post上传图片,然后我们利用Jmagick获取图片类型和分辨率,并且去除无用信息,最后发往后端)发现:Jmagick好像昂有内存泄露。用3M的图片测试,20多分钟就JVm crash了。请问这一块您还有关注嘛。看Jmagick的论坛,也不知道谁在维护

相关推荐

    jmagick-win-6.3.9

    JMagick,一个与标题“jmagick-win-6.3.9”相对应的工具,是Java平台上的一个强大扩展,它为Java开发者提供了一个方便的接口来操作ImageMagick库,从而实现高效的图像处理功能。本文将深入探讨JMagick的特性和应用...

    jmagick-6.2.4-1-IM-6.2.5.jar,ImageMagick-6.2.5-4-Q16-windows-dll.exe

    标题中的"jmagick-6.2.4-1-IM-6.2.5.jar"和"ImageMagick-6.2.5-4-Q16-windows-dll.exe"分别指的是JavaMagick库和ImageMagick软件的不同版本。这两个组件在IT领域中扮演着重要的角色,特别是对于图像处理和转换。 **...

    JMagick-6.0.4-0.tar

    JMagick-6.0.4-0.tar 下载

    jmagick-6.4.0-src

    JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对 ImageMagick API的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。

    jmagick-6.2.4-1-IM-6.2.5.zip

    标题中的"jmagick-6.2.4-1-IM-6.2.5.zip"指的是JMagick的一个特定版本,这是一个Java绑定的ImageMagick库,用于处理图像操作和转换。ImageMagick是一个开源的跨平台命令行工具集,广泛用于在各种文件格式之间进行...

    JMagick-5.5.6-0.tar.gz

    《JMagick-5.5.6-0:Java Web中的图形处理利器》 在Java Web开发中,图像处理是一项不可或缺的功能,无论是用于网站设计、数据可视化还是用户上传的图片管理,都需要高效的图像处理库来支持。JMagick-5.5.6-0.tar....

    jmagick-win-5.5.7-Q8.zip

    "jmagick-win-5.5.7-Q8.zip"这个压缩包中包含了在Windows环境下运行JMagick所需的所有组件,包括核心库文件"jmagick.dll"、Java类库文件"jmagick.jar"以及ImageMagick的安装程序"ImageMagick-5.5.7-Q8-windows-dll....

    jmagick-win-6.3.9-Q16

    《JMagick:Java图像处理的强大工具》 在IT领域,图像处理是一项不可或缺的技术,尤其在网站开发、移动应用和数据分析等方面。JMagick作为Java平台上的一个图像处理库,为开发者提供了强大的功能,使他们能够高效地...

    ImageMagick

    下载ImageMagick-6.3.9-0-Q8-windows-dll.exe和jmagick-win-6.3.9-Q8.zip 安装ImageMagick-6.3.9-0-Q8-windows-dll.exe,按照网上说法把安装后根目录下的所有.dll文件拷贝到C:\WINDOWS\system32下。不过没拷贝成功。...

    linux下安装ImageMagick-6.5+JMagick -6.4 经测试成功的

    tar xzvf jmagick-6.4.0.tar.gz (# chmod * 否则这个包内的文件无权限执行) autoconf ./configure --prefix=/opt/JMagick --with-magick-home=/opt/ImageMagick --enable-share --enable-static --with-java-home=...

    jmagick 软件、安装说明(window和linux两个版本)

    3. 解压缩JMagick的ZIP文件,找到`jmagick-<version>.dll`文件并将其复制到Java的`bin`目录下。 4. 设置环境变量`JMAGICK_HOME`指向JMagick的安装目录。 5. 设置系统路径环境变量,添加`%JMAGICK_HOME%\bin`。 6. ...

    jmagic 安装包大全

    安装包列表: ImageMagick-6.2.6-8.tar.gz、JMagick-6.2.6-0.tar.gz、 用户支持jpg,png和tiff格式的文件,还需安装如下插件 jpegsrc.v6b.tar.gz、 libpng-1.2.10.tar.bz2、tiff-3.8.2.tar.gz

    Jmagick32位的和Jmagick64位的Jmagick.dll,Jmagick.jar

    Java程序通过JNI(Java Native Interface)调用这个库中的函数来执行图像处理任务。32位和64位的Jmagick.dll是不兼容的,因此选择正确的版本至关重要,否则会导致运行时错误。 - **Jmagick.jar**:这是Jmagick的...

    jmagick.zip

    在"jmagick-6.4.0.jar"中,这是JMagick的Java库文件,开发者可以在Java项目中引入这个JAR包,以便调用JMagick提供的API进行图像处理。例如,你可以创建一个` MagickImage `对象来表示图像,然后使用` read `方法读取...

    jmagick jmagick.jar jmagick资料

    里面包括jmagick 所需所有文件,jmagick.dll,jmagick.jar 还有安装文件, 以及linux安装说明! jmagick jmagick.jar jmagick资料 jmagick缩略图 jmagick jmagick.jar jmagick资料 jmagick缩略图

    ImageMagick-6.3.9+jmagick组合

    结合这个“ImageMagick-6.3.9+jmagick组合”,开发者可以在Java环境中利用ImageMagick 6.3.9的强大功能,无需担心兼容性和稳定性问题。这在开发基于Java的图像处理应用时尤其有用,例如在线图片编辑服务、自动化图像...

    JMagick图片处理

    安装完成后,可以将JMagick(如`jmagick-win-6.3.9-Q16.zip`)集成到Java项目中,利用其提供的API进行图像处理操作。 `使用说明.txt`和`安装说明.txt`文件分别提供了详细的步骤指导,帮助用户了解如何正确安装和...

    jmagick.jar 用法

    通过 JMagick,Java 开发者可以利用 C++ 编写的 ImageMagick 库的强大功能,无需直接编写原生代码或使用 JNI(Java Native Interface)。 **JMagick 的安装与配置** 在使用 JMagick 之前,需要先确保已经正确安装...

    jmagick安装和配置

    **JMagick安装与配置详解** JMagick是一款强大的Java接口,它允许Java应用程序与ImageMagick图像处理库进行交互,从而实现丰富的图像操作功能。本文将详细介绍如何在Java环境中安装和配置JMagick,以及如何使用提供...

    用jmagick实现cmyk图片转rgb

    内容:【ImageMagick-6.3.9-0-Q16-windows-dll.exe安装文件】【jmagick-win-6.3.9-Q16内有jar包和dll文件】【java代码示例】 用法: 1、先安装ImageMagick,重启电脑。 2、将jmagick.dll文件拷贝到JAVA_HOME\bin目录...

Global site tag (gtag.js) - Google Analytics