我使用一个NLP库(斯坦福NER)抛出OOM误差的罕见输入文档。

我计划最终分离这些文件,并找出关于它们是什么原因导致的误差,但是这是很难做到(我在Hadoop中运行的,所以我只知道错误通过拆分五百分之三百七十九或某事发生17%像那样)。作为临时的解决方案,我想能够应用CPU和存储器限制于该特定呼叫。

我不知道什么是最好的方式做,这将是。我的第一个虽然是创建一个线程的固定的线程池,并使用在未来定时的get()。这至少给我一个挂钟限额,这可能会有所帮助。

我的问题是,是否有什么办法可以做得比这更好的工作的合理费用。

有帮助吗?

解决方案

正好赶上了OutOfMemoryError异常,日志记录这是你的,然后移动到下一个。垃圾收集器将确保你有下一个文档足够的内存。

(这是我与斯坦福依存句法分析器使用上移动到下一个句子,如果一个句子太长或旋绕解析的策略之一。)

其他提示

我不熟悉使用Hadoop,但不要忘记,你的JVM会强加给它的一个隐含的上边界内存(64MB的服务器,如果我的记忆是正确的)。我想检查哪些内存配置你的JVM与(选项运行这里

可以通过这样指定的上内存限制重写此:

java -Xmx512m

到(比方说)设置的限制为512MB。

设置CPU分配是JVM的职权范围之外,并且将是特定于操作系统的机制(如果能做到这一点的话)

如果您是从JVM分派并行这些工作,然后运行一个线程(或有限线程)线程池可能帮助你。然而(再次)这取决于需要你的实现和更多的细节。

如果你正在试图做的一切就是找出哪些文档崩溃,你应该把记录呼叫周围的NLP图书馆“即将映射文档X”。当你看到的OOM,对于映射器日志将包含厄运的文件。就像你说的,你应该再确定哪些特性文件导致库崩溃。

在我的经验,特别是如果被人在互联网上创建的文档,你会在某个地方找到一些疯狂的巨大文件。在这一点上,你必须决定如何处理这些文件做;要么忽略它们,也许截断它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top