【发布时间】:2020-08-03 14:15:21
【问题描述】:
我正在通过 Python 的 pyjnius 包 1.2.0 版运行一些 Java 代码。有几个 Python 进程,每个进程都使用不同的输入调用同一个 Java 类,因此每个进程都会初始化自己的 JVM。我遇到的问题是内存问题,但在研究该问题时,我发现正在运行的 JVM 中的选项与我在 Python 代码中设置的选项不同。
我正在设置选项:
jnius_config.add_options('-Xms512m', '-Xmx1280m')
Java 代码运行后,我从命令行运行 jps,得到以下输出:
C:\>jps -lvm
25140 -Xmx1280m -Xmx1280m
24684 -Xmx1280m -Xmx1280m
我尝试了 add_options 的不同参数,jps 总是为每个 JVM 报告第二个参数的两个副本。我也尝试使用set_options 并得到了相同的结果。
我在添加选项前后使用jnius_config.get_options()检查了pyjnius模块本身中的选项设置。
print("Initial options:", jnius_config.get_options())
jnius_config.add_options('-Xms512m', '-Xmx1280m')
print("Configured options:", jnius_config.get_options())
它报告的值与我设置的相同。
Initial options: []
Configured options: ['-Xms512m', '-Xmx1280m']
但是当我在 jps 中检查 JVM 时,它们似乎仍然使用错误的选项集运行。其他正在运行的 JVM 报告了不同的选项,所以我认为这在 jps 中不是问题,因为只有通过 pyjnius 运行的进程才会返回错误的值。
有谁知道这是否是 pyjnius 中的错误?还有其他方法可以检查启动 JVM 的选项吗?
我不确定是否应该信任 jps 或 pyjnius 报告的值,但我在运行 Python 脚本时创建的错误日志中看到以下行:
VM Arguments:
jvm_args: -Xmx1280m -Xmx1280m
java_command: <unknown>
pyjnius 设置了错误的选项,这看起来非常有定论。
我对初始内存大小选项进行了一些实验,发现只有在初始内存大小为-Xms100m 或更大时才会出现此问题。当我将初始值设置为-Xms99m 或更低时,jps 会报告我设置的相同值。
【问题讨论】:
-
您能否添加更多信息,当您在命令
jnius_config.add_options('-Xms512m', '-Xmx1280m')之前和之后添加print(jnius_config.get_options())时会发生什么? -
嗨@ands。我在问题中添加了这些行和其他一些细节。
-
文档说:需要在调用 import jnius 之前设置 JVM 选项,因为它们在 VM 启动后无法更改。
-
@Voodoo 我在导入 jnius 之前在单独的初始化函数中设置选项。
-
你能发布整个错误日志吗?另外,我对 pyjnius 和 JVM 不是很熟悉,但是你可以直接在命令行中使用参数
-Xms512m -Xmx1280m运行这个程序吗?