我正在通过 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 会报告我设置的相同值。