【发布时间】:2015-01-08 15:31:50
【问题描述】:
在开发过程中,REST 服务(Spring Boot 1.1.18)似乎一切正常,但是当我们执行不同的性能和负载测试时,服务停止响应并出现以下错误:
org.apache.tomcat.util.net.NioEndpoint log -
java.lang.NoClassDefFoundError: org/apache/tomcat/util/ExceptionUtils
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:711) ~[tomcat-embed-core-7.0.55.jar!/:7.0.55]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736) [tomcat-embed-core-7.0.55.jar!/:7.0.55]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1695) [tomcat-embed-core-7.0.55.jar!/:7.0.55]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_55]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_55]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-7.0.55.jar!/:7.0.55]
at java.lang.Thread.run(Thread.java:745) [na:1.7.0_55]
测试涵盖了这个工作流程:
- 1) 登录
- 2) 从数据库中获取信息
- 3) 从文件中解析信息(驻留在服务主机上)
- 步骤 2) 和 3) 使用 5 个运行线程重复 2000 次
服务没有完全崩溃,它仍然可以通过 JMX 访问,但不响应 HTTP - 请求。
我正在寻找一个原因,但没有运气。
更新:
我为堆、堆栈调整和永久代大小添加了 JAVA_OPTS,现在服务稳定且性能更好。
-Xmx768m -Xms512m -Xss4m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=128m -XX:PermSize=128m
这很好,但为什么呢?
更新:
没有任何帮助,错误仍然存在,Sprint Boot 1.2.0 也是如此
【问题讨论】:
-
这很奇怪。 org.apache.tomcat.util.ExceptionUtils 在 tomcat-embed-core jar 中,从您发布的堆栈跟踪中,我可以看到您正在使用。这是完整的堆栈跟踪还是 NoClassDefFoundError 的原因?
-
这是完整的堆栈跟踪,它发生在服务没有响应时。 HTTP 线程处于 TIMED_WAITING 阶段,没有线程被终止。
-
有一个issue on Spring Boot 似乎会在 .jar 仍在运行时被替换时触发类似的异常。您正在运行的测试中也会发生这种情况吗?
标签: java tomcat spring-boot