java - 在生产环境中实现最佳性能的 APR

标签 java docker ubuntu tomcat apr

我正在 docker 容器中安装一个 java 应用程序。它运行良好,但我在日志中不断出现这个错误:

INFO 1 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib]



因此,我尝试按照 this 安装此 APR 包和 this ,并通过在我的 dockerfile 中添加这一行来安装 tomcat native:

RUN apt-get install -y libtcnative-1



但是,当添加此行时,我在日志中收到以下消息:

ERROR 1 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : An incompatible version [1.1.33] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]



我尝试安装:

apt-get install -y openjdk-8-jdk libapr1-dev





apt-get install -y openjdk-8-jdk libtcnative-1 libapr1-dev



但是这些都不起作用..我不断收到相同的消息。

我还尝试按照第一个答案 here 从源安装,但这也不起作用。

这是我的 dockerfile 的其余部分:
FROM ubuntu:16.04

RUN apt-get update \
 && apt-get install -y software-properties-common python-software-properties \
 && add-apt-repository ppa:mozillateam/ppa \
 && apt-get update \
 && apt-get install -y firefox firefox-esr

RUN apt-get install -y libtcnative-1 openjdk-8-jdk 

任何帮助表示赞赏。谢谢!

最佳答案

如果有人仍然感兴趣,这就是我所做的:

  • 从 Apache 下载最新的 apr 和 tcnative 并将存档解压缩到 Dockerfile 所在的目录
  • 执行多阶段构建。第一阶段构建库:
  •     FROM adoptopenjdk/openjdk11:jdk-11.0.1.13 AS build
        ADD apr-1.7.0 $HOME/apr-1.7.0
        ADD tcnative $HOME/tcnative
        ARG DEBIAN_FRONTEND=noninteractive    
        RUN apt-get update -y && \
            apt-get -y upgrade && \
            apt-get install -y build-essential libssl-dev
        WORKDIR $HOME/apr-1.7.0
        RUN ./configure && make && make install
    
        WORKDIR $HOME/tcnative
        RUN ./configure --with-apr=/usr/local/apr/bin/apr-1-config  --with-java-home=$JAVA_HOME  --with-ssl=$HOME/OPENSSL --prefix=/usr/local/apr
        RUN make && make install
    
  • 第二阶段构建生产服务器:
  •     FROM adoptopenjdk/openjdk11:jre-11.0.10_9
        ARG DEBIAN_FRONTEND=noninteractive
        RUN apt-get update -y && \
            apt-get -y upgrade && \
            apt-get install -y --no-install-recommends libssl-dev x11-apps && \
            apt-get clean && \
            apt-get autoremove -y --purge && \
                rm -rf /var/lib/apt/lists/*    
        COPY --from=build /usr/local/apr /usr/local/apr
    
  • 当你调用 java 来运行你的 jar 时,设置你的库路径:
    入口点 ["java","-Djava.library.path=/usr/local/apr/lib","-jar","app.jar"]

  • 该应用程序现在启动并报告正确的库:
    org.apache.catalina.core.AprLifecycleListener - Loaded Apache Tomcat Native library [1.2.31] using APR version [1.7.0].
    

    关于java - 在生产环境中实现最佳性能的 APR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547931/

    相关文章:

    docker - 如何以非 Root 用户身份运行我的容器

    python - 如何将软件包安装到 docker 的 python?

    ubuntu - 来自服务器的空回复,在单独的缓存服务器上带有 Varnish 和挂接

    java - android 无法使用 ant 调试生成 .apk

    Java/JNI/MSVC java.lang.UnsatisfiedLinkError 到我的 DLL 函数

    java - 在 JTable 列中设置右对齐

    amazon-web-services - AWS Ubuntu EC2 实例不会通过 SSH 连接

    Java 在屏幕上查找图像

    docker - 通过 setuid 二进制文件运行 docker 容器

    php - Apache2 在 Linux Mint 17 KDE 中失败