2023 年 04 月 - 6 文章

Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 冲突解决 有更新!

  |   0 评论   |   1,410 浏览

Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 此冲突是由于此两包不兼容,不能同时存在. 原因是 log4j-over-slf4j.jar 只是一个桥接包. 而 bound (粘合)的slf4j-log4j12.jar 中既包含了桥接包,也包含了log4j2的实现.因此桥接部分有冲突. 所以需要选其一使用.

怎样使用jmap查看jvm存活对象: jmap -histo pid & jmap -histo:live pid 有更新!

  |   0 评论   |   1,116 浏览

如果想查看当前堆中的所有对象的top值. 使用如下命令: jmap -histo pid | head -n 50;这个命令会直接打印出堆中"存活"的前50个对象(实际对象可能已经dead,只是一直没有进行fullgc).
如果想只看存活的对象, 那可以使用命令: jmap -histo:live pid | head -n 50;这个命令在打印前会做一次FUllGC然后再打印出真实的存活对象.

让chatGPT帮我找bug 一个MultiPart文件流读取bug记录 - 内存池 - 减少内存使用 - java.io.FileInputStream和Tomcat ServletInputStream 差异 有更新!

  |   0 评论   |   947 浏览

image.png

本文记录了一个由于HttpservletInputstream的读取0字节和FileInpustStream之间的差异导致的一个bug. 原因是因为Tomcat的 org.apache.catalina.connector.CoyoteInputStream 实现会优先判定是否已经关闭了流. 从而在流无效的时候返回EOF (-1) , 而对于FileInputStream的流的读取会先判定读取的大小. 从而导致了差异. 文中还介绍到了如何使用chatGPT来完成bug的排查. 其中chatGPT的能力非常优秀.不过如果你问得不好,可能达不到你想要效果. 具体情况如何, 请看原文吧.