cloudtrends / paoding

Automatically exported from code.google.com/p/paoding
0 stars 0 forks source link

启动字典动态转载/卸载检测器 内存泄漏问题 #45

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
使用版本是code.google的paoding-analysis-2.0.4-beta.

我想充分使用"启动字典动态转载/卸载检测器".
但是现在的定时器方式启动字典动态转载/卸载策略会引发内�
��泄漏问题.
导致字典没有更新成功(dic/.compiled目录没有重新创建)

我将DIC_DETECTOR_INTERVAL_DEFAULT 设置为 
"30"会比"60"更容易发生下面的异常
运行参数-Xms 200m -Xmx 500m

2009-11-27 11:34:46 net.paoding.analysis.knife.FileDictionaries
loadAllWordsIfNecessary
信息: loaded success!
Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space
    at java.util.HashMap.addEntry(Unknown Source)
    at java.util.HashMap.put(Unknown Source)
    at
net.paoding.analysis.dictionary.HashBinaryDictionary.addSubDictionary(HashBinary
Dictionary.java:132)
    at
net.paoding.analysis.dictionary.HashBinaryDictionary.createSubDictionaries(HashB
inaryDictionary.java:106)
    at
net.paoding.analysis.dictionary.HashBinaryDictionary.<init>(HashBinaryDictionary
.java:84)
    at
net.paoding.analysis.dictionary.HashBinaryDictionary.createSubDictionary(HashBin
aryDictionary.java:141)
    at
net.paoding.analysis.dictionary.HashBinaryDictionary.addSubDictionary(HashBinary
Dictionary.java:129)
    at
net.paoding.analysis.dictionary.HashBinaryDictionary.createSubDictionaries(HashB
inaryDictionary.java:106)
    at
net.paoding.analysis.dictionary.HashBinaryDictionary.<init>(HashBinaryDictionary
.java:84)
    at
net.paoding.analysis.dictionary.HashBinaryDictionary.<init>(HashBinaryDictionary
.java:72)
    at
net.paoding.analysis.knife.FileDictionaries.getVocabularyDictionary(FileDictiona
ries.java:199)
    at net.paoding.analysis.knife.CJKKnife.setDictionaries(CJKKnife.java:48)
    at
net.paoding.analysis.knife.PaodingMaker.setDictionaries(PaodingMaker.java:521)
    at net.paoding.analysis.knife.PaodingMaker.access$2(PaodingMaker.java:515)
    at net.paoding.analysis.knife.PaodingMaker$1.run(PaodingMaker.java:391)
    at net.paoding.analysis.knife.PaodingMaker$1$1.on(PaodingMaker.java:413)
    at
net.paoding.analysis.dictionary.support.detection.Detector.forceDetecting(Detect
or.java:114)
    at
net.paoding.analysis.dictionary.support.detection.Detector.run(Detector.java:105
)
    at java.lang.Thread.run(Unknown Source)

也许是要改变"启动字典动态转载/卸载检测器"的策略,用侦听d
ic目录的变化是否能避
免这个?
另外,这个异常和paodingHolder的paoding管理有关吗?
谢谢

Original issue reported on code.google.com by qqib...@gmail.com on 27 Nov 2009 at 5:52

GoogleCodeExporter commented 9 years ago
不断地重复启动,还是只是正常的?把perm调大点

Original comment by qieqie.wang on 27 Nov 2009 at 6:17

GoogleCodeExporter commented 9 years ago
不断地重复启动,还是只是正常的?把perm调大点

Original comment by qieqie.wang on 27 Nov 2009 at 6:21

GoogleCodeExporter commented 9 years ago

不会重复启动,
可以分词,只是没有更新词典的效果.
perm -Xms 200m -Xmx 500m 还需要更大?
试试.谢谢

Original comment by qqib...@gmail.com on 27 Nov 2009 at 6:50

GoogleCodeExporter commented 9 years ago
是permsize,google下

Original comment by qieqie.wang on 27 Nov 2009 at 6:53

GoogleCodeExporter commented 9 years ago
PermSize确实有效.
不过,我想解决的是在异常发生在Detector.java:105行时,词典的动�
��探测,线程还能继续工作.
可惜,在Detector.java:105行发生异常后"启动字典动态转载/卸载"��
�能失效了,try/catch 也没用.
这个问题是否是java线程相关
类public class Detector implements Runnable
public void run() {
        if (interval <= 0)
            throw new IllegalArgumentException(
                    "should set a interval(>0) for the detection.");
//      try {
            while (alive) {
                sleep();
                forceDetecting();
            }
//      } catch (Exception e) {
//          System.out.println("重新启动词典守护线程吗? alive ="+alive);
//          e.printStackTrace();
//          if(alive){
//              start(true);
//          }
//      }
    }

Original comment by qqib...@gmail.com on 27 Nov 2009 at 8:49