在 Java 中为 weka 增加堆大小

Posted

技术标签:

【中文标题】在 Java 中为 weka 增加堆大小【英文标题】:Increase heap size in java for weka 【发布时间】:2012-01-29 13:43:11 【问题描述】:

我正在尝试为不断崩溃的 weka 增加 Java 中的堆大小。我使用了建议的行:

> java -Xmx500m -classpath

但我收到以下错误:

-classpath requires class path specification

我不确定这意味着什么。有什么建议吗?

【问题讨论】:

【参考方案1】:

省略-classpath 选项。只使用-Xmx500m 选项。

所以,不仅仅是:

java weka.core.Instances data/soybean.arff

你会的:

java -Xmx500m weka.core.Instances data/soybean.arff

如果您通过某个脚本(例如 RunWeka.bat)运行 weka,那么您需要修改该脚本(使用一些文本编辑器,如记事本)。

【讨论】:

【参考方案2】:

你需要在-classpath之后指定一个类路径,类似于PATH这个环境变量你需要指定Java可以找到类的路径。

-Xmx500m 设置看起来不错,除了我建议使用 512m。

【讨论】:

类似:java -Xmx512m -c:\Program Files(x86)\Java ? 你不需要为 Java 库设置一个类路径,只需要你自己的类,所以如果你编译的类在工作目录中,它可能是java -Xmx512m -classpath .。或者将它们编译成 jar 文件,然后执行 java `-Xmx512m -classpath c:\path\to\your\jarfile.jar'【参考方案3】:

我发现实际问题出在'\Program Files (x86)\Weka-3-6' 中的文件'RunWeka.ini' 中。我用记事本打开它,文件中间有一行'maxheap = 512m'

我将行更改为读取'maxheap=2000m',保存文件并重新加载weka,这解决了我的问题。

我不确定这是否是正确的做法,但它对我有用。

【讨论】:

那么您在运行 weka.jar 时也可以从命令行更改最大堆大小。是一样的 Weka 的更新版本接受-m 选项。所以你可以运行weka -m 2g 对于 3.8 版我添加了 maxheap=5000m,我在 Help >> SystemInfo memory.max 中看不到变化。如果在此级别更改,它也不会反映。【参考方案4】:

我在 Windows 中运行 Weka 3.6。这就是我所做的。 进入Weka安装目录,你会发现一个RunWeka.bat文件。在文本编辑器中打开此文件并在 java 命令行中添加 -Xmx 参数。

例如,这设置为 4GB 内存, %_java% -Xmx4096m -classpath 。 RunWeka -i .\RunWeka.ini -w .\weka.jar -c %_cmd% "%2"

【讨论】:

【参考方案5】:

Weka 官方答案(适用于所有操作系统和 Weka 版本)可以在 http://weka.wikispaces.com/OutOfMemoryException 上找到。

如果您在 Windows 上使用最新的 Weka 版本,the answer 是:

修改RunWeka.ini文件中的maxheap参数。

【讨论】:

【参考方案6】:

在终端中运行此命令:

java -Xmx1024m -jar weka.jar

【讨论】:

【参考方案7】:

对于 Mac OS,您必须编辑配置文件以增加 Weka UI 应用程序的堆大小。

我在重复我写的内容:Is there a workaround to solve "Java heap space" memory error when the max heap value has been already specified?

    如果 Weka 正在运行,请退出它。

    cd 进入 /Applications/weka-XXX.app/Contents ,或安装您的 weka 可执行文件的任何位置。那里会有一个名为Info.plist 的文件。它是一个 XML 文本文件。我建议您将其副本保存到另一个位置,因为您需要在下一步中对其进行编辑。

    在您最喜欢的文本编辑器中打开 Info.plist (XML) 文件,然后查找显示“VMOptions”的块。应该有一个值表示“-Xmx256M”或类似于specifies the maximum heap size 的值。您应该将该值更改为更大的值,例如“-Xmx1024M”。

    启动 Weka。

【讨论】:

【参考方案8】:

Weka 官方的回答是对的..但是..关键是首先摆脱所有 JVM 文件并安装相关的 32 位或 64 位 Java 版本。不使用相关版本会导致许多问题,包括无法将堆增加超过 1024m(通过更改 ini 文件)。

【讨论】:

【参考方案9】:

在 Ubuntu 上我遇到了同样的问题 但我通过增加用于 Java 虚拟机的内存量来解决它 运行这个:weka -m 1024m

【讨论】:

【参考方案10】:

使用此命令的最佳方法

    java -Xmx1024m -[weka classifier] -t [training file path]

【讨论】:

【参考方案11】:

上面的答案太旧了(最后一个是 1 年前)。 我的 WEKA(版本 3.8.1) 在 Windows 10 上遇到了同样的问题。

我在更新堆大小时遇到​​问题,我修复它的方法是添加一个环境变量(在控制面板下),如下所示:

JAVA_OPTS = -Xms30000m -Xmx30000m

提示:只需确保 RunWeka.ini 使用此环境变量即可。

在上面的例子中,我给了 WEKA 30GB。有用。

希望对某些人有所帮助。

【讨论】:

【参考方案12】:

如果您在 Windows 上使用 Weka 3.8.1,您可以通过编辑 javaOpts 参数为自己省去很多麻烦。 maxheap这个参数已经不用了,所以你可以在RunWeka.ini文件中这样设置javaOpts

javaOpts= -Xmx1040m

其中1040m 是您要分配的内存量。

请注意文件区分大小写。

有很多设置方法,但这是让 Weka 在此版本的 Windows 环境中运行的更快方法。

编辑:如果你想让 Weka 在 windows 上使用超过 1gb,你需要安装 JDK。普通的 JRE 不会这样做。

【讨论】:

【参考方案13】:

您还应该查看默认线程堆栈大小 20MB 是否足够。将文件 /Applications/weka-3-8-1-oracle-jvm.app/Contents/Info.plist(在 MAC 上)中的值增加到 50MB,如下所示:

<string>-Xss50M</string>

【讨论】:

【参考方案14】:

如果我们使用 Weka Workbench CLI 或 Knowledge explorer,我们需要 改变如下。

正如文档所建议的,运行时参数应该是 -Xmx[size_required]m,其中 [size_required] 是您打算保留以避免内存异常的内存大小。

打开 RunWeka.ini

定义 maxheap=[size_required]G

就我而言,我保留了 maxheap=4G ,可以设置为 maxheap=4096m 并将 -Xmx#maxheap# 添加到 # setups 的所有运行选项(以“cmd_”为前缀)接下来的部分到 java 命令 如下所示

cmd_default=javaw -Xmx#maxheap# ...............
cmd_console=cmd.exe /K start cmd.exe ..................
cmd_explorer=java -Xmx#maxheap# .................
cmd_knowledgeFlow=java -Xmx#maxheap#....................

maxheap=4G

通过重启Weka和Help>>SystemInfo验证相同

【讨论】:

【参考方案15】:

Weka 3.9.2 也不再提供 maxheap 选项。 RunWeka.ini 有 javaOpts 的选项,所以你可以把下面的改成你需要的内存分配,

javaOpts=%JAVA_OPTS%   ---- > javaOpts= -Xmx1024m

这里的 1024m 是您要分配的自定义内存量。

【讨论】:

【参考方案16】:

如果你从命令行而不是通过 java 运行 weka,即在命令行中输入 weka,而不是输入

weka

指定内存标志

weka -m 1024m

这将指定 1024 兆字节。

【讨论】:

【参考方案17】:

如果你通过 weka.sh 运行 weka,你可以直接使用内存选项运行它。 例如,

sh weka.sh -memory 10g

这会将堆大小增加到 10Gb(在 Ubuntu 18.04 上使用 Weka 3.8.4 测试)

【讨论】:

以上是关于在 Java 中为 weka 增加堆大小的主要内容,如果未能解决你的问题,请参考以下文章

在 Weka 中使用 libsvm 分类器和堆大小

如何在 Java ME 中增加堆大小?

增加堆以避免 WEKA 中的内存不足错误

在 Linux 机器上增加堆大小

关于增加 JVM 的堆大小

如何增加 Groovy 的 JVM 堆大小?