0 0

内存溢出的困惑5

我们的后台项目刚做了数据库连接池和其他的一些优化,但是现在出现一个问题,就是项目一启动,内存不断增大,直到内存溢出。请问这是和什么有关呢??



2012年11月21日 11:09
  • 大小: 60.5 KB

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

0 0

采纳的答案

导致内存溢出的原因有很多,但一般情况不外乎两种:
(1) jvm初始化是给的内存太小;
(2) 应用程序创建的对象太庞大,使jvm堆栈上升;
(3) 查询数据时,因数据量太大,造成内存使用率过高;

从楼主给的图片来看,内存到70Mb,tomcat启动是配置的jvm有点小,tomcat默认启动内存为125Mb,一般小型项目应付的了,但是大型项目就得增加内存;
楼主可尝试增大jvm的大小,
参考下
http://zhengshuo.iteye.com/blog/1531005

2012年12月05日 15:33
0 0

将内存使用情况导出来进行分析,看看是不是程序的问题
比如大的循环中使用String来接收数据等等

2013年3月18日 11:27
0 0

建议你专注于对象的循环引用这一块,看看是否有这方面的错误,可以用JProfier工具查找引用情况。

2013年1月06日 13:12
0 0

检查一下项目逻辑吧,看看有没有逻辑上的疏忽,资源在用过之后没有关闭。导致在运行过程中 没及时关闭的资源越来越多 最终导致内存溢出

2012年12月04日 16:41
0 0

通过使用内存监控工具。例如jprofile来监控内存,启动时做上内存标记。才内存试图查看是那个对象占有内存比较大。检查业务逻辑,是否有资源未回收情况,例如,io,数据连接等,添加jvm参数-XX:+HeapDumpOnOutOfMemoryError,生成内存影像,分析。

2012年12月03日 17:48
0 0

要看下内存一直增大是在启动过程中还是在启动完后接受请求的时候。

如果是启动过程中一直增大是正常的(可能在不断地加载类工业基础初始化一些东西),如果溢出了你就加大内在参数。

如果启动完后停止在一个固定的内存值,然后随着接受请求数增加内存也不断加大就可以确定是内存泄漏了。可以用jProfiler检查。

2012年11月22日 09:49
0 0

你可以先增大一下服务器的堆内存试试,如果项目启动内存还是溢出的话,那应该是程序的问题,可以考虑用压力测试工具检查一下,看看大概那个部分由问题,然后再检查代码,估计是有些变量没有释放导致的

2012年11月22日 09:15
0 0

堆内存只增不减应该是没有进行垃圾回收,可以调整下jvm的配置!

2012年11月22日 09:13
0 0

哥们,用的什么工具查看的

2012年11月21日 23:29
0 0

查代码;查session;描述应用场景;
一些提示:
http://www.iteye.com/problems/87806

2012年11月21日 22:39
0 0

一个图,看不出什么东西。建议出个详细点的!

2012年11月21日 21:17
0 0

查查静态变量..list or sringbuilder.这些玩意...

2012年11月21日 19:33
0 0

先确定是否有内存溢出 可以手动垃圾回收看是否可以回到初始值 如果可以回到初始值 代码本身是没问题的 如果回不去 那么代码肯定有问题 可以通过以下方式查找问题代码
1. 查看是否有静态集合 没有手动释放。
2.数据库连接是否关闭 文件流是否关闭。
3.是否覆盖了父类的finalize() 方法。
我之前遇到过一次内存溢出 是应为覆盖了finalize() 方法 在该方法中关闭数据库连接 和文件流造成的

2012年11月21日 17:50
0 0

应该是某处代码编写得有问题,看下是不是有大型报表之类的

2012年11月21日 16:57
0 0

看一下你容器在启动时设定xms,xmx这些参数,如果你jvm分配的内存超过你机器物理内存的占比也会报错的。

2012年11月21日 13:16
0 0

建议用JProfier监控一下哪些对象没有被释放(被其他地方引用了)。

2012年11月21日 13:04
0 0

一半来说 内存溢出是创建大对象导致的,可以看下你项目中是否有创建大数组类型的对象。如果有的话,注意要设置空建议JVM回收或者使用其他替代方案。如果找不出来的话,可以使用jdk的bin目录下的jmap下载快要down掉的时候的内存对象图,然后使用指定的软件(如eclipse的一个叫analyser的,貌似)分析,图形化大对象,然后基本上就可以查询出大对象的方位了,同时通过jstack来查线程信息。基本上可以定位到是什么对象持续增加导致未回收而内存溢出的。

2012年11月21日 12:59
0 0

在即将溢出的时候,用jstack查看以下有哪些线程在工作。这样的目的是定位哪里的代码导致的内存溢出。

2012年11月21日 12:13
0 0

