我需要从后台通过命令获取一个操作的状态以及进度,通过刷新jsp来获取这些信息(3秒每次),过了一个时间之后,发现用pstree看到有1000多个java子进程之多,并且报IOException:too many open files,请问怎么解决呢?很急,希望大虾救命!

解决方案 »

  1.   

    对了,web server是tomcat5, jdk1.4.2_11
      

  2.   

    是不是你的jsp使用了一些资源,例如文件句柄,没有及时关闭
      

  3.   

    <%@ page contentType="text/html; charset=UTF-8"%>
    <%@ page import="com.xxx.xxx.ProgressData"%>
    <%@ page import="com.xxx.xxx.util.BundleString"%>
    <%@ page import="com.xx.common.Node"%>
    <%//@ page isThreadSafe="false" %>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt"%>
    <fmt:setBundle basename="resource" var="res"/>
    <% System.out.println("-------------Begin progress.jsp----------------");
    System.out.println("-------------progress.jsp  Thread name is: "+ Thread.currentThread().getName()+"--------------");

    ProgressData pd = new ProgressData();
    Node node = pd.getProgress();

    String pg = node.getValue(pd.PROGRESS);
    int progress = (pg == null || "".equals(pg)) ? 0 : Integer.parseInt(pg);

    String msg = node.getValue(pd.PROMPT);
    String status = node.getValue(pd.STATUS); System.out.println("-------------End progress.jsp----------------------");

    try
    {
    if (msg.indexOf("###") > -1)
    {
    String[] msgTmp = msg.split("###");
    msg = BundleString.getResBundleString(request, msgTmp[0]) + msgTmp[1];
    }
    else
    {
    msg = BundleString.getResBundleString(request, msg);
    } }
    catch(Exception e)
    {

    }

    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Progress Data</title>
    <link href="css/style.css" rel="stylesheet" type="text/css"><script language="javascript">

    function init()
    {
    <%if (progress == 100){%>
    parent.updateStatus = false;
    <%}%>
    parent.updateProgressBar('setupcopy', '<%=progress%>', 3, 'false', '1', '1','', '');
    }var msg = "<%=msg%>";

    parent.document.getElementById("Message").innerHTML = msg;<%if (progress > 4 && progress < 95){%>
    parent.document.getElementById("ProgressNote").innerHTML = "<fmt:message bundle='${res}' key='progress.copyfailnote'/>";
    <%}%><%if (progress ==98){%>
    parent.document.getElementById("ProgressNote").innerHTML = "<fmt:message bundle='${res}' key='progress.grubnote'/>";
    <%}%><%if (progress == 100){%>
    parent.document.getElementById("ProgressNote").innerHTML = "<fmt:message bundle='${res}' key='progress.finishaction'/>";
    parent.document.getElementById("finishDiv").style.visibility = "visible";
    <%}%><%if ("die".equals(status.toLowerCase())){%>
    parent.document.getElementById("dieDiv").style.visibility = "visible";
    <%}%>
    //alert(msg);
    </script>
    </head>
    <body onLoad="javascript:init();">
    </body>
    </html>
      

  4.   

    用 lsof -p (pid)看到很多这样的输出:
    java    18158 root  463w  FIFO    0,5            38348 pipe
    java    18158 root  464w  FIFO    0,5            38353 pipe
    java    18158 root  465w  FIFO    0,5            38358 pipe
    java    18158 root  466w  FIFO    0,5            38363 pipe
    java    18158 root  467w  FIFO    0,5            38368 pipe
    java    18158 root  468w  FIFO    0,5            38373 pipe
    java    18158 root  469w  FIFO    0,5            38378 pipe
    java    18158 root  470w  FIFO    0,5            38383 pipe
    java    18158 root  471w  FIFO    0,5            38388 pipe
    java    18158 root  472w  FIFO    0,5            38393 pipe
    java    18158 root  473w  FIFO    0,5            38400 pipe
    java    18158 root  474w  FIFO    0,5            38405 pipe
    java    18158 root  475w  FIFO    0,5            38410 pipe
    java    18158 root  476w  FIFO    0,5            38416 pipe
    java    18158 root  477w  FIFO    0,5            38421 pipe
    java    18158 root  478w  FIFO    0,5            38426 pipe
    java    18158 root  479w  FIFO    0,5            38431 pipe
    java    18158 root  480w  FIFO    0,5            38436 pipe
    java    18158 root  481w  FIFO    0,5            38441 pipe