`
hxy520882012
  • 浏览: 28801 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Native Library /usr/lib/libJMagick.so already loaded in another classloader

 
阅读更多

最近安装了ImageMagick的应用服务器报如下异常:


环境为:RedHat AS4,Jboss4.2.3,根据libJMagick.so already loaded in another classloader提示查找了相关资料得知,Jboss里面classload机制如下:

1、症状
如果JBoss上的两个web应用需要使用相同的JNI本地库,当第二个web应用加载JNI本地库时,就会出现Native Library xxx.so already loaded in another classloader错误
2、原因
Java虚拟机为了在JNI本地库中确保基于classloader的命名空间隔离,因而不允许一个JNI本地库被两个不同的classloader加载。而JBoss中web应用的classloader是独立的,也就是说每个web应用都有一个专属的classloader,这样就出现两个classloader加载同一JNI本地库的情况
3、解决方法
在JBoss AS中,虽然不同的web应用使用不同的classloader,但是web应用classloader的父classloader是相同的,这样根据双亲委托模型只要让父classloader加载JNI本地库就可以避免被多个classloader加载。父classloader的classpath为JBoss AS配置(default、all或minimal)的lib目录,因而只要将JNI class单独发布成jar包,并放在配置(default、all或minimal)的lib目录中,问题就可以解决

但我们Jboss配置了4个实例,但当时只启了一个,不应该存在上述情况,故通过询问SCM得知,他对报异常的应用做了热部署,所以根据猜想应该是在热部署是原来的类已经加载了,此时又去加载,从而造成上述现象。

参考资料:

Jboss ClassLoader说明:http://community.jboss.org/wiki/JBossClassLoadingUseCases


分享到:
评论

相关推荐

    解决usrlib64libstdc++.so.6和lib64libc.so.6版本过低问题

    ./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld) ./bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./bin/mysqld) ``` 这...

    runtime library [libssl.so.1.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:/home/

    runtime library [libssl.so.1.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in: /home/rw/anaconda3/lib 首先查看路径,可以看到返回结果中,第一个查找路径是anaconda的。 export $PATH bash: export...

    文件libssl.so.1.0.0、文件libcrypto.so.1.0.0

    ucsc软件问题!!!在Linux系统中,如果安装ucsc的系列软件,如: conda install -c bioconda ucsc-bedgraphtobigwig conda install -c ...ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

    编译QT出现/usr/lib/libstdc++.so.6:version 'GLIBCXX_3.4.9' not found /usr/lib/libstdc++.so.6:version 'GLIBCXX_3.4.11'not found的解决

    把libstdc++.so.6.0.13这个资源放到/usr/lib文件夹下。删除/usr/lib/libstdc++.so.6。 在输入命令ln -s /usr/lib/libstdc++.so.6.0.13 /usr/lib/libstdc++.so.6。问题解决 可以输入strings /usr/lib/libstdc++.so.6 ...

    centos安装jdk1.8时出现没有/lib/ld-linux.so.2:这个文件的原因分析

    -bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...

    编译QT, version 'GLIBCXX_3.4.9' not found 的解决

    os.system("cp ./libstdc++.so.6.0.10 /usr/lib") os.system("ln -s /usr/lib/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6") 在64位linux操作系统上编译QT, 出现如上问题,请提取64bit文件夹下的libstdc++.so....

    CentOS 安装软件出现错误:/lib/ld-linux.so.2: bad ELF interpreter 解决

    当系统提示“/lib/ld-linux.so.2: bad ELF interpreter”的错误时,通常是因为当前系统缺少必要的动态链接库(Dynamic Link Library, DLL)或者这些DLL版本不兼容导致的。具体来说,在64位CentOS系统中尝试运行或...

    libstdc++.so.6.0.21

    2 放到对应目录下面 mv ./libstdc++.so.6.0.21 /usr/lib64/ 6 删除以前的libstdc++.so.6 链接 cd /usr/lib64 rm libstdc++.so.6 ln -s /usr/lib64/libstdc++.so.6.0.21 /usr/lib64/libstdc++.so.6 7 strings...

    libm.so.6 放到/usr/lib64/

    centos7 64位 import tensorflow 报错 ‘GLIBC_2.23' not found

    libstdc++.so.5

    解决 INFO: /usr/lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14',将文件替换到/usr/lib64就可解决问题(源文件记得备份)

    libssl.so.10缺失库文件的解决办法.doc

    ln -s /usr/lib64/libcrypto.so.1.0.0 libcrypto.so.10 ``` 这两个`ln -s`命令创建了指向现有库文件的软链接,模拟libssl.so.10和libcrypto.so.10的存在。现在,尝试再次运行之前报错的程序,看是否解决了问题。 ...

    libstdc++.so.6.0.zip

    CXXABI包含: CXXABI_1.3, CXXABI_1.3.1到10 CXXABI_TM_1, CXXABI_FLOAT128 ... ln -s /usr/lib64/libstdc++.so.6.0.22 /usr/lib64/libstdc++.so.6 3.查看 strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'

    libpaho-mqtt3as.so.zip

    v2x@ubuntu:~/Desktop$ sudo cp ./libpaho-mqtt3as.so/libpaho-mqtt3as.so /usr/lib/ v2x@ubuntu:~/Desktop$ sudo cp ./libpaho-mqtt3as.so/libpaho-mqtt3as.so.1 /usr/lib/ v2x@ubuntu:~/Desktop$ sudo cp ./...

    libstdc++.so.6.0.24

    [root@iZm5ecv7bqcpnixc1dobotZ lib64]# ln -s /usr/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6 4、查看已经安装 [root@iZm5ecv7bqcpnixc1dobotZ lib64]# strings /usr/lib64/libstdc++.so.6 | grep ...

    libstdc++.so.6

    /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 操作方法:#rm /usr/lib/x86_64-linux-gnu# rm libstdc++.so.6 #ln libstdc++.so.6.0.20 libstdc++.so.6 #strings /usr/lib/x86_64...

    解决Centos6.7:-bash: ./DrClientLinux: /lib/ld-linux.so.2: bad ELF

    在使用Linux系统,尤其是CentOS 6.7版本时,可能会遇到执行某些程序时出现`-bash: ./DrClientLinux: /lib/ld-linux.so.2: bad ELF`的错误提示。这个错误通常意味着系统找不到或者无法正确识别所需的动态链接库...

    libz.so.1-linux

    libz.so.1 libz.so.1 只是一个链接 可以用以下方法恢复: ...ln -s /usr/lib/libz.so.1.y.z /usr/lib/libz.so.1 恢复 如果libz.so.1.y.z不存在,这里提供了 libz.so libz.so.1 libz.so.1.y.z这三个文件

    linux 下libXp.so.6不能shared

    [oracle@dbadb1 ~]$ ls -ld /usr/lib/libXp.so.6 ls: /usr/lib/libXp.so.6: No such file or directory [root@dbadb1 zhuxu]# rpm -ivh libXp-1.0.0-8.i386.rpm warning: libXp-1.0.0-8.i386.rpm: Header V3 DSA...

    centos7.9的openssh和openssl升级包(openssh-9.4p1和openssl-1.1.1w)

    cp /usr/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1-1.0.2k cp /usr/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1-1.0.2k 卸载openssh和openssl,包括openssl-libs 然后解压安装 如有lib库文件异常,...

Global site tag (gtag.js) - Google Analytics