当前位置: 首页 > 知识库问答 >
问题:

WebSphere 7-过多的垃圾收集会导致内存不足吗?

刘翔宇
2023-03-14

问题:正在退出本机内存异常,并想知道过多的垃圾收集是否会导致这种情况?此外,关于GC策略或调优的任何建议都会有所帮助。我不确定我所拥有的是否值得改变。

好的参考StackOverflow问题:使用哪个GC策略

规格:

  • 服务器环境:Websphere版本7

初步分析:

  1. 我假设内存泄漏,但是垃圾回收看起来可以回收内存

附加屏幕截图:

堆利用率为1.1-4小时。每个绿色小垃圾桶代表一个主要的垃圾回收机制点。1.2 GC时间花费在上图中。1.3内存溢出异常期间的堆利用率。

例外情况:

EJB抛出了一个意外的(未声明的)EJB异常数据:java。lang.OutOfMemoryError:本机内存在garbagecollection时耗尽。麦可德。在com上测试。国际商用机器公司ws。网络容器。servlet。ServletWrapper。com上的服务(ServletWrapper.java:1658)。国际商用机器公司ws。网络容器。servlet。ServletWrapper。com上的服务(ServletWrapper.java:1598)。国际商用机器公司ws。网络容器。滤器WebAppFilterChain。doFilter(WebAppFilterChain.java:149)位于com。国际商用机器公司ws。网络容器。滤器FilterInstanceWrapper。com上的doFilter(FilterInstanceWrapper.java:190)。国际商用机器公司ws。网络容器。滤器WebAppFilterChain。com上的doFilter(WebAppFilterChain.java:125)。国际商用机器公司ws。网络容器。滤器FilterInstanceWrapper。com上的doFilter(FilterInstanceWrapper.java:190)。国际商用机器公司ws。网络容器。滤器WebAppFilterChain。com上的doFilter(WebAppFilterChain.java:125)。国际商用机器公司ws。网络容器。滤器FilterInstanceWrapper。com上的doFilter(FilterInstanceWrapper.java:190)。国际商用机器公司ws。网络容器。滤器WebAppFilterChain。com上的doFilter(WebAppFilterChain.java:125)。国际商用机器公司ws。网络容器。滤器WebAppFilterChain_com上的doFilter(WebAppFilterChain.java:80)。国际商用机器公司ws。网络容器。滤器WebAppFilterManager。com上的doFilter(WebAppFilterManager.java:908)。国际商用机器公司ws。网络容器。servlet。ServletWrapper。handleRequest(ServletWrapper.java:935)位于com。国际商用机器公司ws。网络容器。servlet。ServletWrapper。handleRequest(ServletWrapper.java:503)位于com。国际商用机器公司ws。网络容器。servlet。ServletWrapperImpl。handleRequest(ServletWrapperImpl.java:181)位于com。国际商用机器公司ws。网络容器。servlet。CacheServletWrapper。HandlerRequest(CacheServletWrapper.java:91)位于com。国际商用机器公司ws。网络容器。网络容器。HandlerRequest(WebContainer.java:875)位于com。国际商用机器公司ws。网络容器。WSWebContainer。handleRequest(WSWebContainer.java:1592)位于com。国际商用机器公司ws。网络容器。频道WCChannelLink。com上的ready(WCChannelLink.java:186)。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。在com上处理歧视(HttpInboundLink.java:453)。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。handleNewRequest(HttpInboundLink.java:515)位于com。国际商用机器公司ws。http。频道入境。impl。HttpInboundLink。com上的processRequest(HttpInboundLink.java:306)。国际商用机器公司ws。http。频道入境。impl。HttpICLReadCallback。在com上完成(HttpICLReadCallback.java:83)。国际商用机器公司ws。ssl。频道impl。SSLReadServiceContext$SSLReadCompletedCallback。在com上完成(sslreadservicecoxt.java:1784)。国际商用机器公司ws。tcp。频道impl。AioReadCompletionListener。FutureCompletionListener(AioReadCompletionListener.java:165)在com上完成。国际商用机器公司木卫一。异步的。抽象的未来。com上的invokeCallback(AbstractAsyncFuture.java:217)。国际商用机器公司木卫一。异步的。未来。com上的fireCompletionActions(AsyncChannelFuture.java:161)。国际商用机器公司木卫一。异步的。未来。已在com上完成(AsyncFuture.java:138)。国际商用机器公司木卫一。异步的。结果德勒。在com上完成(resultandler.java:204)。国际商用机器公司木卫一。异步的。结果德勒。在com上运行EventProcessingLoop(ResultHandler.java:775)。国际商用机器公司木卫一。异步的。ResultHandler 2美元。在com上运行(resultandler.java:905)。国际商用机器公司ws。util。线程池$Worker。运行(ThreadPool.java:1646)

