• e.printStackTrace()导致的锁死,别用


    https://my.oschina.net/sxgkwei/blog/825700

    e.printStackTrace() 会导致锁死?这仅仅是打印啊,怎么可能?!

    先别惊呼不可能,且听我细细道来。

    先看截图1:

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

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

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

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

    个人判断:是因为 printstackTrace()是打印的栈信息,栈不属于堆内存里的,多了自然影响,本身栈内存就不大,从其他层面使得卡慢

  • 相关阅读:
    JVM调优--常用JVM监控工具使用
    jvm启动常用参数配置
    公钥和私钥原理
    tcp三次握手四次挥手
    内存泄漏和内存溢出
    hashmap解析
    Visual C++ 6.0 断点调试记录
    C++中输入一组不确定长度的数
    异或
    NULL与nullptr
  • 原文地址:https://www.cnblogs.com/xiaoliu66007/p/15798047.html
Copyright © 2020-2023  润新知