spring-startup-analyzer icon indicating copy to clipboard operation
spring-startup-analyzer copied to clipboard

工程启动过程fastjson2导致的OOM

Open xuxiaocong666 opened this issue 1 year ago • 4 comments

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)

image

xuxiaocong666 avatar Dec 27 '23 11:12 xuxiaocong666

我也遇到了类似的问题,请问有办法解决吗

xflhxz avatar Jan 25 '24 17:01 xflhxz

我也遇到了类似的问题,请问有办法解决吗

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. ======

imLinkang avatar Apr 19 '24 16:04 imLinkang

我也遇到了类似的问题,请问有办法解决吗

不好意思,刚看到,修改方法和上面朋友类似,不过没有换json工具包,参考修改如下,我是只改了这一行,重新编译这个spring-profiler-common.jar,然后替换到spring-startup-analyzer\lib里面去了。

map.put("beanInitResultList", JSONObject.toJSONString(beanInitResultList,JSONWriter.Feature.LargeObject));

xuxiaocong666 avatar Apr 19 '24 23:04 xuxiaocong666

我也遇到了类似的问题,请问有办法解决吗

不好意思,刚看到,修改方法和上面朋友类似,不过没有换json工具包,参考修改如下,我是只改了这一行,重新编译这个spring-profiler-common.jar,然后替换到spring-startup-analyzer\lib里面去了。

map.put("beanInitResultList", JSONObject.toJSONString(beanInitResultList,JSONWriter.Feature.LargeObject));

有兴趣提个PR修复一下嘛?

linyimin0812 avatar Apr 20 '24 05:04 linyimin0812