ec2 AWS微实例上的Java堆问题

时间:2015-01-31 06:52:16

标签: java amazon-web-services

我正在尝试让dbpedia java包在AWS ECs微实例上运行(信息在这里:https://github.com/dbpedia-spotlight/dbpedia-spotlight/wiki/Run-from-a-JAR

问题是需要额外的java堆空间,我猜亚马逊并不喜欢给我。这是命令和输出。我已经尝试了-Xmx10G等,没有骰子。我猜亚马逊微实例可能在内存/堆空间方面有限,但我真的不确定如何更改它或者如果这是问题。谢谢!

$ java -Xmx1024m -jar dbpedia-spotlight.jar en http://localhost:2223/rest
Jan 31, 2015 6:48:04 AM org.dbpedia.spotlight.db.memory.MemoryStore$ load
INFO: Loading MemoryTokenTypeStore...
Jan 31, 2015 6:48:05 AM org.dbpedia.spotlight.db.memory.MemoryTokenTypeStore createReverseLookup
INFO: Creating reverse-lookup for Tokens.
Jan 31, 2015 6:48:06 AM org.dbpedia.spotlight.db.memory.MemoryStore$ load
INFO: Done (1527 ms)
Jan 31, 2015 6:48:06 AM org.dbpedia.spotlight.db.memory.MemoryStore$ load
INFO: Loading MemorySurfaceFormStore...
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000ec7a8000, 153452544, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 153452544 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /home/ubuntu/dbpedia-spotlight-quickstart-0.6.5/hs_err_pid2347.log

2 个答案:

答案 0 :(得分:1)

如果您要求Java分配的内存超过可用内存,那么它会转到barf(longer, more technical answer here)。 t1.micro有超过600mb的内存,而t2.micro有1000mb的内存。

作为一个起点,假设一个现代的Ubuntu实例,你应该能够在t1.micro上运行350-400mb,在t2.micro上运行750-800mb。

如果还不够,请使用更大的实例。好的后续步骤是t2.medium或m3.large。如果真的是内存耗费,那么r3。*服务器会有更多的内存。

答案 1 :(得分:0)

我们在m2.xlarge(它有15G)中运行Spotlight,我们的自定义实体模型大约在14G左右。

我认为这不可能在微型实例上运行。你必须将所有模型都放在内存中,而微实例却无法处理它。 如果将-Xmx -Xms指定为比RAM更高的内存,则机器中可用的内存将尝试使用SWAP进行补偿。 在这种情况下,这是可怕的,因为模型消耗了这么多的内存。