0 0

java因创建太多线程内存溢出?请大家帮我分析下这张jconsole的图示结果10

web容器用的是tomcat8,jdk8,都是64位的。 在应用中有一个循环来调用ICE接口,使用的是ICE的库,调用的时候会创建大量的线程,到了一定的时候就会报错,tomcat退出。在tomcat bin目录下生成hs_err_pidxxx.log文件,开头错误提示:

# # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (malloc) failed to allocate 1817056 bytes for Chunk::new

-------------------- 查了下,应该是没有内存创建更多的线程了。

下面截一张jconsole的图,保留了tomcat退出时的vm状况,里面还有我的tomcat的启动参数等信息。我的问题是,这里显示的启动的线程总数显然是太大了,但活动线程只有43个,那些不活动的线程是否没有回收?我在每次循环结束都调用gc(),并且观察到堆内存被较好地控制在70M左右,不往上涨了,说明gc()是起作用了,但线程为什么没有回收?这种局面有什么办法可破?

 



 

 

 

2014年6月23日 10:13
  • 大小: 107.5 KB

8个答案 按时间排序 按投票排序

0 0

这么多线程哪里来的?一个进程来说,这么多线程只能起反作用

2014年6月30日 18:02
0 0

没有HEAP dump很难说是什么地方出现问题

2014年6月24日 22:34
0 0

一万多个线程,而运行状态才40多个,建议看一下这部分!

2014年6月24日 09:58
0 0

1,你的tomcat支持同时运行的线程数量有限,但并不会忽略你创建的其他线程,其他线程只是处于等待状态。
2,每创建一个线程,jvm都会分配一定的内存空间给它
3,从你提供的信息可以看出,你的程序在不停的创建线程,导致最后内存溢出,由于大多数的线程是处于等待状态,所以这些线程分配的内存空间是被浪费掉的。
4,如果你怀疑有线程没有被回收,那么只有可能是一种情况,你的线程没有正常结束,也就是说有死锁的现象出现,那么这属于是代码逻辑的问题。
5,如果你想解决这个问题,可以使用线程池来管理你的线程,重复利用系统资源。
希望对你有所帮助。

2014年6月24日 00:19
0 0

内存溢出有好几种,包括堆溢出,栈溢出,Perm溢出等等,建议先借助工具看看到底是那块溢出,jprofile不知道能不能看,建议你试试。根据你截图看至少不是堆溢出。

另外我看你JVM参数里面有个-Xss716k,我查了下是设置每个线程的Stack大小,我不知道这个参数是不是有影响,建议可以做个试验。把这个参数调大,然后观察tomcate宕机的时间有没有延长。如果有延长,建议调大或者干脆别设了。

再说线程的事,你启动的线程很多,但是活动的线程很少,需要考虑下是否有死锁的情况,建议看下core dump文件是否存在线程死锁。

2014年6月23日 23:27
0 0

记得ICE的使用中,单例即可,还有看看每次执行完的时间,是不是没有超时设置等,线程池设置等。丢弃策略

2014年6月23日 19:57
0 0

直接内存溢出。

可能会有内在泄漏

参考下这个
http://blog.csdn.net/renxianzuo/article/details/6824716

2014年6月23日 14:41
0 0

垃圾回收组合执行回收时间非常长,应该存在问题。
参考这篇文章,看看是否对你有用。
http://blog.sina.com.cn/s/blog_72ef7bea0101cthq.html

2014年6月23日 13:40

