java - 尝试通过 python 脚本启动 Minecraft 服务器时出现内存问题

标签 java python multithreading memory-management batch-file

好吧,我一直在开发一套工具来帮助维护在一台计算机上托管的大量游戏服务器。我正在做的是从 python 脚本中获取 .bat 文件。该bat文件设置服务器婴儿车,例如最大内存和类似性质的东西。我使用以下函数打开并运行 .bat 文件。

def StartServer(path,file):
    if file not in MK.keys():

        l = Popen(file, cwd=path)
        MK[file]=l
        stdout, stderr = l.communicate()
    else:
        MK[file].terminate()

此函数可以通过以下两种方式之一调用 第一种方法是启动程序。

thread.start_new_thread( StartServer, (path,File, ) )

第二次关闭程序

StartServer(path,File)

StartServer看到重入并终止指定的程序... 这对于需要很少内存的程序非常有用,例如bat文件,例如

@echo Hello world.
@pause

但是,当尝试为 Java 程序分配更多内存时,例如,

@ECHO OFF
SET BINDIR=%~dp0
CD /D "%BINDIR%"
"%ProgramFiles%\Java\jre7\bin\java.exe" -Xmx4096M -Xms4096M -jar Minecraft_RKit.jar user:password
PAUSE

我从 BAT 文件收到内存错误,如下所示。这是来自bat文件而不是来自python端

Invalid mat heap size: -Xmx4096M
The specified size exceeds the maximum representable size.
Error: Could not create java virtual machine.
Error: A fatal exception has occurred. Program will exit.
Press any key to continue . . .

注意:我更喜欢同时使用 python 和 bat 文件,提前谢谢您!

最佳答案

您正在尝试启动 32 位 JVM,为其指定的堆大小对于 32 位体系结构而言太大。对于 32 位 JVM,最大堆大小小于 3Gb。实际限制取决于操作系统(它决定有多少地址空间可供应用程序使用)以及 JVM 使用了多少非堆内存。

减小最大堆大小,或切换到 64 位 JVM(和 64 位操作系统)。

关于java - 尝试通过 python 脚本启动 Minecraft 服务器时出现内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15997994/

相关文章:

python - 有没有更好的方法将方法作为参数传递?

java - JAVA中特定时间以特定时间间隔运行的线程

java - 如何在 Android 中添加卡片 View 列表,并且只能通过滑动删除其中一个卡片 View ?

java - Jackson 在序列化 Collection 实例变量时随机添加类型信息

java - 在 catch block 中抛出异常需要另一个 try catch block

java - Solr查询非UTF-8字符

python - Autotools:在 ./configure.sh 中包含 python 脚本

python - 获取代表当前日期的纪元时间戳范围

c++ - 如果我在 Linux 上有 Pthread 代码,在 std::thread 中实现相同的代码是否有优势?

使用 newCachedThreadPool() 时,Java 并行流未使用最佳线程数