java.lang.NullPointerException--jvm堆栈异常信息丢失问题

本文探讨了线上Tomcat项目中偶尔出现的大量java.lang.NullPointerException现象,并解释了这是由于JVM优化导致的方法重新编译及预分配异常所引起。文中还提供了禁用预分配异常的JVM参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线上运行久的Tomcat项目偶尔会在catalina.out日志中出现大量java.lang.NullPointerException,而没有错误的堆栈信息。
查阅资料后得知,是jvm优化导致的,可以参考Oracle官网的说明:

The compiler in the server VM now provides correct stack backtraces for all “cold” built-in exceptions. For performance purposes, when such an exception is thrown a few times, the method may be recompiled. After recompilation, the compiler may choose a faster tactic using preallocated exceptions that do not provide a stack trace. To disable completely the use of preallocated exceptions, use this new flag: -XX:-OmitStackTraceInFastThrow.

大致意思为jvm为所有的“冷”内置异常提供正确的堆栈回溯信息。从优化考虑,当一个异常被抛出几次,方法可能被重新编译。重新编译后,编译器会选择一个更快的策略–预分配异常(不提供堆栈信息)。说明中同时也给出了禁用预分配异常的方式 -XX:-OmitStackTraceInFastThrow.

1:26.963358059+08:00 stdout F java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@71e693fa/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T14:41:26.963358059+08:00 stdout F at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T14:41:26.963358059+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T14:41:26.963358059+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T14:41:26.963358059+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T14:41:26.963358059+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T14:41:26.963358059+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T14:41:26.963358059+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T14:41:26.963736562+08:00 stdout P Exception (java.lang.ExceptionInInitializerError) encountered during startup: null 2025-07-03T14:41:26.963776026+08:00 stdout F 2025-07-03T14:41:26.963961182+08:00 stderr P java.lang.ExceptionInInitializerError 2025-07-03T14:41:26.963973216+08:00 stderr F 2025-07-03T14:41:26.964038486+08:00 stderr P at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T14:41:26.964051773+08:00 stderr F 2025-07-03T14:41:26.964092671+08:00 stderr P at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T14:41:26.964104133+08:00 stderr F 2025-07-03T14:41:26.964123091+08:00 stderr P at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T14:41:26.964132994+08:00 stderr F 2025-07-03T14:41:26.964464325+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T14:41:26.964464325+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T14:41:26.964464325+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T14:41:26.964464325+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T14:41:26.964464325+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T14:41:26.964464325+08:00 stderr P Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@71e693fa/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T14:41:26.964487780+08:00 stderr F 2025-07-03T14:41:26.964497232+08:00 stderr P at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:110) 2025-07-03T14:41:26.964526594+08:00 stderr F 2025-07-03T14:41:26.964574438+08:00 stderr F ... 8 more 2025-07-03T14:41:26.964671211+08:00 stderr P Caused by: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@71e693fa/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T14:41:26.964690467+08:00 stderr F 2025-07-03T14:41:26.964738798+08:00 stderr P at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T14:41:26.964769627+08:00 stderr F 2025-07-03T14:41:26.964824546+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T14:41:26.964854586+08:00 stderr F 2025-07-03T14:41:26.964906265+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T14:41:26.964936031+08:00 stderr F 2025-07-03T14:41:26.964977123+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T14:41:26.965006734+08:00 stderr F 2025-07-03T14:41:26.965057652+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T14:41:26.965070428+08:00 stderr F 2025-07-03T14:41:26.965114278+08:00 stderr P at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T14:41:26.965127911+08:00 stderr F 2025-07-03T14:41:26.965173685+08:00 stderr P at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T14:41:26.965187052+08:00 stderr F 2025-07-03T14:41:26.965223074+08:00 stderr P ... 8 more 2025-07-03T14:41:26.965258697+08:00 stderr F 2025-07-03T14:41:26.965954076+08:00 stdout F 06:41:26.965 [main] ERROR org.apache.cassandra.service.CassandraDaemon - Exception encountered during startup 2025-07-03T14:41:26.965954076+08:00 stdout F java.lang.ExceptionInInitializerError: null 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1208) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:550) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:350) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:178) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:162) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:812) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:748) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:893) 2025-07-03T14:41:26.965954076+08:00 stdout F Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@71e693fa/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:110) 2025-07-03T14:41:26.965954076+08:00 stdout F ... 8 common frames omitted 2025-07-03T14:41:26.965954076+08:00 stdout F Caused by: java.lang.IllegalAccessException: access to public member failed: jdk.internal.ref.Cleaner.clean[Ljava.lang.Object;@71e693fa/invokeVirtual, from org.apache.cassandra.io.util.FileUtils (unnamed module @63d4e2ba) 2025-07-03T14:41:26.965954076+08:00 stdout F at java.base/java.lang.invoke.MemberName.makeAccessException(Unknown Source) 2025-07-03T14:41:26.965954076+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkAccess(Unknown Source) 2025-07-03T14:41:26.965954076+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.checkMethod(Unknown Source) 2025-07-03T14:41:26.965954076+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(Unknown Source) 2025-07-03T14:41:26.965954076+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(Unknown Source) 2025-07-03T14:41:26.965954076+08:00 stdout F at java.base/java.lang.invoke.MethodHandles$Lookup.unreflect(Unknown Source) 2025-07-03T14:41:26.965954076+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.<clinit>(FileUtils.java:99) 2025-07-03T14:41:26.965954076+08:00 stdout F ... 8 common frames omitted 这又是什么错
最新发布
07-04
2025-07-03T15:09:10.989656158+08:00 stdout F 07:09:10.983 [main] INFO org.apache.cassandra.config.DatabaseDescriptor - Global memtable on-heap threshold is enabled at 1722MB 2025-07-03T15:09:10.989656158+08:00 stdout F 07:09:10.983 [main] INFO org.apache.cassandra.config.DatabaseDescriptor - Global memtable off-heap threshold is enabled at 1722MB 2025-07-03T15:09:10.989656158+08:00 stdout F Exception (java.lang.NullPointerException) encountered during startup: null 2025-07-03T15:09:10.989689362+08:00 stderr F java.lang.NullPointerException 2025-07-03T15:09:10.989689362+08:00 stderr F at java.nio.file.Files.provider(Files.java:97) 2025-07-03T15:09:10.989689362+08:00 stderr F at java.nio.file.Files.getFileStore(Files.java:1461) 2025-07-03T15:09:10.989689362+08:00 stderr F at org.apache.cassandra.io.util.FileUtils.getFileStore(FileUtils.java:682) 2025-07-03T15:09:10.989689362+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1093) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:493) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:324) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:153) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:137) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:680) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:622) 2025-07-03T15:09:10.990664713+08:00 stderr F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:786) 2025-07-03T15:09:10.992724804+08:00 stdout F 07:09:10.992 [main] ERROR org.apache.cassandra.service.CassandraDaemon - Exception encountered during startup 2025-07-03T15:09:10.992724804+08:00 stdout F java.lang.NullPointerException: null 2025-07-03T15:09:10.992724804+08:00 stdout F at java.nio.file.Files.provider(Files.java:97) 2025-07-03T15:09:10.992724804+08:00 stdout F at java.nio.file.Files.getFileStore(Files.java:1461) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.io.util.FileUtils.getFileStore(FileUtils.java:682) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.guessFileStore(DatabaseDescriptor.java:1093) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applySimpleConfig(DatabaseDescriptor.java:493) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.applyAll(DatabaseDescriptor.java:324) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:153) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.config.DatabaseDescriptor.daemonInitialization(DatabaseDescriptor.java:137) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.applyConfig(CassandraDaemon.java:680) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:622) 2025-07-03T15:09:10.992724804+08:00 stdout F at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:786) 这个怎么解决 启动命令是podman run -d \ --name cassandra \ --network janusgraph-net \ --privileged \ -p 9042:9042 \ -v /opt/janusgraph/conf/cassandra:/etc/cassandra:z \ -v /home/iaas/janusgraph-full-0.6.3/cassandra/lib:/usr/share/cassandra/lib:z \ -e CASSANDRA_CONF=/etc/cassandra \ -e CLASSPATH=/usr/share/cassandra/lib/* \ -e CASSANDRA_AUTHENTICATOR=PasswordAuthenticator \ -e CASSANDRA_USER=cassandra \ -e CASSANDRA_CLUSTER_NAME=JanusGraphCluster \ docker.io/library/cassandra:3.11.14这个
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值