一个关于JAVA生产环境崩溃的问题思考

步骤一:日志分析

1、堆溢出 主要方向看对象或流的close

2、栈溢出 主要看for遍历代码的逻辑是否不严谨

先集中解决业务代码上的这些报错,代码里的不优秀的做法,比如流是否close,是不是发生了死循环。

步骤二:内存模型分析

jstat等工具分析生产机器上的GC使用情况,新生代,老生代。代码逻辑造成的内存是否有指数级增长?

跟踪测试一段时间,看GC曲线的情况,GC是否正常回收。FULL GC发生的频次等。

步骤三:应用拆解,解耦

JAVA 的虚拟机原因,JAVA的内存分配和管理都由JVM来管理,内存不被释放造成服务器内存爆掉。

当所有程序都一锅粥放在同一台服务器的时候,JVM管理各种模块的GC,无法快速找到溢出的应用模块。

这时候,我们按照应用的重点划分,比如:应用重要的持久化部分和无状态的部分进行代码解耦。好比我们K8S不把etcd或nfs安装在master,而是外挂出去。

而cordns网络组件每台都需要装。node节点和master节点按需安装组件。


版权声明:本文为qq_25037905原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。