linyimin0812 / spring-startup-analyzer

spring-startup-analyzer generates an interactive spring application startup report that lets you understand what contributes to the application startup time and helps to optimize it.🚀
Apache License 2.0
1.43k stars 107 forks source link

spring-startup-analyzer使用失败 #164

Open fuzigege opened 1 month ago

fuzigege commented 1 month ago

使用最新的3.1.2版本,按照使用指导配置了spring-startup-analyzer.app.health.check.endpoints,改造了启动脚本,加入了-javaagent:选项。 启动后,报错 Exception in thread "StartupMonitor-Thread" com.alibaba.fastjson.JSONException: toJSONString error at com.alibaba.fastjson.JSON.toJSONString(JSON.java:1545) at io.github.linyimin0812.profiler.common.ui.StartupVO.toJSONString(StartupVO.java:55) 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.StartupMonitor.checkStatus(StartupMonitor.java:44) at java.lang.Thread.run(Thread.java:750) Caused by: java.lang.IllegalStateException: InputStream has already been read - do not use InputStreamResource if a stream needs to be read multiple times at org.springframework.core.io.InputStreamResource.getInputStream(InputStreamResource.java:97) at com.alibaba.fastjson2.writer.FieldWriterObjectFunc.getFieldValue(FieldWriterObjectFunc.java:36) at com.alibaba.fastjson2.writer.FieldWriterObject.write(FieldWriterObject.java:222) at com.alibaba.fastjson2.writer.ObjectWriterAdapter.writeWithFilter(ObjectWriterAdapter.java:475) at com.alibaba.fastjson2.writer.ObjectWriter8.write(ObjectWriter8.java:73) at com.alibaba.fastjson2.writer.FieldWriterObject.write(FieldWriterObject.java:354) at com.alibaba.fastjson2.writer.ObjectWriterAdapter.writeWithFilter(ObjectWriterAdapter.java:475) at com.alibaba.fastjson2.writer.ObjectWriterAdapter.write(ObjectWriterAdapter.java:295) at com.alibaba.fastjson2.writer.ObjectWriterArray.write(ObjectWriterArray.java:85) at com.alibaba.fastjson2.writer.OWG_4_4_MethodInvokeDetail.write(Unknown Source) at com.alibaba.fastjson2.writer.FieldWriterList.writeList(FieldWriterList.java:253) at com.alibaba.fastjson2.writer.OWG_3_5_MethodInvokeMetrics.write(Unknown Source) at com.alibaba.fastjson2.writer.ObjectWriterImplList.write(ObjectWriterImplList.java:371) at com.alibaba.fastjson.JSON.toJSONString(JSON.java:1537) ... 5 more

可见3.1.2用了fastjson2。 退回去用3.1.1版本,StartupMonitor-Thread线程依然报错: Exception in thread "StartupMonitor-Thread" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911) at java.util.ArrayList$Itr.next(ArrayList.java:861) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:61) at com.google.gson.Gson.toJson(Gson.java:842) at com.google.gson.Gson.toJson(Gson.java:812) at com.google.gson.Gson.toJson(Gson.java:759) at com.google.gson.Gson.toJson(Gson.java:736) at io.github.linyimin0812.profiler.common.ui.StartupVO.toJSONString(StartupVO.java:59) 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.StartupMonitor.checkStatus(StartupMonitor.java:44) at java.lang.Thread.run(Thread.java:750)

可见虽然3.1.1版本用的是gson,但是代码存在线程安全性问题,故而ConcurrentModificationException异常。

fuzigege commented 1 month ago

还有: Exception in thread "StartupMonitor-Thread" java.lang.NullPointerException at io.github.linyimin0812.profiler.common.ui.StartupVO.lambda$calculateInvokeMetrics$1(StartupVO.java:84) at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384) at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566) at io.github.linyimin0812.profiler.common.ui.StartupVO.calculateInvokeMetrics(StartupVO.java:84) at io.github.linyimin0812.profiler.common.ui.StartupVO.toJSONString(StartupVO.java:61) 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.StartupMonitor.checkStatus(StartupMonitor.java:44) at java.lang.Thread.run(Thread.java:750)