com.fasterxml.jackson.core.util.InternCache.intern() 高负载下死锁
com.fasterxml.jackson.core.util.InternCache.intern() deadlock under high load
环境:
- 亚马逊
- Centos
- Apache-tomcat-7.0.53
- Java 8
- Jackson-core-2.2.3
问题
当我们用 ~7000CCU 的负载测试我们的服务器时,当我们使用 Yourkit 分析我们的应用程序服务器时,我们会看到以下几个。
http-apr-8080-exec-952 <--- Frozen for at least 17 sec
com.fasterxml.jackson.core.util.InternCache.intern(String) InternCache.java:43
com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer.findSymbol(char[], int, int, int) CharsToNameCanonicalizer.java:506
com.fasterxml.jackson.core.json.ReaderBasedJsonParser._parseFieldName(int) ReaderBasedJsonParser.java:1182
com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken() ReaderBasedJsonParser.java:602
com.fasterxml.jackson.core.base.ParserMinimalBase.nextValue() ParserMinimalBase.java:128
我们可以做些什么来提高这个库的性能。
我找到了原因,我们没有关闭解析器实例。通过关闭 'finally block' 中的解析器实例,此问题已消失。
环境:
- 亚马逊
- Centos
- Apache-tomcat-7.0.53
- Java 8
- Jackson-core-2.2.3
问题
当我们用 ~7000CCU 的负载测试我们的服务器时,当我们使用 Yourkit 分析我们的应用程序服务器时,我们会看到以下几个。
http-apr-8080-exec-952 <--- Frozen for at least 17 sec
com.fasterxml.jackson.core.util.InternCache.intern(String) InternCache.java:43
com.fasterxml.jackson.core.sym.CharsToNameCanonicalizer.findSymbol(char[], int, int, int) CharsToNameCanonicalizer.java:506
com.fasterxml.jackson.core.json.ReaderBasedJsonParser._parseFieldName(int) ReaderBasedJsonParser.java:1182
com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken() ReaderBasedJsonParser.java:602
com.fasterxml.jackson.core.base.ParserMinimalBase.nextValue() ParserMinimalBase.java:128
我们可以做些什么来提高这个库的性能。
我找到了原因,我们没有关闭解析器实例。通过关闭 'finally block' 中的解析器实例,此问题已消失。