相关推荐

    内存溢出配置,内存溢出配置

    内存溢出配置是IT行业中,尤其是在Java应用开发与运维领域中的一个重要话题,它涉及到系统资源管理、性能调优以及故障排查等多个方面。标题与描述中重复提到“内存溢出配置”,这表明了对这一主题的关注与重视。接...

    内存溢出解决

    ### 内存溢出解决 #### 背景与概念 在Java开发中,内存管理是确保应用程序稳定运行的关键因素之一。当程序运行时分配给它的内存空间不足以支撑其正常运行时,就会出现“内存溢出”(Out of Memory Error,简称OOM...

    JConsole(观察分析Java程序的运行)

    ### JConsole:观察与分析Java程序的运行 #### 一、JConsole简介 JConsole是自Java 5开始集成在JDK中的一个强大的性能监视和故障排除工具。它能够帮助开发者和运维人员监控Java应用程序的运行状态,并进行性能分析...

    Jconsole监控Java应用

    Jconsole监控Java应用 Jconsole是JDK自带的监控工具,可以对Java应用程序进行监控。本文将介绍通过Jconsole工具对Java应用程序进行监控,包括环境准备、操作步骤和监控内容等。 环境准备 要使用Jconsole对Java...

    如何利用 JConsole观察分析Java程序的运行,进行排错调优

    JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行。您可以轻松地使用 JConsole(或者,它更高端的 “近亲” VisualVM )来监控 Java 应用程序性能和跟踪 Java 中的代码。

    关于(java heap space)内存溢出的解决办法

    在Java编程中,"java heap space"内存溢出是一个常见的问题,它通常发生在应用程序尝试分配超过JVM堆内存限制的对象时。这个问题对于任何Java开发者来说都至关重要,因为如果不妥善处理,可能会导致程序崩溃。以下是...

    解决jetty8内存溢出版本

    综上所述,解决Jetty 8内存溢出问题需要综合考虑JVM参数配置、代码优化、资源管理策略以及监控与分析等多个层面。通过对上述知识点的理解和实践,可以有效地预防和解决Jetty 8的内存溢出问题,提高服务的稳定性和...

    Java内存溢出问题

    Java内存溢出问题,是Java开发中常见的性能问题,它发生在程序运行时,由于系统无法分配足够的内存资源来满足程序的运行需求,导致程序异常终止。深入理解Java内存溢出,有助于我们优化程序,提高系统稳定性。下面...

    现代多线程 JAVA和c++多线程实现 测试和调试

    在现代软件开发中,多线程技术已经成为必不可少的一部分,特别是在JAVA和C++这样的高级编程语言中。多线程允许程序同时执行多个任务,提高应用程序的响应性和效率。本资源主要探讨了如何在JAVA和C++中实现多线程,...

    JVM内存溢出

    【JVM内存溢出】指的是Java虚拟机在运行过程中,由于内存分配不当或者内存使用过度导致内存无法正常管理,从而抛出错误的情况。这通常会导致应用程序崩溃或性能急剧下降。在Tomcat这样的Java应用服务器中,内存溢出...

    Java堆栈内存分析笔记

    Java堆栈内存分析是Java编程中的重要概念,它关乎程序的性能优化和内存泄漏的预防。堆和栈是Java内存管理的两个主要区域,它们各自承担着不同的职责。本笔记将深入探讨这两个区域的工作原理以及如何进行有效的分析。...

    使用Jconsole对java的内存使用情况(JVM)进行监控参照.pdf

    使用Jconsole对Java的内存使用情况(JVM)进行监控参照 JDK1.5提供了JMX remote的管理工具Jconsole,可以监控Java运行程序的内存使用情况、活动线程数量、类装载的数量、MBeans的状态、虚拟机的各种信息等,还可以...

    如何利用 JConsole观察分析Java程序的运行.pdf

    JConsole 可以分析 JAVA 程序的性能,包括内存使用情况、线程使用情况、类装载情况等。可以手动进行 GC 查看内存变化,并且可以保存数据到 CSV 文件,以后可以使用其他工具来分析这些数据。 七、其他功能 JConsole...

    jconsole使用手册

    jconsole是Java Development Kit(JDK)5.0中自带的一个性能监控工具,用于监控Java运行状态、线程数、进程数、对象、JVM内存信息、时间等性能信息。该工具可以帮助开发者和管理员实时监控Java应用程序的运行情况,...

    Java线程Dump分析工具jstack解析及使用场景

    Java线程Dump分析工具jstack是Java开发人员和运维人员常用的诊断工具,它能够帮助我们了解Java应用程序中线程的状态,以及线程的执行轨迹。本文将深入解析jstack的使用方法及其在不同场景下的应用。 jstack命令的...

    解决JAVA内存溢出问题

    在探讨如何解决JAVA内存溢出问题时,我们首先需要理解几个关键的概念,包括JVM(Java虚拟机)、Tomcat服务器、以及与之相关的内存参数设置。本文将详细解析标题及描述中提到的知识点,帮助读者深入理解JAVA内存管理...

    java jvm Jconsole

    ### Java JVM JConsole详解 #### 一、JConsole简介与基本使用 JConsole是一个由Oracle提供的免费工具,作为Java Development Kit (JDK)的一部分被包含其中。它是一个基于Java Management Extensions (JMX)的图形...

    java内存机制及异常处理

    解决这些问题的方法包括但不限于调整JVM参数以增大内存分配、优化代码以减少内存占用、及时关闭不再使用的资源(如数据库连接)以及使用内存分析工具检测和修复内存泄漏。正确理解和运用Java内存机制以及异常处理...

    内存溢出

    1. **内存分析工具**:例如Valgrind、LeakCanary、MAT(Memory Analyzer Tool)等,可以帮助开发者定位内存泄漏或过度内存消耗的问题。 2. **性能监视器**:操作系统提供的性能监视工具,如Windows的任务管理器或...

Global site tag (gtag.js) - Google Analytics