java中e.printStackTrace()会不会输出到控制台
创始人
2024-12-16 02:42:08
0次

  java中e.printStackTrace()只会输出到控制台吗?不会输出到日志文件吗?要想输出到日志文件是否需要logger.error(e)?需要logger.error(e)还是logger.error(e.printStackTrace())?

  e.printStackTrace()只会输出到控制台吗

  tomcat下会输出到catalina.out

  不要用e.pringStackTrace()打日志

  如果要输入调用栈的话,log.error("错误信息",e);,不输出调用栈的话就log.error("错误信息");

  忽然笑

  e.pringStackTrace()底层是调用了System.err.println().应该这样用

  try{

  //doSomething

  }catch(IllegalAccessExceptione){

  logger.error("错误信息:",e);

  }

  e.printStackTrace()会导致锁死?

  注意右下角区域,红框部分。这块内存是什么呢?非堆!那么,左边是代码缓存区内存,右边红框就是字符串池,常量,基本类型数据的内存区。然后呢?已经满了。什么原因呢?e.printStackTrace()!

  满了的后果呢?整个web服务,访问之后,没响应了,就当是卡死掉了。

  看看有多少web的请求线程,被卡住在打印这一步!原因呢?要打印字符串输出到控制台上,那你字符串常量池所在的内存块要有空间啊。然而,因为e.printStackTrace()语句要产生的字符串记录的是堆栈信息,太长太多,内存被填满了!注意上面代码语句:4208行!

  来看图3:

  没毛病,没没事儿找事儿冤枉谁。就是这句代码惹的祸!当然,我承认,被try住的代码本身就有问题,导致很多调用都会抛异常。

  那么,让我们再来理理整个事件产生的经过:

  短时间内大量请求访问此接口->代码本身有问题,很多情况下抛异常->e.printStackTrace()来打印异常到控制台->产生错误堆栈字符串到字符串池内存空间->此内存空间一下子被占满了->开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了->大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)->相互等待,等内存,锁死了,整个应用挂掉了。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...