Oh My God!e.printStackTrace() 导致系统卡崩

简介: e.printStackTrace() 会导致锁死?这仅仅是打印啊,怎么可能?!先别惊呼不可能,且听我细细道来。

image.png

注意右下角区域,红框部分。这块内存是什么呢?


非堆!那么,左边是代码缓存区内存,右边红框就是字符串池,常量,基本类型数据的内存区。


然后呢?已经满了。什么原因呢?e.printStackTrace()!


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


再来看截图2:

image.png

看看有多少web的请求线程,被卡住在打印这一步!


原因呢?


要打印字符串输出到控制台上,那你字符串常量池所在的内存块要有空间啊。


然而,因为 e.printStackTrace()语句要产生的字符串记录的是堆栈信息,太长太多,内存被填满了!注意 上面代码语句:4208行!


来看图3:

image.png

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


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


短时间内大量请求访问此接口


-> 代码本身有问题,很多情况下抛异常


-> e.printStackTrace() 来打印异常到控制台


-> 产生错误堆栈字符串到字符串池内存空间


-> 此内存空间一下子被占满了


-> 开始在此内存空间产出字符串的线程还没完全生产完整,就没空间了


-> 大量线程产出字符串产出到一半,等在这儿(等有内存了继续搞啊)


-> 相互等待,等内存,锁死了,整个应用挂掉了。


综上,这就是 e.printStackTrace() 引发的血案。


总结当然重要,有3点:


1,代码质量啊亲,代码不抛异常咱不就能愉快的继续浪么?


2,不要使用 e.printStackTrace() 啊,这玩意儿,在项目发布后,除过不断的刷控制台,并没用什么卵用啊,您到是用 log 对象输出到日志文件里面啊。


3,推及开来,在java中,会产生大量字符串的方法,使用时,一定得悠着点,别一不小心撑到肚子(字符串池所属的那么点非堆内存空间),撑到肚子了,会死的啊 。

目录
相关文章
|
弹性计算 负载均衡 监控
jemeter压测【2万用户每秒5次请求在30秒内处理完请求】(二)
jemeter压测【2万用户每秒5次请求在30秒内处理完请求】
348 0
|
Web App开发 缓存 安全
解决Edge浏览器提示“此网站已被人举报不安全”
【9月更文挑战第1天】当 Edge 浏览器提示“此网站被举报为不安全”时,可尝试:关闭 Microsoft Defender SmartScreen;检查网站安全性;清除缓存和 Cookie;更新 Edge 至最新版;或使用其他浏览器。若问题依旧,联系网站管理员和技术支持。同时,避免在不可信网站输入敏感信息,保护网络安全与隐私。
3215 7
|
网络协议 安全 数据安全/隐私保护
动静态IP的网络协议有什么不同
IP地址分为静态和动态两种分配方式。静态IP地址由管理员手动分配,确保设备具有固定且唯一的网络标识,适用于服务器等关键设备。动态IP地址则通过DHCP服务器自动分配,提供更高的灵活性和管理效率,适合个人电脑和移动设备。两者在网络配置、管理和安全性方面各有优劣,需根据具体应用场景进行选择。静态IP地址虽稳定但配置复杂,安全性较低;动态IP地址配置简单,安全性更高,能有效防止针对固定IP的攻击。
|
SQL 数据库
SQL DISTINCT 用法总结
SQL DISTINCT 用法总结
5103 3
文本,Pinia的使用,(0 , _stores_token_js__WEBPACK_IMPORTED_MODULE_1__.useTokenStore),接口中必须用引入store.js文件
文本,Pinia的使用,(0 , _stores_token_js__WEBPACK_IMPORTED_MODULE_1__.useTokenStore),接口中必须用引入store.js文件
|
机器学习/深度学习 编解码 人工智能
20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用(下)
20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用(下)
|
消息中间件 存储 分布式计算
Flink之DataStream API(执行环境、数据源、读取kafka)
Flink之DataStream API(执行环境、数据源、读取kafka)
2773 0
|
存储 SQL 分布式计算
Hadoop 概述、Hadoop 发展历史、Hadoop 三大发行版本、Hadoop优势、Hadoop组成、Hadoop1.x、2.x、3.x区别、HDFS架构概述、大数据技术生态体系、推荐系统框架图
高可靠性、高扩展性、高效性、高容错性YARN架构概述、MapReduce架构概述、HDFS、YARN、MapReduce三者关系、1)NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。 2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。 3)Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份。MapReduce将计算过程分为两个阶段:
2295 1
Hadoop 概述、Hadoop 发展历史、Hadoop 三大发行版本、Hadoop优势、Hadoop组成、Hadoop1.x、2.x、3.x区别、HDFS架构概述、大数据技术生态体系、推荐系统框架图
|
弹性计算 数据安全/隐私保护
ECS体验
由于我最近所学专业需求需要用到云服务,在老师的推荐下发现飞天加速计划——高校学生用户完成学生认证,并完成领用任务,可在活动页面免费领取云服务器ECS 2周。为了续领服务器,于是我写了这篇体验,毕竟对于首次接触的事物都是了解为主不会投入大量资金。感谢阿里云为了推动行业的发展为了学生而做的努力,我相信我会通过平台继续学习,让我的知识变得更加丰富。
|
存储 Java Scala