检查一下项目逻辑吧,看看有没有逻辑上的疏忽,资源在用过之后没有关闭。导致在运行过程中 没及时关闭的资源越来越多 最终导致内存溢出

2012年11月21日 11:49

相关推荐

    C++内存管理详解.doc

    C++内存管理的复杂性使得初学者常常感到困惑,但对高手而言,熟练掌握内存管理能带来更高的性能和程序的稳定性。 C++的内存被分为五个区域: 1. **栈(Stack)**:用于存储函数调用时的局部变量,遵循后进先出(LIFO)...

    Torry的困惑(提高型)1

    8. **时间限制和内存限制**:题目中提到的时间限制是1.0s,意味着程序必须在1秒内完成运行,内存限制是512.0MB,意味着程序运行过程中最大占用内存不能超过512MB。因此,在编写代码时,需要考虑到算法的效率,避免...

    全局变量、局部变量、静态变量即内存管理

    4. 碎片问题不同:栈只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个...

    谈谈对Golang IO读写的困惑

    但需要注意,ioutil.ReadFile会一次性将整个文件内容加载到内存,对于大文件可能会导致内存溢出。 3. **os库**: os库用于与操作系统进行交互,包括文件和目录的操作。例如,os.Open用于打开文件,os.Create用于...

    Pytorch GPU显存充足却显示out of memory的解决方式

    这种情况可能会让人困惑,因为直观上,既然显存足够,就不应该出现这样的问题。本文将探讨这个问题的可能原因以及解决方法。 首先,我们要理解“out of memory”错误并不一定意味着物理GPU内存不足。PyTorch在运行...

    ARM内核单片机进入 hardfault的问题查找

    当处理器检测到非法指令执行、内存访问错误、堆栈溢出或其他硬件故障时,就会进入HardFault状态。这个状态使得处理器停止执行当前任务,转而进入异常处理流程,以便诊断问题。 **HardFault的常见原因:** 1. **...

    C语言实例解析源码.rar

    源码中可能包含内存泄漏或内存溢出的例子,这提醒我们在实际编程时要注意内存的有效管理。 总之,《C语言实例解析源码》是一个宝贵的教育资源,它涵盖了C语言的诸多关键知识点。通过研究这些源码,不仅可以巩固理论...

    软件开发环境.pptx

    在这里,我们将`short`类型的地址强制转换为`int`类型,并修改了该地址处的值,这可能导致数据溢出或错误的内存访问。 接下来,我们观察反汇编代码,以进一步了解其内部工作原理。例如,代码中的`lea`指令用于计算...

    c语言坑爹大冒险.rar

    然而,对于初学者而言,C语言的某些特性可能会带来一些困惑和挑战,这些挑战有时被幽默地称为“坑爹大冒险”。在这个压缩包文件“c语言坑爹大冒险.rar”中,很可能是包含了一系列有关C语言学习过程中的常见问题和...

    c语言坑爹大冒险.zip

    数组下标越界、忘记在字符串末尾添加空字符('\0')、错误地使用`strcpy`和`strcat`可能导致内存溢出。了解数组的本质是连续的内存空间,以及字符串是字符数组的特例,是避免这类错误的关键。 还有,预处理器宏的滥用...

    Java十分钟速懂知识点?引用

     闲来没事在日志中瞟见了个OutOfMemoryError错误,不由得想到前一段时间看到一篇面经里问到Java中是否有内存泄露,这个很久以前是留意过的,大体记得内存溢出和内存泄露是不同的,至于各自都有哪些情况,那个…额...

    初学C的难点范例

    10. **数组越界和内存溢出**: 这些是常见的运行时错误,初学者要懂得如何避免。例如,正确计算数组索引,避免在动态内存分配中请求过大的内存块。 通过"Samples for VC6"中的实例,你可以亲手实践这些概念,通过...

    彻底搞定C指针

    其中,指针是C语言最强大的特性之一,也是许多初学者感到困惑的地方。"彻底搞定C指针"这个主题旨在帮助你深入理解并熟练掌握这一核心概念。 一、指针基础 指针是C语言中存储内存地址的变量。它存储的是另一个变量的...

    c语言常见问题综合大全

    以上是对C语言常见问题的概述,这些知识点对于理解和解决C语言编程中的困惑至关重要。通过深入学习和实践,你可以逐步克服这些问题,成为C语言编程的高手。"C语言常见问题集.pdf"这本书籍应该会提供更具体的问题实例...

    C,C++经典问题.docx

    - `memcpy`:用于将源内存区域的内容完整复制到目标内存区域,可以指定复制的字节数,避免内存溢出。 - `strcpy`:专门用于字符串的复制,遇到空字符('\0')结束。使用时要注意目标字符串是否有足够的空间。 5. **...

Global site tag (gtag.js) - Google Analytics