jvm不打印异常栈

生产环境抛异常,但却没有将堆栈信息输出到日志,确认打印日志方法正确logger.error("somthing error", ex);

JVM启动参数加上-XX:-OmitStackTraceInFastThrow(减号表示关闭,加号则表示启用)

原因参考

http://www.oracle.com/technetwork/java/javase/relnotes-139183.html#vm

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.

添加标签

时间: 2024-10-29 10:47:50

jvm不打印异常栈的相关文章

我的异常栈找不到了

前段时间线上除了个NPE的故障,查询日志的是时候死活找不到对应的异常栈 只能在日志里找到光秃秃的多行如下的日志: xxxxxx:java.lang.NullPointerException xxxxxx:java.lang.NullPointerException xxxxxx:java.lang.NullPointerException xxxxxx:java.lang.NullPointerException 当时就愤怒,这个哪个XX写的代码为啥try catch后不打印异常栈,这怎么让我查

python中利用tracekback跟踪栈以及打印异常信息

?##sys.exc_info() 返回 (type, value, traceback). type为异常类型, value为异常的参数(通常为异常错误的信息), traceback为跟踪回溯的对象. exc_type, exc_value, exc_traceback = sys.exc_info() print "*** print sys.exc_info:" print 'exc_type is: %s, exc_value is: %s, exc_traceback is:

【JVM虚拟机】(9)-- JVM是如何处理异常的

[JVM虚拟机](9)-- JVM是如何处理异常的 上篇博客我们简单说过异常信息是存放在属性表集合中的Code属性表里,那么这篇博客就单独讲Code属性表中的exception_table. 在讲之前我们先思考两个问题? 1.为什么捕获异常会较大的性能消耗? 2.为什么finally中的代码会永远执行? 接下来会从JVM虚拟机的角度来解答这两个问题. 一.概念 1.JVM是如何捕获异常的? 1.编译而成的字节码中,每个方法都附带一个异常表. 2.异常表中每一个条目代表一个异常处理器 3.触发异常

日志如何打印异常堆栈信息。

package com.doctor.slf4j; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 如何打印异常堆栈信息. * @author doctor * * @time 2014年12月11日 上午9:49:00 */ public class LogThrowableRule { private final Logger log = LoggerFactory.g

重构获取异常栈信息--printStackTrace

MyStackTrace: /** * * @author wumingkun * @version 1.0.0 * @Description */ package com.demo.stacktrace; import java.io.PrintStream; /** * @author wumingkun * */ public class MyStackTrace { public static String getStackTrace(Throwable errors) { String

易飞-凭证打印异常(字符中含有空格,自动分行导致显示异常)

在打印凭证中通常会显示自定义或者输入的内容.比如:在电子行业中的插件位置,生产人员经常在作业的时候经常会根据领料单显示的插件位置来作业. 至于为何不根据作业指导书或者BOM等其他方式来确认不在今天我们讨论的范围. 解决办法一:直接行高加大.当然可以,但是如果只是为了一张工单中的几个元件的插件位置显示而已,增加了纸张打印.从成本节约角度不太实用 解决办法二:评估了最多字符也可以在两行中显示完毕的情况下,自动分行差一两个字符的话,就把字体设置小点. 现在问题是,为和第二行中CA9,之后就自动分行了呢

在c或c+程序里打印调用栈。转

在C/C++程序里打印调用栈信息 我们知道,GDB的backtrace命令可以查看堆栈信息.但很多时候,GDB根本用不上.比如说,在线上环境中可能没有GDB,即使有,也不太可能让我们直接在上面调试.如果能让程序自己输出调用栈,那是最好不过了.本文介绍和调用椎栈相关的几个函数. NAME       backtrace, backtrace_symbols, backtrace_symbols_fd - support for application self-debugging SYNOPSIS

android native HAL程序 java程序 linux kernel打印调用栈的方法

android native HAL程序 java程序 linux kernel打印调用栈的方法 关于android java打出调用栈的方法 1)方法一:refs:frameworks/base/services/java/com/android/server/ActivityManagerService.javastartProcessLocked(){Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "amProcessStart&quo

在error日志打印异常

在日志中打印异常,经常会看到以下的写法: logger.error(e.getMessage()); 或者是: e.printStackTrace(); 这两种其实都不太好. e.getMessage只会打印出异常的类型,但是不会显示出错的异常方法堆栈,无法在日志中找出错误代码 而e.printStackTrace();则是将异常打印到控制台,并不是打印到error日志中. 解决方法 看logger.error源码,可以发现: public void error(String msg, Thro