我需要运行一个包含对java
的调用的脚本。我无法更改该脚本(因为它必须在各种机器上运行),但我可以改变它周围的环境。
如果有帮助,我可以在它周围运行一个包装脚本。
我的根本问题是java进程退出:
Could not allocate metaspace: 1073741824 bytes
虚拟内存限制为:
$ ulimit -v
2097152
如果有不同的话,我可能还需要它才能为javac
工作。
答案 0 :(得分:0)
您可以使用-Xmx
减少Java使用的内存量,但需要在调用java的命令行上调用。幸运的是有别名。
这与直接更改环境变量不同,因此最终可能无法解决您的问题。
所以,你写了一个包装脚本:
#!/bin/bash
alias java="java -Xmx120M"
alias javac="javac -J-Xmx120M"
shopt -s expand_aliases
source /path/to/the/original/script.sh
这样,对java someoption Someclass
的所有来电都会显示为java -Xmx120M someoption Someclass
。
当然,只有在调用有问题的java代码的脚本中不存在-Xmx
时,这才能正常工作。它只适用于被调用的脚本之后不调用其他脚本的情况。
它是如何工作的:
alias
将一个命令替换为另一个命令。
shopt -s expand_aliases
打开了别名功能(但在新脚本启动时重置了该功能)
source ...somescript.sh
加载此脚本中的其他脚本,就好像它在哪里一样。这可以防止上述商品的缺点。但只有一层深。
答案 1 :(得分:0)
有一种inbuild方法可以向程序提供java参数,在这些程序中你不能指定JVM的构建(例如你的情况,但是如果java命令来自二进制文件),并且它被称为JAVA_TOOL_OPTIONS
在您的情况下,您可以设置:
JAVA_TOOL_OPTIONS="-Xmx120M"
到你的环境。