Stanford NLP-GC overhead limit exceeded 问题分析与解决

该异常是由于GC时间过长导致的,
添加参数 -XX:-UseGCOverheadLimit ,可以治标。

查看GC日志,发现运行一段时间后,一直在发生FULL GC,但是实际上并没有回收空间。

stanford的分词器比较吃内存,程序代码本身是没有什么问题的,所以只能加大内存。
这里元数据区有 1G的内存,实际只是用了11M,所以可以减少元数据区的大小。
由于程序启动比较慢,因为堆内存默认比较小,发生了几次扩容,所以增加每个区域的初始容量。

-XX:+PrintGCDetails -XX:+PrintGCApplicationConcurrentTime -Xms3000M -Xmx3000M -Xmn600M -XX:MetaspaceSize=100m -XX:MaxMetaspaceSize=100m -XX:+UseG1GC
[Full GC (Ergonomics) [PSYoungGen: 231936K->231936K(463360K)] [ParOldGen: 1390067K->1390066K(1390080K)] 1622003K->1622002K(1853440K), [Metaspace: 11887K->11887K(1060864K)], 1.2309664 secs] [Times: user=4.54 sys=0.00, real=1.23 secs] 
Application time: 0.0000606 seconds
[Full GC (Ergonomics) [PSYoungGen: 231936K->231936K(463360K)] [ParOldGen: 1390068K->1390067K(1390080K)] 1622004K->1622003K(1853440K), [Metaspace: 11887K->11887K(1060864K)], 1.2439648 secs] [Times: user=4.77 sys=0.00, real=1.24 secs] 
Application time: 0.0000421 seconds
[Full GC (Ergonomics) [PSYoungGen: 231936K->231936K(463360K)] [ParOldGen: 1390070K->1390068K(1390080K)] 1622006K->1622004K(1853440K), [Metaspace: 11887K->11887K(1060864K)], 1.2404983 secs] [Times: user=4.59 sys=0.02, real=1.24 secs] 
Application time: 0.0000466 seconds

最后是减少annotators = tokenize, ssplit, pos, lemma的使用,标注器太多的话,容易爆内存。
只使用tokenize和ssplit性能会很好

你可能感兴趣的:(其它)