这个星期已经是第二次了,今天早上我来到公司,打开公司网站,发现打不开,进服务器看TOMCAT的运行情况,发现已死掉,报如下错误# 
#   An   unexpected   error   has   been   detected   by   HotSpot   Virtual   Machine: 

#     EXCEPTION_ACCESS_VIOLATION   (0xc0000005)   at   pc=0x60007e8e,   pid=2916,   tid=2236

#   Java   VM:   Java   HotSpot(TM)   Client   VM   (1.5.0_04-b05   mixed   mode) 
#   Problematic   frame: 
#   C     [kmon.dll+0x7e8e] 

#   An   error   report   file   with   more   information   is   saved   as   hs_err_pid2916.log 

#   If   you   would   like   to   submit   a   bug   report,   please   visit: 
#       http://java.sun.com/webapps/bugreport/crash.jsp 
#

解决方案 »

  1.   

    重装,或是用apache+tomcat或是用resin
      

  2.   

    免费的tomcat 是这样的了。
      

  3.   

    看不懂,不过可能是日志问题,看一下tomcat/log下的日志文件多大,把程序中的log级别改成error
      

  4.   

    把tomcat的log贴出来看看有没有定时器之类的,或者调用持久的存储过程?如果log有异常的话,贴出来看看
      

  5.   

    改用resin试试。
    可以查看hs_err_pid2916.log,里面有异常信息。
      

  6.   

    log日志没有多大,很小的,都是一些这个错误ava.io.IOException: Stream closed
    at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:202)
    at org.apache.jasper.runtime.JspWriterImpl.clearBuffer(JspWriterImpl.java:157)
    at org.apache.jsp.pages.showrange_jsp._jspService(showrange_jsp.java:243)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.jasper.servlet.JspServletWrapper.service//这个刚才已经解决了
    java.io.IOException: reading encoded JPEG Stream 
    at sun.awt.image.codec.JPEGImageEncoderImpl.writeJPEGStream(Native Method)
    at sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.java:472)
    at sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.java:228)
    at org.apache.jsp.pages.random_jsp._jspService(random_jsp.java:107)//这个是验证码的,昨天弄了一下,没解决掉。
      

  7.   

    现在把TOMCAT改成resin不现实,TOMCAT都跑这么久了,而且以前也没有出现过这种情况,这个会不会是程序哪写得不好才导致这个呢。
      

  8.   

    An   error   report   file   with   more   information   is   saved   as   hs_err_pid2916.log -----------------------------------
    日志贴出来看看?
      

  9.   


    #
    # An unexpected error has been detected by HotSpot Virtual Machine:
    #
    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x60007e8e, pid=2916, tid=2236
    #
    # Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode)
    # Problematic frame:
    # C  [kmon.dll+0x7e8e]
    #---------------  T H R E A D  ---------------Current thread (0x274b4ca0):  JavaThread "http-80-Processor10" daemon [_thread_in_native, id=2236]siginfo: ExceptionCode=0xc0000005, reading address 0x27a87000Registers:
    EAX=0x003f8e20, EBX=0x2819e46c, ECX=0x00000011, EDX=0x00000001
    ESP=0x2819e0d4, EBP=0x00000011, ESI=0x27a86fff, EDI=0x003f8e29
    EIP=0x60007e8e, EFLAGS=0x00010246Top of Stack: (sp=0x2819e0d4)
    0x2819e0d4:   003f4740 00000000 27a86888 2819e4c4
    0x2819e0e4:   00000011 2a17f198 00853874 2a161770
    0x2819e0f4:   032648c0 2a18a730 00000004 2a179c58
    0x2819e104:   2819e124 2a14cfd8 03258fa4 2a179d38
    0x2819e114:   00000007 2a18ad58 274b4ca0 003f7640
    0x2819e124:   2819e14c 003fbf48 274b4ca0 2a161a38
    0x2819e134:   6d748335 003f70d8 00000006 2a167a08
    0x2819e144:   274b4ca0 2a159c48 2819e18c 003f9fc0 Instructions: (pc=0x60007e8e)
    0x60007e7e:   00 8b f3 8b 9c 24 48 03 00 00 89 4c 24 10 8b e9
    0x60007e8e:   8a 46 01 46 84 c0 0f 85 16 ff ff ff 33 c9 33 f6 
    Stack: [0x28160000,0x281a0000),  sp=0x2819e0d4,  free space=248k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [kmon.dll+0x7e8e][error occurred during error reporting, step 120, id 0xc0000005]
      

  10.   

    应该是outstream的问题,多个线程同时访问一个outstream,当一个关闭了这个stream,就会出现上述异常
      

  11.   

    Stack: [0x28160000,0x281a0000),  sp=0x2819e0d4,  free space=248k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [kmon.dll+0x7e8e]
    ============================================
    感觉好像栈溢出,但java栈溢出应该报 stackoverflow
    而不是jvm崩掉你程序里面是不是java代码和c或c++代码公用了一个栈?
      

  12.   

    也可能是流的处理没做好,但不应该jvm崩掉想不通
      

  13.   

    这个会导致JVM crash吗???我在网上找了一下,它们说这个叫crash
      

  14.   

    这个会导致JVM crash吗???我在网上找了一下,他们说这个叫crash
      

  15.   

    你程序里有没有调用什么别的东西公用一个栈?
    Stack: [0x28160000,0x281a0000),  sp=0x2819e0d4,  free space=248k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [kmon.dll+0x7e8e]总觉得这段jvm崩掉是因为栈引起的,可是栈的话应该出个exception而不是jvm崩掉
    感觉思路有点卡在这里死循环了*(@……%@(#)!#%#
      

  16.   

     原因可能如下如下:资源!!! 没有完全释放!!! 用完后要父NULL 值!! 
    数据库连接顺序关闭!! 
    优化JAVA虚拟机 加入相应的内存参数!
    TOMCAT 在LINUX 下不是很稳定! 
    String 类型使用,不符合规范!!
    不要在数据库中获取大段文本!!! 
    JAVA 不推荐 用String 获取大量信息,造成内存溢出就是它!!!
    每隔一段时间后,重新启动服务器,是必要的!!
    大约2个周左右吧----------
    我遇到的问题,差不多就是这些了! 欢迎指教!!
      

  17.   

     原因可能如下如下:资源!!! 没有完全释放!!! 用完后要父NULL 值!! 
    数据库连接顺序关闭!! 
    优化JAVA虚拟机 加入相应的内存参数!
    TOMCAT 在LINUX 下不是很稳定! 
    String 类型使用,不符合规范!!
    不要在数据库中获取大段文本!!! 
    JAVA 不推荐 用String 获取大量信息,造成内存溢出就是它!!!
    每隔一段时间后,重新启动服务器,是必要的!!
    大约2个周左右吧----------
    我遇到的问题,差不多就是这些了! 欢迎指教!!
      

  18.   

     原因可能如下如下:资源!!! 没有完全释放!!! 用完后要父NULL 值!! 
    数据库连接顺序关闭!! 
    优化JAVA虚拟机 加入相应的内存参数!
    TOMCAT 在LINUX 下不是很稳定! 
    String 类型使用,不符合规范!!
    不要在数据库中获取大段文本!!! 
    JAVA 不推荐 用String 获取大量信息,造成内存溢出就是它!!!
    每隔一段时间后,重新启动服务器,是必要的!!
    大约2个周左右吧----------
    我遇到的问题,差不多就是这些了! 欢迎指教!!
      

  19.   

    原因可能如下如下:资源!!! 没有完全释放!!! 用完后要父NULL 值!! 
    数据库连接顺序关闭!! 
    优化JAVA虚拟机 加入相应的内存参数!
    TOMCAT 在LINUX 下不是很稳定! 
    String 类型使用,不符合规范!!
    不要在数据库中获取大段文本!!! 
    JAVA 不推荐 用String 获取大量信息,造成内存溢出就是它!!!
    每隔一段时间后,重新启动服务器,是必要的!!
    大约2个周左右吧----------
    我遇到的问题,差不多就是这些了! 欢迎指教!!
      

  20.   

    虚拟机异常一般咱们是看不出来啥的
    把你上传图片的那段代码,发上来看看吧,很有可能是多个线程使用了同一个OutputStream的问题!
      

  21.   


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page autoFlush="false"  import="java.util.*,java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*" %><%
    //set Chinese Char 
    //Cody by [email protected];
    //homepage:jiarry.126.com
    request.setCharacterEncoding("GBK");
    response.setCharacterEncoding("GBK");
    response.setContentType("text/html; charset=GBK");
    %>
    <%
    String chose="0123456789";
    //abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    char display[]={'0',' ','0',' ','0',' ','0'},ran[]={'0','0','0','0'},temp;Random rand=new Random();for(int i=0;i<4;i++)
    { temp=chose.charAt(rand.nextInt(chose.length())); display[i*2]=temp; ran[i]=temp;
     }
     
    String random=String.valueOf(display);session.setAttribute("random",String.valueOf(ran));
     %>
    <%        out.clear();
          
            response.setContentType("image/jpeg");
            response.addHeader("pragma","NO-cache");
            response.addHeader("Cache-Control","no-cache");
            response.addDateHeader("Expries",0);
            int width=80, height=30;
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = image.getGraphics();
            //以下填充背景颜色
            Color c = new Color(Integer.parseInt("000000",16));
            g.setColor(c);
            g.fillRect(0, 0, width, height);
           //设置字体颜色
            g.setColor(Color.WHITE);
            Font font=new Font("Arial",Font.PLAIN,20);
            g.setFont(font);
           // g.drawString(random,5,14);
            g.drawString(random,5,20);
            g.dispose();
            ServletOutputStream outStream = response.getOutputStream();
            JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream);
            encoder.encode(image);
     
             outStream.close();
             out.clear();
             out = pageContext.pushBody();   
       %>这个是验证码的代码。
      

  22.   

    我觉得是你在做验证码的处理的时候,没有处理好I/O流,你看看读写验证码图片的时候是不是用了String去写的?
    这样数据大了,就会溢出的。
    建议你把处理验证码的那些代码先屏蔽掉,试试看还会不会崩掉。
      

  23.   

    去掉output.close();直接
    JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(response.getOutputStream());
     encoder.encode(image);
    //outStream.close();
    out.clear();
    out = pageContext.pushBody();   
      

  24.   

    我也遇到了这个问题 Tomcat 进程还在,但就是访问不了WEB页面。。操作一多,或是隔一天就会出现这样的crash问题
      

  25.   

    可以用一个软件跟踪一下tomcat的性能,是否是虚拟机内存太低等,因为tomcat默认的似乎是64m这样当用户多的时候,性能会下降,那样会出现很多意想不到的问题建议修改为512或者1g,用probe跟踪一下
      

  26.   

    Lambda Probe
    不过我刚才没进去他的主站!你试试吧
    google一下Lambda Probe
      

  27.   

    惨了,刚才又报那个错误了,服务器又停了。有没有可能是什么坏了呀???比如TOMCAT,JDK之类的。
      

  28.   

    它报的错误指的是这行的错误
    encoder.encode(image); 
    怎么修改????
      

  29.   


    cat死了,就埋了它,重新买个cat,呵呵!好好喂养cat!
      

  30.   

    我想问一下,我TOMCAT是手工开启的,然后在那里会产生一些错误,比如NULL之类的。像这个会对性能有影响吗?
    严重吗?
      

  31.   

    你这个问题我在用jboss的时候遇到过
    我想这是相同的情况
    那是由于你的加载项太多造成的
    他们超出了tomcat的承受能力
    并不是说启动加载项问题
    而是过程中造成的
      

  32.   

    应该是outstream的问题,多个线程同时访问一个outstream,当一个关闭了这个stream,就会出现上述异常
      

  33.   

    An unexpected error has been detected by HotSpot Virtual Machine解决方法 
    An unexpected error has been detected by HotSpot Virtual Machine:
    #
    #  EXCEPTION_FLT_STACK_CHECK (0xc0000092) at pc=0x00dd0a59, pid=7088, tid=6968
    #
    # Java VM: Java HotSpot(TM) Client VM (1.5.0-b64 mixed mode, sharing)
    # Problematic frame:
    # v  ~SafepointBlob
    #
    # An error report file with more information is saved as hs_err_pid7088.log
    #
    # If you would like to submit a bug report, please visit:
    #   http://java.sun.com/webapps/bugreport/crash.jsp
    #你的计算机是两根内存条吧(多半是现代的)!这两根内存条工作频率可能不一样,或者可能有一根是打磨条,用cpuZ检查一下。简而言之,是内存条质量问题造成的哈。解决方法:
    1、取下打磨条,只用性能可靠的条子。
    2、去买有质量保证的条子(建议买一根大容量的,不要多根装在一起,这样稳定)。
    3、用KeepResident插件,设置eclipse的最大内存为单个内存条的容量。(这种方法可以降低eclipse 的 crash频率,但有时还是会crash)
      

  34.   

    或者是jdk版本的问题,你换个jdk
      

  35.   

    我也是这样的问题,ps -ef |grep tomcat 查看进程还在。但是服务器却无法访问。
    只能杀掉进程,重新启动项目。