java 应用程序卡死记录
情形一
写个 while 处理数据时,觉得 每个 while 处理结束了,对象就可被回收,此处是没问题的。
但是单个while直接造成内存不够的话,此时 GC 无法处理这些对象,就会导致程序卡死
情形二
k8s 部署的应用程序刷新缓存有时重启
经排查为容器内 tomcat 程序配置的内存超出容器剩余内存(容器除tomcat启动外剩余内存)。
例如:容器配置的内存大小为 4g
。不启动 tomcat ,单单启动容器就需要 1g
,此时如果给 tomcat 设置 -Xmx3500m
。应用跑的时候认为还有内存,不触发 GC 操作,然而实际没有了,分配内存就会造成内存溢出。如果我们不设置的话,默认堆大小为物理内存的[1/64, 1/4]。如果物理内存小于192M,则为物理内存的[1/64, 1/2]。
情形三
tomcat 程序卡死,进程没死,但是无响应
通过本地复现,visualVM 监听排查,确定为运行时必要内存不够,未剩余可用空间进行 GC 操作。需要确保分配内存至少支持一次并发动作(所有的场景都同时跑)并有一定的剩余空间,不然动作没执行完的话,占用内存空间是无法被 GC 回收的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律