在 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 增加堆大小的主要内容,如果未能解决你的问题,请参考以下文章