environments was not found on the java.library.path 问题的解决方法_Linux

Tomcat 启动出现信息如下:

信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:XXXX

出现原因分析:

Tomcat建议使用apache的apr,来更好的运行Tomcat;

apache的apr 的介绍

APR(Apache portable Run-time libraries,Apache可移植运行库)的目的如其名称一样,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。在早期 的Apache版本中,应用程序本身必须能够处理各种具体操作系统平台的细节,并针对不同的平台调用不同的处理函数。

随着Apache的进一步开发,Apache组织决定将这些通用的函数独立出来并发展成为一个新的项目。这样,APR的开发就从Apache中独立出来,Apache仅仅是使用 APR而已。

APR使得平台细节的处理进行下移。对于应用程序而言,它们根本就不需要考虑具体的平台,不管是Unix、Linux还是Window,应用程序执行的接口基本都是统一一致的。因此对于APR而言,可移植性和统一的上层接口是其考虑的一个重点。而APR最早的目的并不是如此,它最早只是希望将Apache中用到的所有代码合并为一个通用的代码库,然而这不是一个正确的策略,因此后来APR改变了其目标。有的时候使用公共代码并不是一件好事,比如如何将一个请求映射到线程或者进程是平台相关的,因此仅仅一个公共的代码库并不能完成这种区分。APR的目标则是希望安全合并所有的能够合并的代码而不需要牺牲性能。

APR的最早的一个目标就是为所有的平台(不是部分)提供一个公共的统一操作函数接口,这是一个非常了不起的目的,当然也是不现实的一个目标。我们不可能支持所有平台的所有特征,因此APR目前只能为大多数平台提供所有的APR特性支持,包括Win32、OS/2、BeOS、Darwin、Linux等等。为了能够实现这个目标,APR开发者必须为那些不能运行于所有平台的特性创建了一系列的特征宏(FEATURE MACROS)以在各个平台之间区分这些特征。这些特征宏定义非常简单,通常用APR_HAS_FEATURE参数设置:

如果某个平台具有这个特性,则该宏必须设置为true,比如Linux和window都具有内存映射文件,同时APR提供了内存映射文件的操作接口,因此在这两个平台上,APR_HAS_MMAP宏必须设置,同时ap_mmap_*函数应该将磁盘文件映射为内存并返回适当的状态码。如果你的操作系统并不支持内存映射,那么APR_HAS_MMAP必须设置为0,而且所有的ap_mmap_*函数也可以不需要定义。第二步就是对于那些在程序中使用了不支持的函数必须提出警告。

解决方法一:

下载与你Tomcat对应版本的 tcnative-1.dll,放到apache-tomcat-7.0.57\bin 目录下,重启tomcat。

下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/native/

如果你不清楚版本,你随便下载一个版本,放进目录里面,在重启tomcat 的时候,会有提示你合适的 tcnative-1.dll 版本。

1、

2.

3.

4.

解决方法二、

这是一个APR的问题,因为Tomcat需要依赖APR来优化性能,就需要安装APR

1、首先安装APR,采用源码安装的方式,默认安装在:/usr/local/apr

wget http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz
tar -zxvf apr-1.5.0.tar.gz
cd apr-1.5.0
./configure
make
make install

2、接下来安装Tomcat-native,这个gz包在Tomcat的bin目录下面已经存在了,直接解压tomcat-native;

进入目录:cd   tomcat-native-1.2.7-src/native,然后编译安装:

./configure --with-apr=/usr/local/apr  --with-java-home="/usr/lib/jvm/java-1.7.0" --with-ssl=yes

如果下载的Tomcat版本较新的话,编译安装会出现OpenSSL版本不一致的问题,无法安装,如下错误:

checking OpenSSL library version >= 1.0.2... configure: error: Your version of OpenSSL is not compatible with this version of tcnative

这事就需要下载一个版本低一点的Tomcat-native包:

wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-connectors/native/1.1.34/source/tomcat-native-1.1.34-src.tar.gz

上面的gz包下载下来之后,放到Tomcat的bin目录下去,解压,进入目录:cd  tomcat-native-1.1.20-src/jni/native,再编译安装

3、编译安装成功之后,在Tomcat的bin目录下,新建一个名为setenv.sh的文件

新建文件中加入内容:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
         export LD_LIBRARY_PATH
