Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot REST service - throws java.lang.NoClassDefFoundError: org/apache/tomcat/util/ExceptionUtils

During development the REST service (Spring Boot 1.1.18) all seems to went fine, but as we executed different performance and load test the service stopped to response with following error:

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]

The tests covers this workflow:

  • 1) login
  • 2) get information from database
  • 3) parse information from a file (resided on the service host)
  • step 2) and 3) are repeated 2000 times with 5 running threads

The service didn't crash totally, it is still reachable via JMX, but doesn't respond on HTTP - requests.

I'm searching for a reason, but with no luck.

UPDATE:

I added JAVA_OPTS for heap, stack tuning and permanent generation size and now the service is stable and performs much better.

-Xmx768m -Xms512m -Xss4m  -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=128m -XX:PermSize=128m

That's great, but why?

UPDATE:

Nothing help's, the error still remains, also with Sprint Boot 1.2.0

like image 652
Alex Avatar asked Nov 11 '14 22:11

Alex


2 Answers

have you ever run "gradle clean" or "mvn clean" in the source code directory, which could remove the fat jar generated by spring boot, it should be the root cause for the exception. Since the running jvm cannot find the class file which is removed.

like image 132
user2481137 Avatar answered Sep 23 '22 23:09

user2481137


If you repackage the fat spring-boot JAR file, the positions of beginnings of subjars change. It happens when you change something in properties file/xml in your fat-jar. You do it when you edit sometething in the configuration file with mc (mcedit) application. Put your configuration files outside the fat jar.

like image 20
KeineSorgen Avatar answered Sep 19 '22 23:09

KeineSorgen