Java web应用内存溢出 [已结帖,结帖人:pengble]

进入用户个人空间
加为好友
发送私信
在线聊天
  • pengble
  • 等级:
  • 可用分等级:乞丐
  • 总技术分:0
  • 总技术分排名:327011
  • 结帖率:100.00%
发表于:2008-02-22 21:30:07楼主
我用Java开发的web应用老是出现内存快速增长,最后内存溢出的问题。我用的tomcat5,JDK1.4.2,内存最大设为1498M,有时候也很平稳,但快速增长时,则只增不降,很快就内存溢出了。最近站点登录人数平均一天100人吧,即使几十人也有可能内存溢出。但登录人数多出现这种情况会更频繁。我查阅了很多技术资料,在一些内存开销大的模块都加了System.gc()语句,但都无法解决内存溢出。这次我采用的是四层架构,现将示例代码贴出来,请各位技术高手看看有没有问题。 
1、WebUser类是映射web_user表字段的值对象类。 
2、DbWebUserImpl实现了数据库表记录进行进行基本的增删改的类。 
public class DbWebUserImpl implements DbWebUser{ 
Connection conn = null; 

public Connection getConnection() { 
return conn; 
} 

public void setConnection(Connection connection) { 
this.conn=connection; 
} 

public void updateWebUser(WebUser webUser) throws Exception { 
String strSql="update web_user set account=?,passwd=?,nickname=? where user_id=?"; 
PreparedStatement pstm=null; 
try{ 
pstm=conn.prepareStatement(strSql); 
int i=1; 
pstm.setString(i++,webUser.getAccount()); 
pstm.setString(i++,webUser.getPasswd()); 
pstm.setString(i++,webUser.getNickname()); 
pstm.setInt(i++,webUser.getUser_id().intValue()); 
pstm.executeUpdate(); 
}finally{ 
if(pstm!=null){ 
pstm.close(); 
pstm=null; 
} 
} 
} 
} 
3、WebUserService是服务层,调用数据访问类的方法,表示层(jsp或action)就直接调用WebUserService类的方法 
public class WebUserService extends BaseService{ 
private DbWebUser dbWebUser=DbFactory.getDbWebUser(); 

public boolean updateWebUser(WebUser webUser){ 
Connection conn = null; 
try{ 
conn=DataConnect.getConnection(); 
dbWebUser.setConnection(conn); 
dbWebUser.updateWebUser(webUser); 

return true; 
}catch(Exception ex){ 
ex.printStackTrace(); 
message=ex.getMessage(); 
return false; 
}finally{ 
try{ 
if(conn!=null) conn.close(); 
}catch(Exception ex){ 
ex.printStackTrace(); 
} 
} 
} 
} 
4、表示层(jsp或action)通过调用WebUserService类的updateWebUser方法,来更新web_user表的记录。 
例如: 
WebUserService webUserService=new WebUserService(); 
Authorization authorization=(Authorization)session.getAttribute("authorization"); 

WebUserForm f=(WebUserForm)form; 
WebUser webUser=webUserService.getWebUser(authorization.getAccount()); 
webUser.setNickname(f.getNickname()); 
boolean bret=webUserService.updateWebUser(webUser); 
//webUser=null; 
请问各位高手,如果这里不加webUser=null,会不会造成内存泄漏?但我将很多类似的模块都加上了Object=null,仍不能解决内存溢出。 

这个问题困惑了我很久,一直无法解决。现在论坛提出,请各位老师帮帮忙,非常感谢! 
 
 
问题点数:150 回复次数:22显示所有回复显示星级回复显示楼主回复 修改 删除 举报 引用 回复 
进入用户个人空间
加为好友
发送私信
在线聊天
  •  little06
  • 等级:
  • 可用分等级:掌柜
  • 总技术分:8855
  • 总技术分排名:2281
发表于:2008-02-22 22:05:521楼 得分:0
用jprofile查java使用内存的情况 
如果是Tomcat 
用probe来查看Tomcat的应用情况
 
修改 删除 举报 引用 回复 
进入用户个人空间
加为好友
发送私信
在线聊天
  •  little06
  • 等级:
  • 可用分等级:掌柜
  • 总技术分:8855
  • 总技术分排名:2281