4、经过上述三步,第一个问退可以解决;

时间: 2024-11-08 18:20:50

environments was not found on the java.library.path 问题的解决方法_Linux的相关文章

The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path

十二月 14, 2012 7:57:03 下午 org.apache.catalina.core.AprLifecycleListener init信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre7\bi

[jacob]no jacob in java.library.path错误的解决

no jacob in java.library.path错误的解决 一般把jacob.dll(不同版本的jacob的dll文件名有所不同)复制到C:\Program Files\Java\jdk1.6.0_17\jre\bin目录下即可. 在tomcat上使用时要在tomcat使用的jdk的jdk/jre/bin目录下放置配套的jacob.dll文件.     jdk安装目录的jdk/jre/bin目录下放置jacob.dll文件   ----------- jacob.jar和jacob.d

linux下遇到no db2jcct2 in java.library.path

问题描述 linux下遇到no db2jcct2 in java.library.path 我在Linux下的tomcat里有一个web工程要连接远程的DB数据库,db的jar包已经放入工程lib里也可以load到,但连接时报错no db2jcct2 in java.library.path.但如果写个主程序的jar包用脚本运行的话又可以正常连接上数据库 上IBM的网站看好像是因为缺少了libdb2jcct2.so文件. 有没人遇过这问题,或者有libdb2jcct2.so这个文件,麻烦传我一个

no sapjco3 in java.library.path异常处理办法

现象: 已经把sapjcp3.jar导入到项目中:把sapjco.dll放到system32下了: 本地的写的测试程序能够成功连上SAP,一放到WEB环境下就不行了,抛出这个异常. no sapjco3 in java.library.path,经排查 sapjco.dll必须放到TOMCAT当前使用的JRE的BIN目录中,我TOMCAT配置的JRE目录是 C:\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013,我拷贝该DLL

dll文件-no JIntellitype in java.library.path

问题描述 no JIntellitype in java.library.path 在我的java工程中,用到了第三方jar包和dll文件,dll文件放在了工程根目录,在eclipse中运行是出现问题Caused by: java.lang.UnsatisfiedLinkError: no JIntellitype in java.library.path at java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runt

linux 部署出错:no jzmq in java.library.path

问题描述 ZeroMQ的应用开发,linux部署出现以下错误(nojzmqinjava.library.path),请高手帮忙解答,谢谢.windows上部署以及eclipse开发都没问题.linux上,zeromq相关的路径的path和LD_LIBRARY_PATH以及CLASSPATH,我都指定过,还是这个错误,很无奈....Exceptioninthread"main"java.lang.UnsatisfiedLinkError:nojzmqinjava.library.path

【javacv】no JNI2OpenCV in java.library.path

问题描述 今天想在java上跑opencv,下载了opencv和javacv,网上找了很多资料折腾了一天,最后运行一个人脸检测的程序时,报错:noJNI2OpenCVinjava.library.path网上找了原因,说要JNI2OpenCV.dll这个文件,我也下载了,可是不知道怎么让eclipse去调用?我将它放在项目的根目录下,运行程序报错:JNI2OpenCV.dll:Can'tfinddependentlibraries,无法找到依赖库,请问我该怎么办?有在java上搞过opencv的

Java中超大ArrayList的解决方法,求指导

问题描述 刚刚接触java,尽量把问题描述清楚.我有这么一个小模块,从文本文件读入数据,根据读入数据构造对象,把新对象压入arraylist集合里面,在后面模块依次调用集合里的对象进行处理.文本文件是按行来的,每行5个double类型的参数,就是每行能生成一个对象.生成的对象会在后面调用处理,对象之间没有关联.当对象数量在10的6次方这个量级时,eclipse运行内存溢出,把Xms和Xmx调到4000M后,可以正常运行,但是速度到后面变的很慢.因为是对集合里面的对象依次处理的,每个对象处理过程是

Java ConcurrentModificationException异常原因和解决方法

在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常.下面我们就来讨论以下这个异常出现的原因以及解决办法. 以下是本文目录大纲: 一.ConcurrentModificationException异常出现的原因 二.在单线程环境下的解决办法 三.在多线程环境下的解决方法 若有不正之处请多多谅解,并欢迎批评指正 请尊重作者劳动成果,转载请标明原文链接: http://w