spring-startup-analyzer
spring-startup-analyzer copied to clipboard
工程启动过程fastjson2导致的OOM
Exception in thread "main" java.lang.OutOfMemoryError at com.alibaba.fastjson2.JSONWriterUTF16.ensureCapacity(JSONWriterUTF16.java:1553) at com.alibaba.fastjson2.JSONWriterUTF16JDK8UF.writeString(JSONWriterUTF16JDK8UF.java:44) at com.alibaba.fastjson2.JSONWriterUTF16.writeReference(JSONWriterUTF16.java:1106) at com.alibaba.fastjson2.writer.ObjectWriterImplList.write(ObjectWriterImplList.java:365) at com.alibaba.fastjson.JSON.toJSONString(JSON.java:1485) at io.github.linyimin0812.profiler.common.ui.StartupVO.toJSONString(StartupVO.java:52) at io.github.linyimin0812.profiler.core.container.IocContainer.writeStartupVOToHtml(IocContainer.java:107) at io.github.linyimin0812.profiler.core.container.IocContainer.stop(IocContainer.java:94) at io.github.linyimin0812.profiler.core.monitor.ApplicationRunMonitor.onEvent(ApplicationRunMonitor.java:43) at io.github.linyimin0812.profiler.core.enhance.EventDispatcher.handleEvent(EventDispatcher.java:93) at io.github.linyimin0812.profiler.core.enhance.EventDispatcher.handleOnEnd(EventDispatcher.java:75) at io.github.linyimin0812.profiler.core.enhance.EventDispatcher.atExit(EventDispatcher.java:51) at io.github.linyimin0812.Bridge.atExit(Bridge.java:30) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
我也遇到了类似的问题,请问有办法解决吗
我也遇到了类似的问题,请问有办法解决吗
1、用fastjson的JSON.toJSONString将对象转换成JSON字符串时, 如果对象太大就会出现Out Of Memory,
2、所以我用jackson来做转化,修改spring-profiler-common模块的StartupVO.java里面的toJSONString方法,将51-53行的JSON.toJSONString替换成objectMapper.writeValueAsString。
ObjectMapper objectMapper = new ObjectMapper();
map.put("beanInitResultList", objectMapper.writeValueAsString(beanInitResultList));
3、重新编译这个spring-profiler-common.jar, 并将jackson-databind相关的几个jar(jackson-core、jackson-annotations)也一起弄到spring-startup-analyzer\lib里面,
4、重启程序后就没有OOM报错,在程序日志和startup.log也出现了这行日志2024-04-19 19:17:46.417 INFO [main] io.github.linyimin0812.profiler.core.container.IocContainer - ======= spring-startup-analyzer finished, click http://localhost:8065 to visit details. ======
我也遇到了类似的问题,请问有办法解决吗
不好意思,刚看到,修改方法和上面朋友类似,不过没有换json工具包,参考修改如下,我是只改了这一行,重新编译这个spring-profiler-common.jar,然后替换到spring-startup-analyzer\lib里面去了。
map.put("beanInitResultList", JSONObject.toJSONString(beanInitResultList,JSONWriter.Feature.LargeObject));
我也遇到了类似的问题,请问有办法解决吗
不好意思,刚看到,修改方法和上面朋友类似,不过没有换json工具包,参考修改如下,我是只改了这一行,重新编译这个spring-profiler-common.jar,然后替换到spring-startup-analyzer\lib里面去了。
map.put("beanInitResultList", JSONObject.toJSONString(beanInitResultList,JSONWriter.Feature.LargeObject));
有兴趣提个PR修复一下嘛?