资讯专栏INFORMATION COLUMN

Weblogic诊断之内存泄漏故障

IT那活儿 / 1308人阅读
Weblogic诊断之内存泄漏故障

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

在我们运维工作中经常会遇到内存不足或者内存泄漏的情况,本篇文章简单介绍下遇到这类情况该如何去排查。


概述

当JVM没有足够的堆空间可用于分配新的Java对象时,就会出现Java堆内存不足错误。

1.1 Java堆内存不足故障症状

  • JVM会抛出Java.lang .OutOfMemoryError异常。
  • 服务响应缓慢或不响应业务请求。
  • 应用程序可以忽略错误或处理异常,例如友好退出。
  • 如果应用程序忽略错误,线程将会退出(且将不会出现在Thread dump中)。
  • WebLogic Server的执行线程只是通过记录状态来处理异常。
  • 但连续发生的错误将导致健康监控线程关闭服务器。

1.2 堆内存不足的可能原因

  • 没有足够的堆;
  • 对象的活动时间过长;
  • 应用程序在内存中缓存对象过多;
  • 内存泄漏;
  • 因存在jvm错误未能执行完整的GC;
  • 内存碎片。


排查步骤

2.1 先获取应用进程号
ps  -ef | grep  应用名
2.2 查看pid jvm堆使用情况、垃圾回收情况 
jstat  -gcutil pid 1000 10(时间间隔1000ms,输出10次)
2.3 开启OOM快照(在启动参数里面加)
-XX:+HeapDumpOnOutOfMemoryError(开启堆快照)
-XX:HeapDumpPath=C:/m.hprof(保存文件到哪个目录)
2.4 dump 查看方法栈信息
jstack -l pid > /home/test/jstack.txt
2.5 dump 查看JVM内存分配以及使用情况 
jmap -heap pid > /home/test/jmapHeap.txt
2.6 dump jvm二进制的内存详细使用情况(需要借用内存分析工具如:Memory Analyzer (MAT)来分析

jmap -dump:format=b,file=/home/test/oom.hprof pid


解决方案

3.1 年老代堆空间被占满
  • 异常:java.lang.OutOfMemoryError:java  heap space
  • 说明:这是最典型的内存泄漏方式,简单说就是所有堆空间都被无法回收的垃圾对象占满,虚拟机再也无法分配新空间。
  • 解决方案:这种方式解决起来比较简单,一般就是根据垃圾回收前后的情况对比,同时根据对象引用情况(常见的集合对象引用)分析,基本都可以找到泄漏点。
3.2 持久代被占满
  • 异常:java.lang.OutOfMemoryError:PermGen space
  • 说明:Perm 空间被占满,无法为新的 class 分配存储空间而引发的异常。主要原因是大量动态反射生成的类不断被加载,最终导致 Perm 区被占满。
  • 解决方案:增加持久代内存 ,例如:-XX:MaxPermSize=512M




本文作者:程 红(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129207.html

相关文章

  • AIOps在携程的践行

    摘要:随着人工智能时代的到来,携程生产环境运维进入了新的运维时代。本文选取了几种典型的运维场景对在携程的践行展开了介绍,首先让我们从概念认识下。针对应用异常指标检测这种场景,抽取一定的样本统计,在基于专家经验标注下的准确率可达到以上,召回率接近。 作者简介徐新龙,携程技术保障中心应用管理团队高级工程师,负责多个AIOps项目的设计与研发。信号处理专业硕士毕业,对人工智能、机器学习、神经网络及数学有...

    MingjunYang 评论0 收藏0
  • 诊断修复 TiDB Operator 在 K8s 测试中遇到的 Linux 内核问题

    摘要:诊断修复不稳定的关键词社区相关问题起源薛定谔平台是我司开发的基于建立的一套自动化测试框架,提供各种能力,同时也提供自动化的测试,各类异常监控告警以及自动输出测试报告等功能。作者:张文博 Kubernetes(K8s)是一个开源容器编排系统,可自动执行应用程序部署、扩展和管理。它是云原生世界的操作系统。 K8s 或操作系统中的任何缺陷都可能使用户进程存在风险。作为 PingCAP EE(效率工...

    EdwardUp 评论0 收藏0
  • 诊断修复 TiDB Operator 在 K8s 测试中遇到的 Linux 内核问题

    摘要:经过广泛的调查和诊断,我们已经确定了处理这些问题的方法。我们发现在薛定谔平台上做测试时偶尔会发生性能抖动,但从下面几项来看未发现异常和的日志使用率内存和磁盘等负载信息只能偶尔看到命令执行的结果中包含一些信息。 作者:张文博 Kubernetes(K8s)是一个开源容器编排系统,可自动执行应用程序部署、扩展和管理。它是云原生世界的操作系统。 K8s 或操作系统中的任何缺陷都可能使用户进程...

    PiscesYE 评论0 收藏0
  • 诊断修复 TiDB Operator 在 K8s 测试中遇到的 Linux 内核问题

    摘要:经过广泛的调查和诊断,我们已经确定了处理这些问题的方法。我们发现在薛定谔平台上做测试时偶尔会发生性能抖动,但从下面几项来看未发现异常和的日志使用率内存和磁盘等负载信息只能偶尔看到命令执行的结果中包含一些信息。 作者:张文博 Kubernetes(K8s)是一个开源容器编排系统,可自动执行应用程序部署、扩展和管理。它是云原生世界的操作系统。 K8s 或操作系统中的任何缺陷都可能使用户进程...

    LeanCloud 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<