You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Zhong Yanghong (JIRA)" <ji...@apache.org> on 2017/07/10 10:16:00 UTC

[jira] [Created] (KYLIN-2716) WeakHashMap in ClassUtil leading to server high cpu and some query doesn't respond

Zhong Yanghong created KYLIN-2716:
-------------------------------------

             Summary: WeakHashMap in ClassUtil leading to server high cpu and some query doesn't respond
                 Key: KYLIN-2716
                 URL: https://issues.apache.org/jira/browse/KYLIN-2716
             Project: Kylin
          Issue Type: Bug
          Components: Query Engine
    Affects Versions: all
            Reporter: Zhong Yanghong
            Assignee: Zhong Yanghong


WeakHashMap is not thread safe, which is used in the method *ClassUtil.forName*. It's a high possibility that multiple threads invoke the method *ClassUtil.forName* simultaneously leading to a dead loop in *WeakHashMap.get() -> getTable() -> expungeStaleEntries()*, which finally resulting in server high cpu and some query doesn't respond.

We made an inner test by invoking the method *ClassUtil.forName* 1M times, the result is as follows:
* With cache: 20ms;
* Without cache: less than 2s.

By invoking the method *ClassUtil.forName* with *newInstance* 1M times, the result is as follows:
* With cache: around 2s
* Without cache: around 3s.

Considering *ClassUtil.forName* is always invoked with *newInstance*, there's no much downgrade without cache. Thus the fix is just to remove the cache.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)