• java.lang.OutOfMemoryError: Java heap space


    异常:java.lang.OutOfMemoryError: Java heap space

    问题陈述

       tomcat服务器运行一段时间后,tomcat控制台报错:
       java.lang.outOfMemoryError,java.lang.outOfMemoryError
       然后tomcat服务死掉,只有重启tomcat才能恢复服务

    分析

       1)java虚拟机jvm内存过小
       2)程序不严密,产生太多的垃圾 

    解决方法

        没有足够的内存分配给实际运行的应用程序?两种选择:

        1)使用-Xmx参数增加堆的最大使用内存; 

        2)使用更小的集合/缓冲区/表空间/对象...,以减少所需要的内存总量,及时释放不使用的对象,也就是说,调整对象大小,重新设计、修改应用程序。

    针对第一个原因

       jvm虚拟机的默认Heap大小是64M,可以通过设置其最大和最小值来实现。设置的方法主要是几个.

    1.可以在windows 更改系统环境变量
    加上JAVA_OPTS=-Xms64m -Xmx512m

    2.如果用的tomcat,在windows下,可以在

    C: /tomcat5.5.9incatalina.bat  中加上:

    set JAVA_OPTS=-Xms64m -Xmx256m

    位置在: rem Guess CATALINA_HOME if not defined  这行的下面加合适.

    注意:在apache tomcat6.0版本下找不到上述这个文件,可以打开配置界面,选择java修改初始化内存和最大内存参数如下:

     

    apache_tomcat6.08
    apache_tomcat6.08

    3.如果是linux系统(测试通过)
    编辑  在{tomcat_home}/bin/catalina.sh文件,如 
    vi /opt/apache-tomcat-6.0.14/bin/catalina.sh

    #   JAVA_OPTS       (Optional) Java runtime options used when the "start",
    #    "stop", or "run" command is executed.
    下加入
    export JAVA_OPTS="-server -Xms512m -Xmx1024m"

    注意是半角双引号,保存文件并修改catalina.sh 文件为可执行,

    chmod +x catalina.sh

    重新启动tomcat服务器

    注意

    1)Application Server Xms setting should not be set equal to the Xmx setting.

    2)另外Xmx作为允许jvm使用的最大内存数量,不应该超过物理内存的90%。

    3)若重启tomcat 时出现如下错误:

    [root@linuxserver bin]# sh  shutdown.sh
    Cannot find ./catalina.sh
    This file is needed to run this program

    则需要添加sh脚本文件可执行权限,如下:

    chmod +x /../apache-tomcat6/bin/*.sh 

    针对第二个原因:

       由于jvm产生的垃圾是由我们所写的代码产生的,质量好的代码产生的垃圾少,相反就会产生很多垃圾。由于jvm的最大内存不能无限增大,故增大jvm的最大内存应该是在代码已经达到很优化时才实施的,所以优化程序才是我们最先要做的。

        如何优化程序:
        第一,避免死循环。仔细检查程序,防止出现死循环,这是比较容易检查的。
        第二,可以适当手动回收垃圾 ,如调用方法System.gc()
        第三,应该及时释放各种资源:内存, 数据库的各种连接。 如置对象为null,关闭数据库连接。

    参考

    http://blog.csdn.net/shaokun305/archive/2007/10/25/1843367.aspx

    http://blog.sina.com.cn/s/blog_45a3a50b0100070g.html

    http://sundoctor.bokee.com/viewdiary.177198422.html

    http://www-1.ibm.com/support/docview.wss?uid=swg21160795

    http://www.talented.com.cn/archives/2008/5/20080506161402.html

    Thinking in Java third edition

    原始错误日志

    type Exception report

    message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
     org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:496)
     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:408)
     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
     org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


    root cause

    javax.servlet.ServletException: java.lang.OutOfMemoryError: Java heap space
     org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:855)
     org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:784)
     org.apache.jsp.index_jsp._jspService(index_jsp.java:925)
     org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
     org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
     org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
     javax.servlet.http.HttpServlet.service(HttpServlet.java:803)


    root cause

    java.lang.OutOfMemoryError: Java heap space


    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logs.


    --------------------------------------------------------------------------------

    Apache Tomcat/6.0.10

    设置虚拟机参数后查看进程状态:

    [root@linuxserver bin]# ps -aux|grep java
    Warning: bad syntax, perhaps a bogus -? See /usr/share/doc/procps-3.2.3/FAQ
    root      4647  4.1  9.4 1228952 98016 ?     Sl   10:27   0:19 /usr/java/jdk1.6.0/jre/bin/java -server -Xms512m -Xmx1024m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/app/local/tomcat6.0/conf/logging.properties -Djava.endorsed.dirs=/app/local/tomcat6.0/endorsed -classpath :/app/local/tomcat6.0/bin/bootstrap.jar:/app/local/tomcat6.0/bin/commons-logging-api.jar -Dcatalina.base=/app/local/tomcat6.0 -Dcatalina.home=/app/local/tomcat6.0 -Djava.io.tmpdir=/app/local/tomcat6.0/temp org.apache.catalina.startup.Bootstrap start
    root      4793  0.0  0.0  5516  696 pts/1    S+   10:35   0:00 grep java

  • 相关阅读:
    I.MX6 mkuserimg.sh 使用
    【HighCharts系列教程】五、版权属性——Credits
    【HighCharts系列教程】四、颜色属性——colors
    【HighCharts系列教程】三、图表属性——chart
    【HighCharts系列教程】二、Highcharts结构及API文档
    【HighCharts系列教程】一、认识Highcharts
    higncharts 编辑Highcharts.com链接
    higncharts 去掉Highcharts.com链接
    Highcharts一些属性
    如何用easyui+JAVA 实现动态拼凑datagrid表格
  • 原文地址:https://www.cnblogs.com/peijie-tech/p/3393725.html
Copyright © 2020-2023  润新知