Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 高负载下的com.fasterxml.jackson.core.util.InternCache.intern()死锁_Java_Jackson_Tomcat7_Deadlock - Fatal编程技术网

Java 高负载下的com.fasterxml.jackson.core.util.InternCache.intern()死锁

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

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: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);