shell 使用JAVA_OPTS env变量运行java无效

6tqwzwtp  于 2023-01-09  发布在  Shell
关注(0)|答案(3)|浏览(280)

在shell脚本中,我设置了JAVA_OPTS环境变量(以启用远程调试并增加内存),然后执行jar文件,如下所示:

export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8001,server=y,suspend=n -Xms512m -Xmx512m"
java -jar analyse.jar $*

但是JAVA_OPTS env变量似乎没有任何作用,因为我无法连接到远程调试,并且JVM的内存没有任何变化。
有什么问题吗?
PS:我不能在java -jar analyse.jar $*命令中使用那些设置,因为我在应用程序中处理命令行参数。

pqwbnv8z

pqwbnv8z1#

您可以设置_JAVA_OPTIONS而不是JAVA_OPTS。这应该可以在没有$_JAVA_OPTIONS的情况下工作。

vof42yt1

vof42yt12#

我不知道有哪个JVM会检查JAVA_OPTS环境变量,通常这是在启动JVM的脚本中使用的,它们通常只是将其添加到java命令行中。
这里需要理解的关键是,java的参数如果出现在-jar analyse.jar位之前,则只会影响JVM,而不会沿着给程序。因此,将脚本中的java行修改为:

java $JAVA_OPTS -jar analyse.jar $*

应该“只是工作”。

yyyllmsg

yyyllmsg3#

在过去12年中,发生了一些变化。
环境变量JAVA_OPTS过去是,现在也不是一个标准化的选项。它是由一些基于Java的工具的shell脚本 Package 器来评估的,ZoogieZork的答案中有一个关于它如何工作的例子。
HEX提到的环境变量_JAVA_OPTIONS现在已弃用/无文档记录。
从Java 9开始,建议使用变量JDK_JAVA_OPTIONS来完成您想要的任务,请参阅Oracle Java 9文档中的使用JDK_JAVA_OPTIONS启动器环境变量,以及此全面答案What is the difference between JDK_JAVA_OPTIONS and JAVA_TOOL_OPTIONS when using Java 11?

相关问题