共有1个答案

公羊安怡
2023-03-14

您收到的错误消息表明本机内存有问题,即堆外的内存。垃圾回收器不负责堆外内存,这就是为什么垃圾回收器设置不能影响此错误的原因。过多的垃圾收集不应导致本机内存问题(当然,除非GC中存在错误)。

如果没有更多的信息,很难说是什么导致了这个特殊的错误。我假设您的机器上至少有12 GB的可用RAM?否则,您只是在运行一个对于可用内存来说太大的堆。

Java中可能耗尽本机内存的一些示例

>

直接分配许多ByteBuffers

或者可能没有泄漏,这种行为是您的应用程序所期望的,您只需要允许更大的进程或购买更多的内存。

Troublehoot的第一步是根据可能的流程大小限制检查流程大小。你可能会遇到这样一个极限,而不会出现实际的泄漏。

如果这不是问题,随着时间的推移跟踪进程大小,特别是与可用内存相关的进程大小,看看您是否有“泄漏”行为。

如果您确实认为存在本机内存泄漏,请确定您正在使用哪些使用JNI的库(例如JDBC驱动程序),并尝试用纯Java版本替换它们。另外,检查这些库以及JVM版本和WebSphere版本中的已知内存泄漏错误。

如果失败,您将不得不求助于本机内存泄漏故障排除工具。这是另一个问题。

 类似资料:
  • 如果我有一个垃圾收集器来跟踪分配的每个对象,并在它们不再有对它们的可用引用时立即释放它们,你还会有内存泄漏吗? 考虑到内存泄漏是指没有任何引用的分配,这不是不可能的吗?还是我遗漏了什么? 编辑:所以我认为内存泄漏是您在代码中不再引用的分配。您仍然可以引用的大量累积分配不是我在这里考虑的泄漏。 我也只是在谈论普通的G.C.,已经有一段时间了,但我知道像循环引用这样的案例不会把他们绊倒。我不需要任何语

  • 我从C代码中调用Java方法。每次调用时,我调用AttachCurrentThread,调用后,我调用DetachCurrentThread。 这可以很好地工作,但问题是,我看到了由此导致的ECSESSIVE垃圾收集,即几乎每个通过JNI的调用。VisualVM图形上的小集合基本上都是绿色的!从本机代码到Java的调用速率是每秒数百次。在调用过程中,我还可以看到创建了过多的Java线程,如Thre

  • 问题内容: 我正在读取一个很大的文件,并从每一行中提取文本的一小部分。但是,在操作结束时,我的工作记忆很少。似乎垃圾收集器在读取文件后无法释放内存。 我的问题是:有什么办法释放这种记忆?还是这是JVM错误? 我创建了一个SSCCE来演示这一点。它读取一个1 mb(由于16位编码,在Java中为2 mb)的文件,并从每行中提取一个字符(约4000行,因此大约为8 kb)。测试结束时,仍将使用全部2

  • Kubernetes 垃圾收集器的角色是删除指定的对象,这些对象曾经有但以后不再拥有 Owner 了。 注意:垃圾收集是 beta 特性,在 Kubernetes 1.4 及以上版本默认启用。 Owner 和 Dependent 一些 Kubernetes 对象是其它一些的 Owner。例如,一个 ReplicaSet 是一组 Pod 的 Owner。具有 Owner 的对象被称为是 Owner

  • 问题内容: 简短形式:CMS垃圾收集器似乎无法收集数量不断增加的垃圾;最终,我们的JVM填满,应用程序变得无响应。通过外部工具(JConsole或)强制GC 清理一次。 更新:该问题似乎与JConsole的JTop插件有关。如果我们不运行JConsole,或者在没有JTop插件的情况下运行它,则该行为消失。 (技术说明:我们正在Linux 2.6.9机器上运行32位Sun JDK 1.6.0_07

  • 本文向大家介绍Java垃圾收集,包括了Java垃圾收集的使用技巧和注意事项,需要的朋友参考一下 示例 C ++方法-新增和删除 在像C ++这样的语言中,应用程序负责管理动态分配的内存所使用的内存。当使用new运算符在C ++堆中创建对象时,需要相应地使用delete运算符来处置该对象: 如果程序忘记了delete一个对象而只是“忘记”了该对象,则关联的内存将丢失给应用程序。这种情况的术语是内存泄