网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.超线程多核心下Java多线程编程技.
.用web.xml控制Web应用的行为.
.Java Servlet 编程及应用(一).
.JBuilder2006破解补丁.
.华为面试的一道题目.
.实现游戏中的简单打字功能.
.Nokia发布新的J2ME开发工具——C.
.使用EclipseSWT控件开发WEB应用.
.浅析数据源在JDBC中的应用.
.JavaI/OAPI之性能分析(下).
.JAVA程序的性能优化.
.AOP在大规模软件开发项目中的应用.
.五个反对向.NET移植Java EJB应用.
.java接口用法学习--------------.
.Java如何共享资源.
.使用Java ME以流形式播放Web服务.
.J2EE的安全体系的应用.
.选择合适的java脚本语言.
.抽象的进步.
.设计自己的DbUnit.

Java内存溢出导致服务器死机之应急解决方案

发表日期:2008-1-5



  最近在做一个网站,使用的编程语言是jsp,Web服务器采用Resin-2.1.6发布,操作系统使用Linux9.0,但是在网站运行过程中发现Java可用内存越来越少,有时程序会报出java.lang.OutOfMemoryError的错误,甚至导致Resin死机。 
    其实这种现象在Java语言中很正常,我们通常称之为Java内存溢出。由于我们在Java程序中声明了好多对象,占用了内存空间,程序结束时没有将这些对象或对象的引用进行释放,从而导致Java虚拟机(JVM)进行垃圾回收(GC)时,不能够回收这些对象。这样,Java所用的内存就会一直增加,直至溢出,进而导致Resin死机。 
    导致Java内存溢出的根本原因是Java程序的不规范或不健壮。因此,从根本上解决Java内存溢出的唯一方法就是修改Java程序,及时地释放没用的对象,释放内存空间。 
    除了这个方法以外,还有一些应急措施,可以临时缓解一下系统的运行。Resin默认情况是死机以后不能访问网站,必须手动重启Resin,但不可能一直看在机器旁边,看Resin有没有死机。所以这里介绍一种让Resin自重启的方法。 
    打开Resin的配置文件resin.conf(一般情况下,该文件在Resin目录的conf文件夹下)。里面有一段内容如下所示: 
  <!-- 
     - Ping to test if the web server is still up.  You can uncomment this 
     - and point it to pages on the webserver that exercise your main 
     - logic (like database Access).  If the GET fails, it will restart 
     - the server.  This will catch deadlocks, but not JDK freezes. 
     - <ping sleep-time=’1m’ retry-count=’3’ retry-time=’1s’> 
     -   <url>http://localhost:8080/ping/ping.jsp</url> 
     - </ping> 
   --> 
    这段内容默认情况下是被注释的。它的功能是让Resin每隔一分钟就测试一下能否访问/ping/ping.jsp文件,测试时间是1s,假如不成功,就重试三次。假如三次都不成功,Resin就自动重启。所以将这段话下半部分(从"<ping "到"</ping>")的注释去掉,然后在Resin的发布目录中新建一个文件夹ping,在ping文件夹下新建一个ping.jsp文件,文件中可以写入简单的一句话,如:<% out.println("Hello world");%>。 
   好,大功告成,启动Resin,这样就不用担心Java内存溢出导致Resin死机了,因为Resin死机后会马上重新启动。 
   当然,这只是应急措施,不是长久之计。假如从长计议,还是要耐心的更改Java程序!!!
上一篇:Java平台I18N 支持概述 人气:800
下一篇:Struts标记库(2) 人气:786
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