I ran into this exception when i tried to start elasticsearch-6.8.20 using the command systemctl start elasticsearch.service
Starting Elasticsearch... systemd[1]: Started Elasticsearch. elasticsearch[71380]: Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.util.calendar.ZoneInfoFile elasticsearch[71380]: #011at sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:589) elasticsearch[71380]: #011at java.util.TimeZone.getTimeZone(TimeZone.java:560) elasticsearch[71380]: #011at java.util.TimeZone.setDefaultZone(TimeZone.java:666) elasticsearch[71380]: #011at java.util.TimeZone.getDefaultRef(TimeZone.java:636) elasticsearch[71380]: #011at java.util.TimeZone.getDefault(TimeZone.java:625) elasticsearch[71380]: #011at java.text.SimpleDateFormat.initializeCalendar(SimpleDateFormat.java:657) elasticsearch[71380]: #011at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:601) elasticsearch[71380]: #011at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:580) elasticsearch[71380]: #011at org.apache.logging.log4j.status.StatusData.getFormattedStatus(StatusData.java:122) elasticsearch[71380]: #011at org.apache.logging.log4j.status.StatusConsoleListener.log(StatusConsoleListener.java:81) elasticsearch[71380]: #011at org.apache.logging.log4j.status.StatusLogger.logMessage(StatusLogger.java:278) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2170) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2125) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2108) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2002) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1974) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.error(AbstractLogger.java:741) elasticsearch[71380]: #011at org.apache.logging.log4j.core.pattern.PatternParser.createConverter(PatternParser.java:592) elasticsearch[71380]: #011at org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter(PatternParser.java:639) elasticsearch[71380]: #011at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:415) elasticsearch[71380]: #011at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:177) elasticsearch[71380]: #011at org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder.build(PatternLayout.java:377) elasticsearch[71380]: #011at org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:129) elasticsearch[71380]: #011at org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:59) elasticsearch[71380]: #011at org.apache.logging.log4j.core.layout.PatternLayout$Builder.build(PatternLayout.java:660) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.AbstractConfiguration.setToDefault(AbstractConfiguration.java:584) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:560) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:238) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.builder.impl.DefaultConfigurationBuilder.build(DefaultConfigurationBuilder.java:204) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.builder.impl.DefaultConfigurationBuilder.build(DefaultConfigurationBuilder.java:161) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.builder.impl.DefaultConfigurationBuilder.build(DefaultConfigurationBuilder.java:57) elasticsearch[71380]: #011at org.elasticsearch.common.logging.LogConfigurator.configureStatusLogger(LogConfigurator.java:250) elasticsearch[71380]: #011at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:166) elasticsearch[71380]: #011at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:127) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:302) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) elasticsearch[71380]: #011at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) elasticsearch[71380]: #011at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) elasticsearch[71380]: #011at org.elasticsearch.cli.Command.main(Command.java:90) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) systemd[1]: elasticsearch.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: elasticsearch.service: Failed with result 'exit-code'.The service is not logging under the path defined in the config file elasticsearch.yml. any idea what could be the cause? I'm using openjdk version "1.8.0_312" and Red Hat release 8.3
22 Answers
I figured out the problem. The TimeZone dependency was missing from the OpenJDK installation: The symbolic link $JAVA_HOME/jre/lib/tzdb.dat -> /usr/share/javazi-1.8/tzdb.dat was pointing to an empty directory. I downloaded the rpm file tzdata-java-2021c-1.el8.noarch.rpm and installed using the command:rpm -ivh tzdata-java-2021c-1.el8.noarch.rpm
All works fine now.
According to java.lang.NoClassDefFoundError: Could not initialize class XXX, the problem may be related to static initializer of ZoneInfoFile.java.
What I can suggest is to create a simple class that use ZoneInfoFile and run in the server, to find out why this class cannot be initialized.
import sun.util.calendar.ZoneInfoFile;
public class TestInitZoneInfoFile { public static void main(String[] args) { ZoneInfoFile.getZoneInfo("dummy"); }
}