용환종
2003-08-20 09:54:00
11
15004

오류 메세지 : No operations allowed after connection closed


다음과 같은 오류메세지가 나오는데요.

 

예전에도 질문을 했는데 답변이 없어서.. 찾아보기도 했는데

 

관련게시물이 한개 있더군요. 근데 명확한 답이 안 나왔어요.

 

이상하게 어느정도 시간이 지나면 다음과 같은 오류메세지가 뜹니다.

 

꼭 담날 아침에 오면 이런 오류가 뜨고 톰켓 내렸다 올리면 다시 잘 돌아갑니다.

 

소스는 아래와 같습니다.

 

        // MYSQL 객체 선언
        Connection conn = null;
        Statement pstmt = null;
        ResultSet rs = null;

        String sQuery = new String();

        try

        {

            // MYSQL Connection
            conn = DsConn.getConnection(); ==> conn 객체는 null 이 아니였습니다.
            stmt = conn.createStatement();  ==> 여기서 에러가 발생합니다.

            sQuery = "SELECT AA FROM test ";

            rs = stmt.executeQuery(sQuery);

           if (rs.next() )

           {

                    out.println(rs.getString("AA");

            }

        }
        catch ( Exception e )
        {
            out.println(e.toString());
        }
        finally
        {
            // MYSQL CLOSE
            try
            {
                if ( stmt != null )
                {
                    pstmt.close();
                }
                if ( conn != null )
                {
                    conn.close();
                }

            }
            catch ( Exception ex )
            {
            }
        }

 

지금 계속 2주째 발생하고 있습니다.

 

답변 좀 부탁드립니다.

0
0
  • 답변 11

  • 타미
    2003-08-20 10:09:42
    isClosed()로 connection이 사용가능한지를 체크해야 될거 같구요. 톰캣 엔진에선 conntection 정보를 갖고 있지만. mysql에서는 connection이 일정시간 사용이 없으면 끊어버립니다. mysql 환경설정을 확인해 보세요.
    0
  • 용환종
    2003-08-20 10:23:51
    isClosed는 true입니다.
    0
  • 용환종
    2003-08-20 10:24:27
    mysql 환경설정의 어는 부분을 말씀하시는건가여?
    0
  • 용환종
    2003-08-20 10:30:21
    환경파일을 보니까 Aborted_clients 연결 닫음없이 연결이 종료된 수가 200이네요. 이게 무슨 상관이 있나요?
    0
  • 용환종
    2003-08-20 10:38:06
    mysql에서 show variables; 하니까
    interactive_timeout이 28800이네요. 즉 8시간인데
    이게 뜻이 활동하는 클라이언트를 서버가 기다려 주는 시간이라고 되어 있습니다. 즉 8시간동안 요청이 없으면 mysql에서 connection을 끊어버리기 때문에 그런건가요? 타미님이 말씀하신게 이 부분이 맞나요?
    0
  • 용환종
    2003-08-20 10:44:33
    wait_timeout도 28800입니다. 8시간.

    wait_timeout은 연결을 끊기 전 서버에서 대기하는 시간이고
    interactive_timeout은 활동하는 클라이언트를 서버가 기다려 주는 시간 인데 차이점이 뭐죠? 이걸 20초로 해서 테스트를 해 봐야겠네요
    0
  • 타미
    2003-08-20 10:57:24
    interactive 모드라는 것은 터미널에서 mysql에 접속한 상태 즉 프롬포트가 mysql> 인 상태를 말하는 걸로 알고 있습니다.
    그러니까.
    님께서는 wait_timeout값을 조절해야 겠지요.
    근데 20초라..
    그럼 더 빨리 끊어진다는 건데..
    길게 줘야 돼지 않을가요.
    그리고 생각하셔야 할건
    connection을 잃어버렸을 경우엔 길게 설정되면 그만큼 쓸수 있는 connection이 줄어드니까..
    나중엔 mysql에서 max_connection수와 문제가 생기겠죠.
    0
  • 용환종
    2003-08-20 11:04:53
    답변 감사합니다.
    이 사이트에는 사람들이 접속이 뜸하기 때문에 더 많이 늘려야겠네요. 10일정도도 세팅 가능할까요? 864000이군요
    그리고 저는 20으로 세팅하고 테스트를 해 본 후 늘려야겠다는 생각이였습니다.
    0
  • 용환종
    2003-08-20 11:19:37
    정말 감사합니다. 20초로 세팅하고 하니까 톰켓 재 기동 후 잘되다가 20초 후에 다시 해 보니까 같은 에러가 발생하네요
    0
  • 카카
    2005-05-21 10:35:12
    원인 파악하고 검색하고 해결하는데
    저도 2주씩이나 걸렸네요. mysql 은 default 로 8시간동안 request 가 없으면 커넥션을 close 합니다. 그래서 tomcat 의 server.xml 에 db url 부분에 autoReconnect=true 을추가해 주면 됩니다.

    <parameter>
    <name>url</name>
    <value>jdbc:mysql://ip:port/dbname?useUnicode=true&amp;characterEncoding=euckr&amp;autoReconnect=true</value>
    0
  • 명랑폐인
    2005-05-21 12:02:35
    mysql 에선 isClosed()를 이용하여 유효한 컨넥션인지 체크해봐야 소용없습니다.
    이건 autoReconnect=true 로도 해결 안됩니다.
    유효한 컨넥션인지 체크하는 쿼리를 실쿼리를 날리기전에 체크해줘야 합니다.
    DBConnectionPool에 이기능이 있는게 있습니다.
    톰캣에 있는 DBCP를 쓴다면 validQuery 를 select 1 으로 해두면 됩니다.

    자기가 만들 컨넥션 풀이면, 이부분을 직접 코드에 넣으셔야 합니다.

    mysql의 연결대기시간을 무한대로 잡아도 되지만, 성능측면에서는 별로 좋은 설정이 아닙니다.
    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.