首页 > 解决方案 > 为什么 vm JAVA_OPTIONS 在码头不起作用

问题描述

我不熟悉 shell,也许这让我很困惑,但我不知道是什么导致了这个问题。在使用 jetty 8.1.13 容器开发 Web 程序时,我在 start.ini 文件中添加了一些参数(参考来自https://www.eclipse.org/jetty/documentation/current/enable-remote-debugging.html

--exec
-Xdebug
-agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=n

在 jetty.sh 文件中,我添加了一些 -D vm 选项,例如

JAVA_OPTIONS="-Dargs=switch"
export JAVA_OPTIONS

然后我启动码头

bin/jetty.sh start

然后shell创建两个进程,通过命令

ps aux | grep jetty

我们找到了这两个过程,比如

lawrence         26180   0.0 12.3  8900580 1034116 s000  S    11:03下午   1:13.71 /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/jre/bin/java -Xdebug -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=n -Xmx2000m -Xmn512m -Djetty.home=/Users/lawrence/tools/jetty-dist-8.1.13 -cp /Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-xml-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/servlet-api-3.0.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-http-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-continuation-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-server-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-security-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-servlet-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-webapp-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-deploy-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-servlets-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-annotations-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/annotations/javax.annotation-1.1.0.v201108011116.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-jmx-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jsp/com.sun.el-2.2.0.v201108011116.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jsp/javax.el-2.2.0.v201108011116.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jsp/org.eclipse.jdt.core-3.7.1.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-jndi-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-plus-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jndi/javax.activation-1.1.0.v201105071233.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar:/Users/lawrence/tools/jetty-dist-8.1.13/resources:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-websocket-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-util-8.1.13.v20130916.jar:/Users/lawrence/tools/jetty-dist-8.1.13/lib/jetty-io-8.1.13.v20130916.jar org.eclipse.jetty.xml.XmlConfiguration /var/folders/tl/dy87zyw579ggfx32tlv8tn3r0000gn/T/start8991351085930913981.properties /Users/lawrence/tools/jetty-dist-8.1.13/etc/jetty.xml /Users/lawrence/tools/jetty-dist-8.1.13/etc/jetty-annotations.xml /Users/lawrence/tools/jetty-dist-8.1.13/etc/jetty-deploy.xml /Users/lawrence/tools/jetty-dist-8.1.13/etc/jetty-webapps.xml /Users/lawrence/tools/jetty-dist-8.1.13/etc/jetty-contexts.xml /Users/lawrence/tools/jetty-dist-8.1.13/etc/jetty-testrealm.xml /Users/lawrence/tools/jetty-dist-8.1.13/etc/jetty-logging.xml /Users/lawrence/tools/jetty-dist-8.1.13/etc/jetty-started.xml
lawrence         26177   0.0  0.2  7864928  19696 s000  S    11:03下午   0:01.30 /usr/bin/java -Dargs=switch -Djetty.state=/Users/lawrence/tools/jetty-dist-8.1.13/jetty.state -Djetty.home=/Users/lawrence/tools/jetty-dist-8.1.13 -Djava.io.tmpdir=/var/folders/tl/dy87zyw579ggfx32tlv8tn3r0000gn/T/ -jar /Users/lawrence/tools/jetty-dist-8.1.13/start.jar etc/jetty-logging.xml etc/jetty-started.xml

args=switch jvm 选项应该在主进程 26177 中按预期读取,但遗憾的是它没有。

那么,当我们使用 --exec 参数来 fork() 一个新的子进程时,这个命令实际上做了什么,为什么这个 shell 不能读取 -D jvm 选项,甚至是命令行中的 -D jvm 选项?有人请帮忙解决这个问题吗?非常感谢。

标签: javashelljvmshjvm-arguments

解决方案


如果您在 java 命令行上使用了 -Dkey=value 名称(在主类之前),那么这些名称将不会被转发到分叉的 JVM。但是,如果您在主类之后或在 ${jetty.base}/start.ini 文件中使用 -Dkey=value,那么这些系统属性将转发到分叉的 JVM。


推荐阅读