Spring Boot REST服务 - 抛出java.lang.NoClassDefFoundError:org/apache/tomcat/util/ExceptionUtils

Ale*_*lex 11 java tomcat spring-boot

在开发期间,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]
Run Code Online (Sandbox Code Playgroud)

测试涵盖了此工作流程:

  • 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
Run Code Online (Sandbox Code Playgroud)

那很好,但为什么呢?

更新:

没有任何帮助,错误仍然存​​在,Sprint Boot 1.2.0也是如此

小智 1

你是否曾经在源代码目录中运行过“gradle clean”或“mvn clean”,这可以删除spring boot生成的fat jar,这应该是异常的根本原因。由于运行的jvm无法找到被删除的类文件。