从 Python 程序执行带有 -Xms 和 -Xmx 参数的 jar 文件
Executing a jar file with -Xms and -Xmx arguments from a Python program
当我尝试从我的 Python 程序中执行一个 Java jar 文件时,如下所示:
pathToMyJar = ...
argumentsToMyJar = ...
myJavaCommandLine = 'java -Xms4g -Xmx16g -jar ' + pathToMyJar + ' ' + argumentsToMyJar
print(myJavaCommandLine)
os.system(myJavaCommandLine)
我收到以下错误:
Invalid maximum heap size: -Xmx16g
The specified size exceeds the maximum representable size.
但是当我从 PowerShell 运行相同的命令时(本质上,复制并粘贴由 Python 程序打印的命令行),以下运行正常。
PS D:\Temp> java -Xms4g -Xmx16g -jar <pathToMyJar> <argumentsToMyJar>
我错过了什么?
我已经尝试了以下方法但没有成功:
- 用具有相同结果的 subprocess.call() 替换 os.system() 调用
- 将 -Xmx16g 降低到较低的值(我在 64 位机器上有 256G RAM)
- 确保在命令行和 Python 程序中运行相同的 Java 版本。
这是 Java 版本:
PS D:\Temp> java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
唯一合理的解释是您在 64 位计算机上安装了 32 位版本的 Java。显然,Java 的 32 位版本最多可以寻址 232 字节(或 4 GB)。卸载 32 位版本,然后安装 64 位版本(假设您使用 Windows)重新启动。
留言:
The specified size exceeds the maximum representable size.
指向的堆大小对于 运行 Java 可执行文件所使用的指令集架构来说太大了;即您使用的是 32 位 JVM。
我怀疑您 "ensuring that the same Java version is run on the command-line and from the Python program" 的方法不正确。您需要确保在两种 情况下都运行使用 64 位 JVM。重要的不仅仅是版本号。
(命令提示符下的 java
允许大堆的事实意味着您的计算机上同时安装了 32 位和 64 位 JRE 或 JDK。)
另一种可能性是您的 python 应用程序是 运行 每个进程内存使用的 ulimit ... 但我已经预料到了不同的错误消息。
当我尝试从我的 Python 程序中执行一个 Java jar 文件时,如下所示:
pathToMyJar = ...
argumentsToMyJar = ...
myJavaCommandLine = 'java -Xms4g -Xmx16g -jar ' + pathToMyJar + ' ' + argumentsToMyJar
print(myJavaCommandLine)
os.system(myJavaCommandLine)
我收到以下错误:
Invalid maximum heap size: -Xmx16g
The specified size exceeds the maximum representable size.
但是当我从 PowerShell 运行相同的命令时(本质上,复制并粘贴由 Python 程序打印的命令行),以下运行正常。
PS D:\Temp> java -Xms4g -Xmx16g -jar <pathToMyJar> <argumentsToMyJar>
我错过了什么?
我已经尝试了以下方法但没有成功:
- 用具有相同结果的 subprocess.call() 替换 os.system() 调用
- 将 -Xmx16g 降低到较低的值(我在 64 位机器上有 256G RAM)
- 确保在命令行和 Python 程序中运行相同的 Java 版本。
这是 Java 版本:
PS D:\Temp> java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
唯一合理的解释是您在 64 位计算机上安装了 32 位版本的 Java。显然,Java 的 32 位版本最多可以寻址 232 字节(或 4 GB)。卸载 32 位版本,然后安装 64 位版本(假设您使用 Windows)重新启动。
留言:
The specified size exceeds the maximum representable size.
指向的堆大小对于 运行 Java 可执行文件所使用的指令集架构来说太大了;即您使用的是 32 位 JVM。
我怀疑您 "ensuring that the same Java version is run on the command-line and from the Python program" 的方法不正确。您需要确保在两种 情况下都运行使用 64 位 JVM。重要的不仅仅是版本号。
(命令提示符下的 java
允许大堆的事实意味着您的计算机上同时安装了 32 位和 64 位 JRE 或 JDK。)
另一种可能性是您的 python 应用程序是 运行 每个进程内存使用的 ulimit ... 但我已经预料到了不同的错误消息。