【问题标题】:Memory issue when trying to start a minecraft server via a python script尝试通过 python 脚本启动 minecraft 服务器时出现内存问题
【发布时间】:2013-04-14 10:21:43
【问题描述】:

好吧,我一直在研究一种工具,以帮助维护托管在单台计算机上的大量游戏服务器。我正在做的是从 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 位 Python,所以 %ProgramFiles% 指向 32 位 Java?

标签: java python multithreading memory-management batch-file


【解决方案1】:

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

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

【讨论】:

  • 是的。您很可能也在使用 64 位 JVM。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
相关资源
最近更新 更多