Java 高负载下的com.fasterxml.jackson.core.util.InternCache.intern()死锁
Env:Java 高负载下的com.fasterxml.jackson.core.util.InternCache.intern()死锁,java,jackson,tomcat7,deadlock,Java,Jackson,Tomcat7,Deadlock,Env: 亚马逊 森托斯 Apache-tomcat-7.0.53 爪哇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:4
- 亚马逊
- 森托斯
- Apache-tomcat-7.0.53
- 爪哇8
- Jackson-core-2.2.3
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
http-apr-8080-exec-952我找到了原因,我们没有关闭解析器实例。通过在“finally block”中关闭解析器实例,这个问题就消失了。是的,这通常是这种泄漏的一个迹象——只有在这种情况下,这才应该成为瓶颈。FWIW,以后的版本确实会尝试更优雅地处理这个问题,但从根本上说,不关闭解析器会增加其他类型的开销,因此您确实希望确保关闭;配置(JsonFactory.Feature.INTERN_字段名称,false);configure(JsonFactory.Feature.CANONICALIZE_字段_名称,false);