发表于:2008-02-22 22:09:022楼 得分:0
数据库最重要是不要存在死锁 
可以的话,把不是必须的地方换成缓存吧 

还有 内存溢出不一定多是数据库连接的问题 
也可能是其他java代码执行成死循环 或者出错 
造成资源没有释放 
 
修改 删除 举报 引用 回复 
进入用户个人空间
加为好友
发送私信
在线聊天
  •  kokobox
  • 等级:
  • 可用分等级:富农
  • 总技术分:23345
  • 总技术分排名:500
发表于:2008-02-22 23:30:093楼 得分:0
查查有没有连接没有关闭的,有没有定时器之类的 

有没有输入输出流忘记关闭的。仔细查查。 

 
修改 删除 举报 引用 回复 
进入用户个人空间
加为好友
发送私信
在线聊天
  •  pengble
  • 等级:
  • 可用分等级:乞丐
  • 总技术分:0
  • 总技术分排名:327011
发表于:2008-02-23 09:36:094楼 得分:0
谢谢上面几位的回复,现说明如下: 
1、绝对没有任何地方连接没有关闭。我用三层架构做的另一套系统就好好的,有时候即使内存升至600M也会降下来,但现在我用四层架构做的这套系统,升上去就降不下来了。连接没有关闭这类问题一定做过认真的检查,否则不会到这儿来提问了。 
2、我用Log4J将用户访问表示层和服务层的信息记录到日志文件中,发现内存猛增的时候用户的操作还是跟平时没什么区别,也看不出问题出在哪儿。如果是某些java代码执行造成死循环,应该用什么方法可以诊断出来。 
3、曾在服务器上装过jprofile这个软件,但应用一启动,发现装上这个软件内存消耗太大。我在本地用jprofile这个软件也看不出来程序哪儿有问题。
 
修改 删除 举报 引用 回复 
进入用户个人空间
加为好友
发送私信
在线聊天
  •  pengble
  • 等级:
  • 可用分等级:乞丐
  • 总技术分:0
  • 总技术分排名:327011
发表于:2008-02-23 17:39:335楼 得分:0
请各位技术高手帮帮忙,非常感谢!
 
修改 删除 举报 引用 回复 
进入用户个人空间
加为好友
发送私信
在线聊天
  •  yill
  • 等级:
  • 可用分等级:长工
  • 总技术分:5
  • 总技术分排名:256989
发表于:2008-02-24 02:02:426楼 得分:0
一般内存泄露的原因都会在线程操作、数据库或者文件等操作上面 。 

要定位的话可以借助工具,比如你说的 jprofile 或者 optimize,不过工具对原有系统的影响是很大的。 

这种情况下,可以打开java 的 gc 参数,关注堆内存是否有持续增加。 

程序运行过程中可以打 java 进程的堆栈信息分析线程 情况,看是否有线程等待、死锁等情况。 

另外,内存溢出一般会有异常堆栈或者core文件吧,这个也要好好分析一下。
 
修改 删除 举报 引用 回复 
进入用户个人空间
加为好友
发送私信
在线聊天
SpringBoot3 + OAuth2.1实战:5分钟搞定授权码模式(含完整代码) 本文详细介绍了如何在SpringBoot3环境中快速实现OAuth2.1的授权码模式,包括环境配置、核心安全实现及完整代码示例。通过Spring Security集成,开发者可以高效构建企业级安全认证系统,解决版本兼容性问题,提升开发效率。 阅读详情

相关推荐

手把手教你用FreeModbus RTU协议栈实现STM32与PLC通信(附Keil工程)

本文详细介绍了如何使用FreeModbus RTU协议栈在STM32上实现与PLC的工业通信。从环境搭建、工程配置到关键移植接口实现,提供了Keil工程模板和调试技巧,帮助开发者快速掌握Modbus RTU通信技术,适用于工业自动化领域的设备间通信需求。

weixin_42549037的博客 419

Java web项目内存_JAVA WEB项目内存溢出

在部署JAVA WEB项目的时候,随着项目的越来越大,会出现以下的内存溢出情况:1.java.lang.OutOfMemoryError: PermGen space全称是Permanent Generation space,是指内存的永久保存区域。解决方法也一定是加大内存。出现这种异常的原因是:用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域...

