Detected both log4j-over-slf4j.jar AND bound slf4j-log4j12.jar on the class path 此冲突是由于此两包不兼容,不能同时存在. 原因是 log4j-over-slf4j.jar 只是一个桥接包. 而 bound (粘合)的slf4j-log4j12.jar 中既包含了桥接包,也包含了log4j2的实现.因此桥接部分有冲突. 所以需要选其一使用.
如果想查看当前堆中的所有对象的top值. 使用如下命令: jmap -histo pid | head -n 50
;这个命令会直接打印出堆中"存活"的前50个对象(实际对象可能已经dead,只是一直没有进行fullgc).
如果想只看存活的对象, 那可以使用命令: jmap -histo:live pid | head -n 50
;这个命令在打印前会做一次FUllGC然后再打印出真实的存活对象.
当你遇到这个故障的时候. 尽量不要去你的电脑. 保持电脑的启动状态. 尽快完成数据备份. 待你重启断电之后可能就再也进不了系统了.
![image.png](https://b3logfile.com/file/2023/04/image-PYMf4b4.png?imageView2/2/w/1280/format/jpg/interlace/1/q/100)
本文记录了一个由于HttpservletInputstream的读取0字节和FileInpustStream之间的差异导致的一个bug. 原因是因为Tomcat的 org.apache.catalina.connector.CoyoteInputStream 实现会优先判定是否已经关闭了流. 从而在流无效的时候返回EOF (-1) , 而对于FileInputStream的流的读取会先判定读取的大小. 从而导致了差异. 文中还介绍到了如何使用chatGPT来完成bug的排查. 其中chatGPT的能力非常优秀.不过如果你问得不好,可能达不到你想要效果. 具体情况如何, 请看原文吧.