成都网站建设设计

将想法与焦点和您一起共享

java中e.printStackTrace()会不会输出到控制台-创新互联

这篇文章主要介绍java中e.printStackTrace()会不会输出到控制台,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

彝良ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

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()来打印异常到控制台->产生错误堆栈字符串到字符串池内存空间->此内存空间一下子被占满了->开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了->大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)->相互等待,等内存,锁死了,整个应用挂掉了。

以上是“java中e.printStackTrace()会不会输出到控制台”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


名称栏目:java中e.printStackTrace()会不会输出到控制台-创新互联
转载来源:http://chengdu.cdxwcx.cn/article/ccjheo.html