weixin_33617670的博客 502

若依框架整合Flowable:从零构建企业级流程中心

本文详细介绍了如何将若依框架与Flowable工作流引擎整合,构建企业级流程中心。通过环境配置、依赖添加、数据库设置等核心步骤,实现流程定义管理、任务处理服务等关键功能,并结合实际案例展示请假审批流程的实现与动态表单集成。文章还提供了性能优化和生产建议,帮助开发者高效构建稳定可靠的工作流系统。

weixin_28365523的博客 230

Java核心实操:内存溢出 实战、内存泄漏实战

实操1:使用JVisualVM分析内存溢出OOM,实操2:使用JVisualVM分析内存泄漏

架构师尼恩 4072

YOLO11-Seg优化:卷积变体系列篇 | 动态蛇形卷积(Dynamic Snake Convolution) | ICCV2023

动态蛇形卷积(Dynamic Snake Convolution),增强微小特征提取能力,引入到YOLO11-Seg,与C3k2结合实现二次创新

会AI的学姐 371

【txt文本加密】使用 cryptography 库实现加密和解密

cryptography 库是一个强大的 Python 库,用于实现加密和解密功能。它提供了各种加密算法,包括对称加密、非对称加密、哈希函数等。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2667

web 应用内存溢出问题

现象是 web应用不能访问,查看tomcat日志: PermGen space的全称是Permanent Generation space,是指内存的永久保存区域, 这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中, 它和存放类实例(Instance)的Heap区域不同,GC(GarbageCollecti

xigdcsdn的专栏 854

踩坑实录:C#上位机YOLOv11从2FPS到45FPS,ONNX Runtime GPU加速全解析

算力迁移:将推理核心从CPU迁移至GPU(核心提速手段);内存复用:避免重复分配/释放内存,减少GC压力;维度固定:工业场景固定输入分辨率,关闭动态维度;资源限制:合理限制GPU/CPU/内存占用,避免资源耗尽;解耦设计:推理线程与UI线程解耦,避免跨线程问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 573

Java Web项目内存溢出问题排查

线上的一个spring boot项目每两个周会出现系统卡死,不能正常提供api服务,重启后恢复。经过查看日志发现大量的“java.lang.OutOfMemoryError: GC overhead limit exceeded”日志。这个异常的官方解释: Exception in thread thread_name: java.lang.OutOfMemoryError: GC Overhead limit exceeded Cause: The detail message “GC overhead

Cmainlove的专栏 1638

移动支付APP(仿支付宝)

Toast.makeText(PayActivity.this, "支付失败:" + payResponse.getMsg(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败:" + t.getMessage(), Toast.LENGTH_SHORT).show();Toast.makeText(PayActivity.this, "支付失败", Toast.LENGTH_SHORT).show();

寒寒豆豆软件公司的博客 135

OpenCV实现物体尺寸的测量

物体尺寸测量的思路是找一个确定尺寸的物体作为参照物,根据已知的计算未知物体尺寸。如下图所示,绿色的板子尺寸为220*300(单位:毫米),通过程序计算白色纸片的长度。

qq_53545309的博客 9158

Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

转载自:http://blog.sina.com.cn/s/blog_701c951f0100n1sp.html  相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识。 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识。j

在梅边的专栏 3259

基于Simulink的PR(比例谐振)控制器在单相整流中的应用

本文详细介绍了基于Simulink的单相整流系统中PR(比例谐振)控制器的设计与实现方法。首先阐述了PR控制器相较于传统PI控制器的优势,能够有效消除交流信号跟踪中的稳态误差。接着系统讲解了PR控制器的传递函数原理、实用型设计(带带宽)及参数整定方法。通过Simulink建模步骤,包括主功率电路搭建、电压外环PI设计、电流指令生成、PR控制器实现(推荐MATLAB Function方法)和SPWM调制等关键环节。仿真对比显示PR控制在电流跟踪精度(THD仅1.9%)、功率因数(0.998)和动态响应(突变恢

amy_mhd的博客 690

java web 内存泄露_java: web应用中不经意的内存泄露

前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下:1、定义一个类Apppackage com.cnblogs.yjmyzz.web.controller;import java.util.Date;public class App {boolean isRun = false;public App() {isRu...

weixin_36048838的博客 239

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java web 内存溢出程序如何调整_Java web应用内存溢出

我用Java开发的web应用老是出现内存快速增长,最后内存溢出的问题。我用的tomcat5,JDK1.4.2,内存最大设为1498M,有时候也很平稳,但快速增长时,则只增不降,很快就内存溢出了。最近站点登录人数平均一天100人吧,即使几十人也有可能内存溢出。但登录人数多出现这种情况会更频繁。我查阅了很多技术资料,在一些内存开销大的模块都加了System.gc()语句,但都无法解决内存溢出。这次我采...

weixin_29074409的博客 321

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Tomcat运行Java Web内存溢出总结

转自:http://my.oschina.net/leejun2005/blog/82941  如果JVM里运行的程序, 它的内存堆和持久存储区域的都满了,这个时候程序还想创建对象实例的话,垃圾收集器就会启动,试图释放足够的内存来创建这个对象。这个时候如果垃圾收集器 没有能力释放出足够的内存,它就会抛出OutOfMemoryError内存溢出错误。   SUN JVM的内存管理方式

技术人宝哥 2199

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Tomcat工作原理 、JVM内存溢出及合理配置、配置文件详解

Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了,所以调用它的 addChild 将会报错。

单向街的夏天 3212

Java测试当前应用所占用的内存示例

package test; import java.util.HashMap; import java.util.Map; public class TestMemory { public static void main(String[] args) { System.gc(); long total = Runtime.getRuntim...

weixin_30566063的博客 360

关于java web程序运行报内存溢出异常问题解决

问题:我换了一台电脑后,从git上拉取了代码,所以代码不可能出错,tomcat是从原电脑上复制过来的,也不会出错,myeclipse用的新的,但项目跑起来后,进入几个网页后就报内存溢出问题,根据网上的回答,一一排除问题,只有可能是内存设置问题。归纳:java项目运行需要有三个部分配合:JDK、myeclipse、tomcat。当程序出现堆栈溢出的问题时,除了是网上说的几种问题外,还有可能是这三个部...

HYaLYJ的博客 846

javaWeb项目内存溢出解决方案

如何排查项目内存溢出的问题出在哪呢? 最近在运维一个项目中,用户提出在使用图片上传或提交的时候总会出现页面无响应;为了排查问题,进入后台打开tomcat的startup.bat运行项目;发现项目会自动报内存溢出,接下来,一阵分析后,得出三个结论: 1.服务器内存不够?(显然不可能,打开资源管理器,内存占用率不到一半) 2.代码不规范,引起的内存溢出?(排除,项目已经运行了一年时间) 3.t...

desperado1314的博客 2607

内存分析与内存泄漏定位

内存分析与内存泄漏定位是笔者现代 Web 开发工程化实践之调试技巧的一部分,主要介绍 Web 开发中需要了解的内存分析与内存泄露定位手段,本部分涉及的参考资料统一声明在Web 开发界面调试资料索引。 无论是分布式计算系统、服务端应用程序还是 iOS、Android 原生应用都会存在内存泄漏问题,Web 应用自然也不可避免地存在着类似的问题。虽然因为网页往往都是即用即走,较少地存在某个网页长期运...

weixin_33743703的博客 313

JP1名词解释

http://soft.yesky.com/0/3068500.shtml JP1名词解释 2007-02-05 16:53作者:佚名出处:天极网责任编辑:hwb <!--广告-->     JP1/Base   提供事务服务功能的程序。可以控制服务的起动顺序,并发送和接收JP1事件。JP1/Base是JP1/IM - Console,JP1/A...

mlxia的专栏 2686

(转)日语的文字编码

http://blog.youkuaiyun.com/jackyren007/archive/2008/07/31/2743779.aspx 日语的文字编码 收藏 1、常用编码日语的文字编码主要是Shift_JIS、EUC-JP、ISO-2022-JP这三种。(1)Shift_JIS主要是Windows和Macintosh使用的文字编码。Shift_JIS 的文字集合基本是按照JIS X 0208...

mlxia的专栏 1520
上一篇: mysql的临时表不支持自连接
下一篇: Java 内存溢出的可能性汇总
mlxia
博客等级 码龄26年 28粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值