精华内容
下载资源
问答
  • 如果判断weblogic内存泄露

    千次阅读 2016-06-06 10:12:27
    很多年的疑问现在终于有答案了,判断weblogic是否有内存泄露,就看GC日志,如果发现老年代回收后的内存使用是上升趋势(当然,我的GC模型是选择的经典默认的并行收集模型,如果是其他模型,下面的日志也就不适用了)...

       很多年的疑问现在终于有答案了,判断weblogic是否有内存泄露,就看GC日志,如果发现老年代回收后的内存使用是上升趋势(当然,我的GC模型是选择的经典默认的并行收集模型,如果是其他模型,下面的日志也就不适用了),且当系统业务空闲的时候也一直都无法回收,就是内存泄露了。从系统上反映就是系统刚启动的时候很快,用着用着就很慢了。

    2016-06-01T17:28:41.565+0800: 28103.616: [Full GC [PSYoungGen: 1724416K->1098291K(1736192K)] [ParOldGen: 3494228K->3494200K(3495424K)] 5218644K->4592491K(5231616K) [PSPermGen: 496291K->496291K(1048576K)], 1.2115930 secs] [Times: user=8.00 sys=0.01, real=1.21 secs] 

    2016-06-01T17:28:43.007+0800: 28105.058: [Full GC [PSYoungGen: 1724416K->1098187K(1736192K)][ParOldGen: 3494200K->3494200K(3495424K)] 5218616K->4592387K(5231616K) [PSPermGen: 496291K->496291K(1048576K)], 1.3637810 secs] [Times: user=8.32 sys=0.01, real=1.37 secs] 
    2016-06-01T17:28:44.789+0800: 28106.840: [Full GC [PSYoungGen: 1724416K->1098090K(1736192K)][ParOldGen: 3494200K->3494148K(3495424K)] 5218616K->4592239K(5231616K)[PSPermGen: 496294K->496294K(1048576K)], 1.5212640 secs] [Times: user=12.83 sys=0.03, real=1.52 secs] 
    2016-06-01T17:28:48.360+0800: 28110.411: [Full GC [PSYoungGen: 1724416K->1106761K(1736192K)] [ParOldGen: 3494148K->3494148K(3495424K)] 5218564K->4600910K(5231616K) [PSPermGen: 496294K->496294K(1048576K)], 1.2616240 secs] [Times: user=9.28 sys=0.02, real=1.26 secs] 
    2016-06-01T17:28:49.994+0800: 28112.044: [Full GC [PSYoungGen: 1724416K->1106598K(1736192K)][ParOldGen: 3494148K->3494148K(3495424K)] 5218564K->4600747K(5231616K) [PSPermGen: 496294K->496294K(1048576K)], 1.2933940 secs] [Times: user=6.67 sys=0.00, real=1.29 secs] 
    2016-06-01T17:28:56.615+0800: 28118.666: [Full GC [PSYoungGen: 1724416K->1106499K(1736192K)][ParOldGen: 3494148K->3494127K(3495424K)] 5218564K->4600626K(5231616K) [PSPermGen: 496294K->496294K(1048576K)], 1.6003510 secs] [Times: user=12.98 sys=0.04, real=1.60 secs] 
    2016-06-01T17:28:58.811+0800: 28120.861: [Full GC [PSYoungGen: 1724416K->1106981K(1736192K)][ParOldGen: 3494127K->3494124K(3495424K)] 5218543K->4601106K(5231616K)[PSPermGen: 496297K->496297K(1048576K)], 1.7626250 secs] [Times: user=14.49 sys=0.06, real=1.77 secs] 
    2016-06-01T17:29:00.723+0800: 28122.773: [Full GC [PSYoungGen: 1724416K->1107113K(1736192K)][ParOldGen: 3494124K->3494124K(3495424K)] 5218540K->4601238K(5231616K) [PSPermGen: 496297K->496297K(1048576K)], 1.4176170 secs] [Times: user=10.48 sys=0.01, real=1.41 secs] 
    2016-06-01T17:29:02.479+0800: 28124.529: [Full GC [PSYoungGen: 1724416K->1107171K(1736192K)] [ParOldGen: 3494124K->3494104K(3495424K)] 5218540K->4601275K(5231616K) [PSPermGen: 496297K->496297K(1048576K)], 1.3758820 secs] [Times: user=9.06 sys=0.02, real=1.38 secs] 
    2016-06-01T17:29:04.625+0800: 28126.675: [Full GC [PSYoungGen: 1724416K->1107717K(1736192K)] [ParOldGen: 3494104K->3493953K(3495424K)] 5218520K->4601671K(5231616K) [PSPermGen: 496297K->496297K(1048576K)], 1.4519640 secs] [Times: user=11.96 sys=0.03, real=1.45 secs] 
    2016-06-01T17:29:06.228+0800: 28128.279: [Full GC [PSYoungGen: 1724416K->1107784K(1736192K)] [ParOldGen: 3493953K->3493949K(3495424K)] 5218369K->4601733K(5231616K) [PSPermGen: 496297K->496297K(1048576K)], 1.2794860 secs] [Times: user=8.18 sys=0.01, real=1.28 secs] 
    2016-06-01T17:29:07.662+0800: 28129.712: [Full GC [PSYoungGen: 1724416K->1107743K(1736192K)] [ParOldGen: 3493949K->3493941K(3495424K)] 5218365K->4601684K(5231616K) [PSPermGen: 496297K->496297K(1048576K)], 1.2876190 secs] [Times: user=7.66 sys=0.00, real=1.29 secs] 
    2016-06-01T17:29:09.144+0800: 28131.195: [Full GC [PSYoungGen: 1724416K->1107706K(1736192K)] [ParOldGen: 3493941K->3493941K(3495424K)] 5218357K->4601648K(5231616K) [PSPermGen: 496298K->496298K(1048576K)], 4.0644010 secs] [Times: user=49.47 sys=0.26, real=4.06 secs] 
    2016-06-01T17:29:13.371+0800: 28135.422: [Full GC [PSYoungGen: 1724416K->1107731K(1736192K)] [ParOldGen: 3493941K->3493933K(3495424K)] 5218357K->4601665K(5231616K) [PSPermGen: 496298K->496298K(1048576K)], 1.5156320 secs] [Times: user=8.05 sys=0.01, real=1.52 secs] 
    2016-06-01T17:29:15.245+0800: 28137.295: [Full GC [PSYoungGen: 1724416K->1107558K(1736192K)] [ParOldGen: 3493933K->3493933K(3495424K)] 5218349K->4601492K(5231616K) [PSPermGen: 496298K->496298K(1048576K)], 1.3759610 secs] [Times: user=9.00 sys=0.01, real=1.37 secs] 
    2016-06-01T17:29:16.928+0800: 28138.978: [Full GC [PSYoungGen: 1724416K->1107602K(1736192K)] [ParOldGen: 3493933K->3493931K(3495424K)] 5218349K->4601534K(5231616K) [PSPermGen: 496298K->496298K(1048576K)], 1.6947780 secs] [Times: user=13.69 sys=0.03, real=1.69 secs] 
    2016-06-01T17:29:18.883+0800: 28140.933: [Full GC [PSYoungGen: 1724416K->1107855K(1736192K)] [ParOldGen: 3493931K->3493911K(3495424K)] 5218347K->4601766K(5231616K) [PSPermGen: 496298K->496298K(1048576K)], 1.4874950 secs] [Times: user=8.53 sys=0.01, real=1.49 secs] 
    2016-06-01T17:29:21.835+0800: 28143.886: [Full GC [PSYoungGen: 1724416K->1107107K(1736192K)] [ParOldGen: 3495419K->3495195K(3495424K)] 5219835K->4602303K(5231616K) [PSPermGen: 496299K->496299K(1048576K)], 2.6679800 secs] [Times: user=26.68 sys=0.16, real=2.66 secs] 
    2016-06-01T17:29:24.644+0800: 28146.695: [Full GC [PSYoungGen: 1724416K->1106987K(1736192K)] [ParOldGen: 3495195K->3495187K(3495424K)] 5219611K->4602175K(5231616K) [PSPermGen: 496299K->496299K(1048576K)], 1.2649340 secs] [Times: user=7.34 sys=0.00, real=1.27 secs] 
    2016-06-01T17:29:26.239+0800: 28148.290: [Full GC [PSYoungGen: 1724416K->1107191K(1736192K)] [ParOldGen: 3495187K->3495153K(3495424K)] 5219603K->4602344K(5231616K) [PSPermGen: 496299K->496299K(1048576K)], 2.1915990 secs] [Times: user=23.00 sys=0.12, real=2.19 secs] 
    2016-06-01T17:29:28.570+0800: 28150.621: [Full GC [PSYoungGen: 1724416K->1107338K(1736192K)] [ParOldGen: 3495153K->3495148K(3495424K)] 5219569K->4602487K(5231616K) [PSPermGen: 496299K->496299K(1048576K)], 1.2928310 secs] [Times: user=8.11 sys=0.00, real=1.29 secs] 
    2016-06-01T17:29:30.043+0800: 28152.093: [Full GC [PSYoungGen: 1724416K->1107265K(1736192K)] [ParOldGen: 3495148K->3495144K(3495424K)] 5219564K->4602410K(5231616K) [PSPermGen: 496299K->496299K(1048576K)], 1.3301780 secs] [Times: user=9.31 sys=0.02, real=1.33 secs] 
    2016-06-01T17:29:37.668+0800: 28159.719: [Full GC [PSYoungGen: 1724416K->1107418K(1736192K)] [ParOldGen: 3495144K->3495128K(3495424K)] 5219560K->4602546K(5231616K) [PSPermGen: 496300K->496300K(1048576K)], 1.4910560 secs] [Times: user=12.13 sys=0.04, real=1.49 secs] 
    2016-06-01T17:29:43.306+0800: 28165.356: [Full GC [PSYoungGen: 1724416K->1107629K(1736192K)] [ParOldGen: 3495128K->3495111K(3495424K)] 5219544K->4602740K(5231616K) [PSPermGen: 496300K->496300K(1048576K)], 1.3447110 secs] [Times: user=9.45 sys=0.02, real=1.35 secs] 
    2016-06-01T17:29:44.845+0800: 28166.896: [Full GC [PSYoungGen: 1724416K->1107573K(1736192K)] [ParOldGen: 3495111K->3495043K(3495424K)] 5219527K->4602617K(5231616K) [PSPermGen: 496300K->496208K(1048576K)], 2.7839360 secs] [Times: user=27.63 sys=0.12, real=2.79 secs] 
    2016-06-01T17:29:47.799+0800: 28169.850: [Full GC [PSYoungGen: 1724416K->1107567K(1736192K)] [ParOldGen: 3495043K->3495043K(3495424K)] 5219459K->4602611K(5231616K) [PSPermGen: 496208K->496208K(1048576K)], 1.4002200 secs] [Times: user=8.26 sys=0.01, real=1.40 secs] 
    2016-06-01T17:29:49.382+0800: 28171.433: [Full GC [PSYoungGen: 1724416K->1107798K(1736192K)] [ParOldGen: 3495043K->3495043K(3495424K)] 5219459K->4602842K(5231616K) [PSPermGen: 496208K->496208K(1048576K)], 1.3898500 secs] [Times: user=9.02 sys=0.01, real=1.39 secs] 
    2016-06-01T17:29:50.901+0800: 28172.952: [Full GC [PSYoungGen: 1724416K->1107652K(1736192K)] [ParOldGen: 3495043K->3495043K(3495424K)] 5219459K->4602696K(5231616K) [PSPermGen: 496208K->496208K(1048576K)], 1.3592560 secs] [Times: user=7.51 sys=0.01, real=1.36 secs] 
    2016-06-01T17:29:52.414+0800: 28174.465: [Full GC [PSYoungGen: 1724416K->1107491K(1736192K)] [ParOldGen: 3495043K->3495043K(3495424K)] 5219459K->4602535K(5231616K) [PSPermGen: 496208K->496208K(1048576K)], 1.4800410 secs] [Times: user=9.71 sys=0.01, real=1.48 secs] 
    2016-06-01T17:29:54.041+0800: 28176.091: [Full GC [PSYoungGen: 1724416K->1107579K(1736192K)] [ParOldGen: 3495043K->3495011K(3495424K)] 5219459K->4602591K(5231616K) [PSPermGen: 496208K->496208K(1048576K)], 1.2677000 secs] [Times: user=8.60 sys=0.01, real=1.26 secs] 
    2016-06-01T17:29:55.581+0800: 28177.632: [Full GC [PSYoungGen: 1724416K->1111738K(1736192K)] [ParOldGen: 3495011K->3494978K(3495424K)] 5219427K->4606716K(5231616K) [PSPermGen: 496208K->496208K(1048576K)], 1.3719620 secs] [Times: user=10.40 sys=0.02, real=1.37 secs] 
    2016-06-01T17:30:04.247+0800: 28186.298: [Full GC [PSYoungGen: 1724416K->1111833K(1736192K)] [ParOldGen: 3494978K->3494922K(3495424K)] 5219394K->4606756K(5231616K) [PSPermGen: 496208K->496202K(1048576K)], 2.2148720 secs] [Times: user=19.09 sys=0.10, real=2.22 secs] 
    2016-06-01T17:30:07.110+0800: 28189.160: [Full GC [PSYoungGen: 1724416K->1111765K(1736192K)] [ParOldGen: 3494922K->3494837K(3495424K)] 5219338K->4606602K(5231616K) [PSPermGen: 496202K->496180K(1048576K)], 1.7736690 secs] [Times: user=13.14 sys=0.02, real=1.78 secs] ;
    展开全文
  • weblogic调优memory内存不足与内存泄漏问题
  • weblogic 探查内存不足/内存泄漏问题

    千次阅读 2011-02-18 18:09:00
    探查内存不足/内存泄漏问题 问题描述 内存不足 (OOM) - 由于 java 堆或本地内存中的内存耗尽,应用程序显示“内存不足”错误。 内存泄漏 - java 堆或本地内存的持续内存增长,最终将导致内存...
    探查内存不足/内存泄漏问题

    问题描述

    内存不足 (OOM) - 由于 java 堆或本地内存中的内存耗尽,应用程序显示“内存不足”错误。

    内存泄漏 - java 堆或本地内存的持续内存增长,最终将导致内存不足状态。调试内存泄漏状态的技术与调试内存不足状态的技术相同。

    故障排除
    请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。

    快速链接:

    Java 堆、本地内存和进程大小

    Java 堆 - 这是 JVM 用来分配 java 对象的内存。java 堆内存的最大值用 java 命令行中的 .Xmx 标志来指定。如果未指定最大的堆大小,那么该极限值由 JVM 根据诸如计算机中的物理内存量和该时刻的可用空闲内存量这类因素来决定。始终建议您指定最大的 java 堆值。

    本地内存 - 这是 JVM 用于其内部操作的内存。JVM 将使用的本地内存堆数量取决于生成的代码量、创建的线程、GC 期间用于保存 java 对象信息的内存,以及在代码生成、优化等过程中使用的临时空间。

    如果有一个第三方本地模块,那么它也可能使用本地内存。例如,本地 JDBC 驱动程序将分配本地内存。

    最 大本地内存量受到任何特定操作系统上的虚拟进程大小限制的约束,也受到用 .Xmx 标志指定用于 java 堆的内存量的限制。例如,如果应用程序能分配总计为 3 GB 的内存量,并且最大 java 堆的大小为 1 GB,那么本地内存量的最大值可能在 2 GB 左右。

    进程大小 - 进程大小将是 java 堆、本地内存与加载的可执行文件和库所占用内存的总和。在 32 位操作系统上,进程的虚拟地址空间最大可达到 4 GB。从这 4 GB 内存中,操作系统内核为自己保留一部分内存(通常为 1 - 2 GB)。剩余内存可用于应用程序。

    Windows缺省情况下,2 GB 可用于应用程序,剩余 2 GB 保留供内核使用。但是,在 Windows 的一些变化版本中,有一个 /3GB 开关可用于改变该分配比率,使应用程序能够获得 3 GB。有关 /3GB 开关的详细信息,可以在以下网址中找到:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ddtools/hh/ddtools/bootini_1fcj.asp

    RH Linux AS 2.1 - 3 GB 可用于应用程序。

    对于其它操作系统,请参考操作系统文档了解有关配置。

    返回页首

    进程地址空间和物理内存之间的差异

    每个进程都获得其自有的地址空间。在 32 位操作系统中,此地址空间范围为 0 到 4 GB。此范围与计算机的可用随机存取内存 (RAM) 或交换空间无关。计算机中的可用物理内存总量是该计算机上的可用 RAM 和交换空间之和。所有运行的进程共享这些物理内存。

    进程内的存储地址是虚拟地址。内核将此虚拟地址映射到物理地址上。物理地址指向物理内存中的某个位置。在任一给定时间,计算机中运行进程所使用的全部虚拟内存的总和不能超过该计算机上可用物理内存的总量。

    返回页首

    为什么会发生 OOM 问题,JVM 在这种情况下如何处理?

    java 堆中的内存不足
    如果 JVM 不能在 java 堆中获得更多内存来分配更多 java 对象,将会抛出 java 内存不足 (java OOM) 错误。如果 java 堆充满了活动对象,并且 JVM 无法再扩展 java 堆,那么它将不能分配更多 java 对象。

    在这种情况下,JVM 让应用程序决定在抛出 java.lang.OutOfMemoryError 后该执行什么操作。例如,应用程序可以处理此错误,并决定以安全方式自行关闭或决定忽略此错误。如果应用程序不处理此错误,那么抛出此错误的线程将退出 (如果您进行 java Thread Dump,那么将看不到该线程)。

    在使用 Weblogic Server 的情况下,如果此错误是由某个执行线程抛出的,则会处理此错误并将其记录在日志中。如果连续抛出此错误,那么核心运行状况监视器线程将关闭 Weblogic Server。

    本地堆中的内存不足
    如果 JVM 无法获得更多本地内存,它将抛出本地内存不足(本地 OOM)错误。当进程到达操作系统的进程大小限值,或者当计算机用完 RAM 和交换空间时,通常会发生这种情况。

    当发生这种情况时,JVM 处理本地 OOM 状态,记录说明它已用完本地内存或无法获得内存的消息,然后退出。如果 JVM 或加载的任何其它模块(如 libc 或第三方模块)不处理这个本地 OOM 状态,那么操作系统将给 JVM 发送命令 JVM 退出的 sigabort 信号。通常情况下,JVM 收到 sigabort 信号时将会生成一个核心文件。

    返回页首

    排除故障的步骤

    确定是 Java OOM 还是本地 OOM
    • 如果 stdout/stderr 消息说明这是一个 java.lang.OutOfMemoryError,那么这就是 Java OOM
    • 如果 stdout/stderr 消息说明无法获得内存,那么这就是本地 OOM

    请注意,上述消息仅发送到 stdout 或 stderr 中,而不发送到应用程序特定的日志文件(如 weblogic.log)

    返回页首

    对于 Java OOM:

    1. 收集和分析 verbose gc 输出
      1. 在 java 命令行中添加“-verbosegc ”标志 。这样将会把 GC 活动信息打印到 stdout/stderr。将 stdout/stderr 重定向到一个文件。运行应用程序,直到该问题重现。
      2. 确保 JVM 在抛出 java OOM 之前完成下列任务

        完整 GC 运行:
        执行一次完整 GC 运行,并且删除了所有不可及对象以及虚可及、弱可及、软可及对象,并回收了那些空间。有关不同级别的对象可及性的详细信息,可以在以下网址中可找到:
        http://java.sun.com/developer/technicalArticles/ALT/RefObj

        您可以检查是否在发出 OOM 消息之前执行了完整 GC 运行。当完成一次完整 GC 运行时,将会打印类似如下消息(格式取决于 JVM - 请查看 JVM 帮助信息以了解有关格式)

        [memory ] 7.160: GC 131072K->130052K (131072K) in 1057.359 ms

        以上输出的格式如下(备注:在此模式下将全部使用相同的格式):

        [memory ] <start>: GC <before>K-><after>K (<heap>K), <total> ms
        [memory ] <start> - start time of collection (seconds since jvm start)
        [memory ] <before> - memory used by objects before collection (KB)
        [memory ] <after> - memory used by objects after collection (KB)
        [memory ] <heap> - size of heap after collection (KB)
        [memory ] <total> - total time of collection (milliseconds)

        但是,没有办法断定是否使用 verbose 消息删除了软/弱/虚可及的对象。如果您怀疑在抛出 OOM 时这些对象仍然存在,请与 JVM 供应商联系。

        如果垃圾回收算法是一种按代回收算法(对于 Jrockit 为 gencopy 或 gencon,对于其它 JDK 则是缺省算法),您也将看到类似如下的 verbose 输出:
        [memory ] 2.414: Nursery GC 31000K->20760K (75776K), 0.469 ms

        以上是 nursery GC(即 young GC)周期,它将把活动对象从 nursery(或 young 空间)提升到 old 空间。这个周期对我们的分析不重要。有关按代回收算法的详细信息,可以在 JVM 文档中找到。

        如果在 java OOM 之前未发生 GC 周期,那么这是一个 JVM 错误。

        完全压缩:
        确保 JVM 执行了适当的压缩工作,并且内存并未成碎片(否则会阻止分配大对象并触发 java OOM 错误)。

        Java 对象要求内存是连续的。如果可用空闲内存是一些碎片,那么 JVM 将无法分配大对象,因为它可能无法放入任何可用空闲内存块中。在这种情况下,JVM 将执行一次完全压缩,以便形成更多连续的空闲内存来容纳大对象。

      压缩工作包括在 java 堆内存中将对象从一个位置移动到另一个位置,以及更新对这些对象的引用以指向新位置。除非确有必要,否则 JVM 不会压缩所有对象。这是为了减少 GC 周期的暂停时间。

      我们可以通过分析 verbose gc 消息来检查 java OOM 是否由碎片引起。如果您看到类似如下的输出(在此无论是否有可用的空闲 java 堆都会抛出 OOM),那么这就是由碎片引起的。

      [memory ] 8.162: GC 73043K->72989K (131072K) in 12.938 ms
      [memory ] 8.172: GC 72989K->72905K (131072K) in 12.000 ms
      [memory ] 8.182: GC 72905K->72580K (131072K) in 13.509 ms
      java.lang.OutOfMemoryError

      在上述情况中您可以看到,所指定的最大堆内存是 128MB,并且当实际内存使用量仅为 72580K 时,JVM 抛出 OOM。堆使用量仅为 55%。因此在这种情况下,碎片影响是:即使还有 45% 的空闲堆,内存也会抛出 OOM。这是一个 JVM 错误或缺陷。您应当与 JVM 供应商联系。

    2. 如果 JVM 一切都正常 (上一步中提到的所有操作),那么此 java OOM 可能是应用程序的问题。应用程序可能在不断泄漏一些 java 内存,而这可能导致出现上述问题。或者,应用程序使用更多的活动对象,因此它需要更多 java 堆内存。在应用程序中可以检查以下方面:
    1.  
      • 应用程序中的缓存功能 - 如果应用程序在内存中缓存 java 对象,则应确保此缓存并没有不断增大。对缓存中的对象数应有一个限值。我们可以尝试减少此限值,来观察其是否降低 java 堆使用量。
      • 长期活动对象 - 如果应用程序中有长期活动对象,则可以尝试尽可能减少这些对象的存在期。例如,调整 HTTP 会话超时值将有助于更快地回收空闲会话对象。
      • 内存泄漏 - 内存泄漏的一个例子是在应用服务器中使用数据库连接池。当使用连接池时,必须在 finally 块中显式关闭 JDBC 语句和结果集对象。这是因为,当从池中调用连接对象上的 close() 时,只是简单地把连接返回池中以供重用,并没有实际关闭连接和关联的语句/结果集对象。
      • 增加 java 堆 - 如果可能的话,我们也可尝试增加 java 堆,以观察是否能解决问题。
    2. Java 软引用也可用于数据缓存,当 JVM 用完 java 堆时,可以保证删除软可及对象。


    3. 如果上述建议都不适用于该应用程序 ,那么,我们需要使用一个基于 JVMPI(JVM 事件探查器接口)的事件探查器(如 Jprobe 或 OptimizeIt)来找出哪些对象正在占用 java 堆。事件探查器还提供 java 代码中正在创建这些对象的位置的详细信息。本文档并不介绍每个事件探查器的详细信息。可以参考事件探查器文档来了解如何用事件探查器设置和启动应用程序。 一般而言,基于 JVMPI 的事件探查器需要较高的系统开销,并会大大降低应用程序的性能。因此,在生产环境中使用这些事件探查器并不可取。
      http://www.borland.com/optimizeit
      http://www.quest.com/jprobe

    返回页首

    对于本地 OOM 问题:

    1. 收集下列信息:
      1.  .verbosegc 输出,通过它可监视 java 堆使用量。这样将有助于了解此应用程序的 java 内存要求。
      应当注意,指定的最大堆内存量(在 java 命令行中使用 Xmx 标志)与应用程序的实际 java 堆使用量无关,其在 JVM 启动时被保留,并且此保留内存不能用于其它任何用途。

      在使用 Jrockit 时,使用 -verbose 来代替 -verbosegc ,因为这可以提供 codegen 信息以及 GC 信息。
      1. 定期记录进程虚拟内存大小 ,从启动应用程序时起直到 JVM 用完本地内存。这样将有助于了解此进程是否确实达到该操作系统的大小限值。
      在 Windows 环境下,使用下列步骤来监视虚拟进程大小:
      1.  
        1. 在“开始” -> “运行”对话框中,输入“perfmon”并单击“确定”。
        2. 在弹出的“性能”窗口中,单击“+”按钮(图表上部)。
        3. 在显示的对话框中选择下列选项:
          • 性能对象:进程(不是缺省的处理器)
          • 从列表中选择计数器:虚拟字节数
          • 从列表中选择实例:选择 JVM (java) 实例
          • 单击“添加”,然后单击“关闭”

    在 Unix 或 Linux 环境下,对于一个给定 PID,可以使用以下命令来查找虚拟内存大小 - ps -p <PID> -o vsz

    在 Linux 环境下,单个 JVM 实例内的每个 java 线程都显示为一个独立的进程。如果我们获得根 java 进程的 PID,那么这就足够了。可以使用 ps 命令的 .forest 选项来找到根 java 进程。例如,ps lU <user> --forest 将提供一个由指定用户启动的所有进程的 ASCII 树图。您可以从该树图中找到根 java。

    1. 计算机中的内存可用性
      如果计算机没有足够的 RAM 和交换空间,则操作系统将不能为此进程提供更多内存,这样也会导致内存不足。请确保 RAM 与磁盘中的交换空间之和足以满足该计算机中正在运行的所有进程的需要。
    1. 调整 java 堆
      如果 java 堆使用量完全在最大堆范围内,则减小 java 最大堆将为 JVM 提供更多的本地内存。这不是一个解决办法,而是一个可尝试的变通方法。由于操作系统限制进程大小,我们需要在 java 堆和本地堆之间寻求一个平衡。
    1. JVM 的本地内存使用量
      在加载了所有类并调用了方法(代码生成结束)后,JVM 的本地内存用量预计将会几乎达到稳定。对于大多数应用程序而言,这通常发生在最初几小时内。此后,JVM 可能会因加载运行时类型、生成优化代码等处理而仅使用少量本地内存。

      为了缩小问题的范围,可尝试禁用运行时优化,并检查这是否会产生任何效果。

      • 在使用 Jrockit 时,可使用 -Xnoopt 标志来禁用运行时优化。
      • 在使用 SUN hotspot JVM 时,-Xint 标志将强迫 JVM 在解释模式中运行(不生成代码)。

      如果在整个运行过程中,本地内存使用量继续不断增加,那么这可能是本地代码中的内存泄漏。

    2. 第三方本地模块或应用程序中的 JNI 代码
      检查您是否在使用类似数据库驱动程序的任何第三方本地模块。这些本地模块也可以分配本地内存,泄漏可能从这些模块中发生。为了缩小问题的范围,应尝试在没有这些第三方模块的情况下重现问题。例如,可以使用纯 java 驱动程序来代替本地数据库驱动程序。

      检查应用程序是否使用一些 JNI 代码。这也可能造成本地内存泄漏,如果可能的话,您可以尝试在没有 JNI 代码的情况下运行应用程序。

    3. 如果在执行上述步骤后还不能找到本地内存泄漏的根源 ,那么您需要与 JVM 供应商合作来获得一个特殊的编译版本,它可以跟踪本地内存分配调用,并可提供有关泄漏的更多信息。
    展开全文
  • 1、 WebLogic JVM内存泄漏 主要表现为程序中存在许多对象占用内存不能被回收,特别是大对象,导致频繁FULL GC垃圾回收,而每次垃圾回收后又不能清理这些对象而回收占用空间,则系统的响应时间则越长,当新对象多次...
    [quote]原帖由 [i]mfkqwyc86[/i] 于 2010-10-26 20:49 发表 [url=http://www.itpub.net/redirect.php?goto=findpost&pid=16646868&ptid=1361828][img]http://www.itpub.net/images/common/back.gif[/img][/url]
    问题描述


    最近应用服务器WebLogic服务每天均出现多次宕机情况,严重影响业务的使用


    目的:由于某些原因,开发商不能修改程序,本次主要降低宕机频繁,保障春节期间正常运行。


    环境:Linux ,Sun JDK 1.4.2 SR4,WebLogic Server 8.1.3(两台)

    问题分析及处理1、
    Weblogic线程超时

    日志中经常出现与数据库相关的线程运行时间超过10分钟或30分钟而且超时,这种情况对数据库SQL语句进行优化处理后正常。


    1、
    WebLogic JVM内存泄漏

    主要表现为程序中存在许多对象占用内存不能被回收,特别是大对象,导致频繁FULL GC垃圾回收,而每次垃圾回收后又不能清理这些对象而回收占用空间,则系统的响应时间则越长,当新对象多次申请空间时又不能满足需求,最终出现内存溢出而WebLogic宕机。
    如下图,其中(a),(b),(c)均是使用XXXX页面期间产生的3个线程(189,193,194)占用情况,WebLogic自身及其它对象使用只占用了140M。
    此问题经过多次分析,均是由XXXX页面的访问引起。


    页面附图:内存泄漏.gif

    1、
    应用服务器CPU占用比较高

    经检查,发现占用CPU高的进程主要是Java进程,即WebLogic Server运行进程,通过分析JDK GC日志,发现在GC垃圾回收占用系统资源严重,而FULL GC垃圾回收又是整个垃圾回收的重点,而每次FULL GC垃圾回收都是对那些在年轻代区域中不能被回收的对象进行回收。
    同时结合观察, 未进行FULL GC时,系统的CPU使用正常,但每次在FULL GC期间,系统CPU都在高位,说明CPU高与FULL GC垃圾回收有关,而FULL GC垃圾回收则是类似上图中的占用JVM内存较多的大对象。


    Oslash;
    首先解决运行环境的问题

    针对以上内存溢出和CPU的问题,首先从运行环境中寻找其解决方案。
    1、
    升级WebLogic 8.1版本由SP3到SP6
    2、
    升级SUN jdk1.4.2 SR4到SUN jdk 1.4.2 SR19
    //备注:在JDK每一个新版本都解决了这前版本许多的BUG,其中包含由JDK本身而引起的的JVM Crash、Thread Lock、CPU High等关键问题。
    经过以上处理及JDK运行参数的调整后,对业务进行了压力测试,当单节点并发用户在80个以上同时运行了20多分钟,数据库的CPU达到100%时,而且WebLogic进程占用CPU情况较正常,但越到最后,CPU使用情况就比较糟糕了,但最终未出现宕机情况,此时观察GC垃圾回收日志,主要表现为FULL GC频繁。
    内存泄漏.GIF (13.2 KB)
    下载次数:5
    2010-2-21 18:29




    http://bbs.weblogicfans.net/attachments/month_1002/1002211829e93467e885f679bf.gif
    本帖最后由 chaowang 于 2010-2-21 19:01 编辑

    再次处理环境外的问题
    根据分析FULL GC频繁的原因主要表现为大对象不能被回收,出现内存溢出,如附图中的状况。

    内存溢出问题是目前应用服务器宕机的普通表现,其彻底解决办法,也只能修改程序,调整相关参数只能起到缓解的作用。

    根据多次观察及分析GC日志,根据目前32位环境的情况,目前JVM参数配置如下:


    [*]-XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintGCApplicationStoppedTime
    [*]-XX:+PrintGCApplicationConcurrentTime -Xms768m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m
    [*]-XX:NewRatio=2 -XX:SurvivorRatio=4 -XX:PermSize=128m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=20 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=13 -XX:+CMSPermGenSweepingEnabled -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection
    [*]-XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled

    复制代码
    根据春节期间连续9天未宕机的运行情况分析,结果如下:

    9天的普通GC垃圾回收共计29,136次,平均间隔时间为23.4秒进行一次,每次普通GC垃圾回收时间平均为0.7秒;
    9天的FULL GC垃圾回收共计2,313,平均间隔时间为2.2秒进行一次,每次FULL GC垃圾回收时间平均为1.3秒,这个还是比较严重;

    根据结果分析,虽然通过调整使目前环境相比之前的环境会稳定一点,但根本的问题还是存在。

    Number of Full Garbage Collections : 2,313
    Number of Minor Garbage Collections : 29,136
    Average Full Garbage Collection interval : 2,268 milliseconds
    Average Minor Garbage Collection interval : 23,408 milliseconds
    Average Full Garbage Collection duration : 1,324 milliseconds
    Average Minor Garbage Collection duration : 733 milliseconds

    处理结果
    根据本次的处理,保障了XXXX业务系统在春节期间不宕机的正常运行。

    经过多次分析及跟踪,宕机问题主要原因是因为程序中存在内存泄漏问题,而泄漏位置主要是XXXXX这个页面访问。

    建议
    1、  建议开发商修改程序XXXXX并。 [/quote]

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7656893/viewspace-678537/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/7656893/viewspace-678537/

    展开全文
  • 最近更新于 2018-11-13。 适用于 Oracle Weblogic 服务器 - 版本 10.3.5 及以后。 本文信息适用于任何平台。...使用 Eclipse 内存分析工具 MAT (Memory Analysis Tool) 跟踪的一个内存泄漏的例子: 右击内存泄...

    最近更新于 2018-11-13。

    适用于

    Oracle Weblogic 服务器 - 版本 10.3.5 及以后。
    本文信息适用于任何平台。

    问题

    在一个线程执行结束以后,Weblogic 服务器并不会清理设置在 ThreadLocal 里的对象。这会导致内存泄漏。
    使用 Eclipse 内存分析工具 MAT (Memory Analysis Tool) 跟踪的一个内存泄漏的例子:

    1. 右击内存泄漏的可疑对象 -> Path To GC -> With All Reference
      Right click on the suspicious leaking object.jpg
    2. 该对象由 Weblogic 执行线程 ‘19’ 的 ThreadLocal 对象所引用
      The object is referred by the ThreadLocal object of ExecuteThread.jpg
    3. 执行线程 ‘19’ 当前没有侍服于任何请求,它是 idle 的
      ExecuteThread is not working on any request.jpg

    解决方案

    请参考 Java API 文档:http://docs.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html

    每一个线程会一直对其 ThreadLocal 变量的副本保留一个隐式的引用,只要该线程还是 alive 状态的且该 ThreadLocal 实例还是可访问的;一旦线程消亡,其下所有 ThreadLocal 的拷贝都会划入垃圾回收的范畴 (除非还有其他对这些拷贝的引用)。

    Weblogic 自带一个线程池管理机制。分配给一个线程的一个任务完成以后,该线程并不会被销毁。相反,该线程会被归还给线程池。因此,存储于 ThreadLocal 中的对象并不会被自动清理。
    对此,我们已经提交了一个增强请求:尚未发布的缺陷 15975482:AUTOMATICALLY CLEAN OUT THREAD LOCAL TO AVOID MEMORY LEAK。
    自动清理功能计划在 WLS 12.2.1 或以后的版本中实现。对于当前已发布的版本,请务必在程序中确认存放在 ThreadLocal 中的对象在线程归还给线程池之前已被手工清理掉。
    原文链接:WebLogic Server Does Not Clean the Objects in ThreadLocal Automatically (Doc ID 1929223.1)

    展开全文
  • 内存泄漏:如果应用程序正在使用内存,而应用程序在使用完内存后没有释放内存,则会发生内存泄漏内存泄漏可能发生在java堆或本机内存中,并且最终会导致内存不足的情况。 故障排除 请注意,并非所有以下项目都...
  • Java内存泄漏的排查总结

    万次阅读 多人点赞 2018-06-23 10:52:08
    一、内存溢出和内存泄露一种通俗的说法。1、内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。2、内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该释放...
  • 一般有两种情况:1、内存泄露,对象已经死了,无法通过垃圾收集器进行自动回收,通过找出泄露的代码位置和原因,才好确定解决方案;2、内存溢出,内存中的对象都还必须存活着,这说明Java堆分配空间不足...
  • 使用jstat命令查看gc的情况,发现YGC已经停止,一直在FGC,怀疑内存已经泄漏,堆内存中有大量无法回收的对象。 然后查看gc日志,发现年轻代和老年代使用率达到99%,且Full GC后内存没有被回收。确定肯定是有对象...
  • 本文将提供完整的根本原因分析详细信息以及解决影响Oracle Weblogic Server 10.0生产环境的Java堆内存泄漏(Apache OpenJPA泄漏)的方法。 这篇文章还将演示在管理javax.persistence.EntityManagerFactory生命周期时...
  • 前台调用后台时候全部超时,后经排查发现下面的文件,内存泄漏会产生改文件 打开改文件的软件如下 要等好一会才能打开 weblogic线程阻塞超时通过增大阻塞时间 解决了该问题 ...
  • Classloader内存泄露

    千次阅读 2017-06-05 21:29:12
    在你重新部署你的应用程序到应用服务器(比如tomcat、weblogic等)时,你是否也遇到过 java.lang.OutOfMemoryError:PermGen space error? 是否也曾一边抱怨这个应用服务器,一边重启,然后继续你的工作,同时脑子里还在...
  • 一、开发环境: linux3.10.0-327.el7.x86_64 weblgoic:10.3.6 应用环境JDK版本:java version "1.6.0_45" 本地主机JDK版本:java version "1.8.0_211" MAT版本:Eclipse Memory Analyzer Version...二、内存泄...
  • 内存泄漏 - java 堆或本地内存的持续内存增长,最终将导致内存不足状态。调试内存泄漏状态的技术与调试内存不足状态的技术相同。 故障排除 请注意,并非下面所有任务都需要完成。有些问题仅通过执
  • java内存泄露

    2019-11-12 14:58:58
    一,内存溢出和内存泄露 1,内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。 2,内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该释放),但是因为...
  • hprof 不大 泄露 ... 一个现实的案例研究将用于此目的:Weblogic 9.2内存泄漏影响Weblogic Admin服务器。 环境规格 Java EE服务器:Oracle Weblogic Server 9.2 MP1 中间件操作系统:Solaris 1...
  • HPROF –内存泄漏分析教程

    千次阅读 2020-05-05 02:25:39
    一个现实的案例研究将用于此目的:Weblogic 9.2内存泄漏影响Weblogic Admin服务器。 环境规格 Java EE服务器:Oracle Weblogic Server 9.2 MP1 中间件操作系统:Solaris 10 Java虚拟机...
  • 一次恐怖的 Java 内存泄漏排查实战

    千次阅读 2018-07-30 12:56:48
    转载自 一次恐怖的 Java 内存泄漏排查实战 ...1)内存溢出和内存泄露的介绍? 2)如何排查和处理内存泄露?   一、内存溢出和内存泄露 一种通俗的说法。 1、内存溢出:你申请了10个字节的空间,但...
  • weblogic jvm调优

    2014-09-26 10:19:13
    利用jvm查找weblogic内存泄露原因
  • java内存泄露排查总结

    2021-01-18 11:14:24
    1.内存溢出和内存泄露 一种通俗的说法: 内存溢出:你申请了10个字节的空间,但是你在这个空间写入了11个或者以上字节的数据,则出现溢出 内存泄露:你用new申请了一块内存,后来很长时间都不使用了,但是因为...
  • Java内存泄漏

    2019-06-12 19:02:35
    一、内存溢出和内存泄露 一种通俗的说法。 1、内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。 2、内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该...
  • 文章目录Java-排查内存泄漏内存溢出和内存泄露内存溢出产生原因:发生场景此错误常见的错误提示:解决方法内存泄露内存溢出和内存泄露的联系 内存溢出和内存泄露 内存溢出:程序所写入数据的空间大于所申请的空间,...
  • 一、内存溢出和内存泄露一种通俗的说法。1、内存溢出:你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。2、内存泄漏:你用new申请了一块内存,后来很长时间都不再使用了(按理应该释放...
  • 1.内存泄漏memory leak : a.是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 b.指你向系统申请分配内存进行使用(new),可是使用完了...
  • weblogic问题排查思路

    2021-01-08 11:52:45
    内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。 memory leak会最终会导致out of memory! 原因 内存...
  • MetaSpace等使用情况Java堆外内存分析进程原生内存分析(Native Memory)原生内存详细分析内存内容分析引入jemallocjava.util.zip.Inflater.inflateBytes调用栈跟踪Kylin JDBC Driver内存泄露分析结论 问题报告 一日...
  • 企业应用程序中的内存泄漏会导致大量紧急情况。 成本是分析所花费的时间和金钱,生产环境中昂贵的停机时间,压力以及对应用程序和框架失去信心的结合。 非代表性的测试环境,无效的工作负载识别以及不足的测试周期...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,449
精华内容 2,579
关键字:

weblogic内存泄露