【问题标题】:java.library.path and glassfish on linuxLinux 上的 java.library.path 和 glassfish
【发布时间】:2014-06-19 23:58:47
【问题描述】:

我在 ubuntu linux 机器上运行 glassfish v3。我在服务器上遇到了一些问题。有时服务器会停止接受请求并挂起。日志中的任何内容都没有给我任何帮助。在试图追查这个问题时,我注意到了一个奇怪的现象......以下是我在输入 ps aux | 时看到的内容。 grep java:

155 % ps aux | grep java
my-company  24242 90.0 17.3 3656228 690024 ?      Sl   18:39   1:17 /usr/home/my-company/local/jdk1.6.0_45/bin/java -cp /usr/home/my-company/glassfish3/glassfish/modules/glassfish.jar -XX:+UnlockDiagnosticVMOptions -XX:MaxPermSize=256m -XX:NewRatio=2 -Xmx1024m -client -javaagent:/usr/home/my-company/glassfish3/glassfish/lib/monitor/flashlight-agent.jar -Dfelix.fileinstall.disableConfigSave=false -Djavax.net.ssl.keyStore=/usr/home/my-company/glassfish3/glassfish/domains/domain1/config/keystore.jks -Djava.awt.headless=true -Dfelix.fileinstall.poll=5000 -Djava.endorsed.dirs=/usr/home/my-company/glassfish3/glassfish/modules/endorsed:/usr/home/my-company/glassfish3/glassfish/lib/endorsed -Dfelix.fileinstall.bundles.startTransient=true -Djavax.net.ssl.trustStore=/usr/home/my-company/glassfish3/glassfish/domains/domain1/config/cacerts.jks -Dcom.sun.enterprise.security.httpsOutboundKeyAlias=s1as -Djava.security.auth.login.config=/usr/home/my-company/glassfish3/glassfish/domains/domain1/config/login.conf -DANTLR_USE_DIRECT_CLASS_LOADING=true -Dgosh.args=--nointeractive -Dosgi.shell.telnet.maxconn=1 -Djdbc.drivers=org.apache.derby.jdbc.ClientDriver -Dfelix.fileinstall.dir=/usr/home/my-company/glassfish3/glassfish/modules/autostart/ -Dosgi.shell.telnet.port=6666 -Djava.security.policy=/usr/home/my-company/glassfish3/glassfish/domains/domain1/config/server.policy -Dfelix.fileinstall.log.level=2 -Dcom.sun.enterprise.config.config_environment_factory_class=com.sun.enterprise.config.serverbeans.AppserverConfigEnvironmentFactory -Dosgi.shell.telnet.ip=127.0.0.1 -Dcom.sun.aas.instanceRoot=/usr/home/my-company/glassfish3/glassfish/domains/domain1 -Dcom.sun.aas.installRoot=/usr/home/my-company/glassfish3/glassfish -Djava.ext.dirs=/usr/home/my-company/local/jdk1.6.0_45/lib/ext:/usr/home/my-company/local/jdk1.6.0_45/jre/lib/ext:/usr/home/my-company/glassfish3/glassfish/domains/domain1/lib/ext -Dfelix.fileinstall.bundles.new.start=true -Dorg.glassfish.additionalOSGiBundlesToStart=org.apache.felix.shell,org.apache.felix.gogo.runtime,org.apache.felix.gogo.shell,org.apache.felix.gogo.command,org.apache.felix.fileinstall -Djava.library.path=/usr/home/my-company/glassfish3/glassfish/lib:/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/server:/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64:/usr/lib/jvm/java-6-openjdk-amd64/lib/amd64:/usr/java/packages/lib/amd64:/usr/lib/jni:/lib:/usr/lib com.sun.enterprise.glassfish.bootstrap.ASMain -domainname domain1 -asadmin-args --host,,,localhost,,,--port,,,4848,,,--secure=false,,,--terse=false,,,--echo=false,,,--interactive=false,,,start-domain,,,--verbose=false,,,--debug=false,,,--domaindir,,,/usr/home/my-company/glassfish3/glassfish/domains,,,domain1 -instancename server -verbose false -debug false -asadmin-classpath /usr/home/my-company/glassfish3/glassfish/modules/admin-cli.jar -asadmin-classname com.sun.enterprise.admin.cli.AsadminMain -upgrade false -type DAS -domaindir /usr/home/my-company/glassfish3/glassfish/domains/domain1 -read-stdin true
my-company  24427  0.0  0.0   6512   620 pts/0    S+   18:40   0:00 grep java

有些奇怪...似乎用于启动 glassfish(通过 asadmin 命令工具)的 jvm 是位于 /usr/home/my-company/local/jdk1.6.0_45 的 JVM ,但在文本的更远处,您可以看到 java.library.path 集,它只包含 /usr/lib/jvm/java-6 中的库-openjdk-amd64/

我使用的托管公司默认安装 openJDK。我已经安装了 java /usr/home/my-company/local/jdk1.6.0_45 的官方 oracle 版本——这是我想要使用的版本,我已经设置了 JAVA_HOME 和 JDK_HOME 指向来反映这一点。如何设置 java.library.path?应该通过环境变量设置,还是我必须在 glassfish 内部设置?

【问题讨论】:

    标签: java linux glassfish-3


    【解决方案1】:

    您可以在文件<GLASSFISH_HOME>/glassfish/config/asenv.conf中设置您要使用的JDK。

    将条目AS_JAVA设置为指向所需的JDK,或者如果它不存在,则在文件末尾添加这样的条目:

    AS_JAVA=/usr/home/my-company/local/jdk1.6.0_45
    

    这是关于How Does GlassFish Pick the JVM to Run In?的博客文章的一部分:

    从高到低依次为:

    1. java-config 中 domain.xml 中指定的 jdk 位置(“java-home”)
    2. asenv 属性文件中 AS_JAVA 的内容(在 glassfish/config 中)
    3. 无论环境如何。变量 JAVA_HOME 指向。
    4. java.home 系统属性的使用方式如下:
      1. java.home的父目录--这是因为有时JRE的java是asadmin的JVM,JDK可能在上面的目录中。
      2. java.home 的内容

    另请参阅:

    【讨论】:

      【解决方案2】:

      glassfish 中的 java.library.path 指向 glassfish 的 lib 文件夹。一般在 glassfish 安装目录的 asenv.conf 文件中设置为 AS_NSS 键。在任何操作过程中,如果缺少共享库,您将看到以下错误。

      no <lib> in java.library.path
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 2015-03-12
        相关资源
        最近更新 更多