2009-07-17 2 views
0

Java EE 웹 응용 프로그램에서 다음 메소드를 호출했습니다. JDBC를 SQL Server 2000에 무작위로 솔라리스 서버에서 재설정

public static void submitToPending() 
{ 
    Db db; 
    ResultSet rs; 

    try 
    { 
     db = new Db("Database.properties"); 

     rs = db.issueQuery(getDescriptorList()); 

     while (rs.next()) 
     { 
      db.insertApplicationData(rs.getString("Id")); 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     db = null; 
     rs = null; 
    } 
} 

코드의 축약 된 조각은 내가 SQL Server 2000 데이터베이스에 대한 40,000 새로운 레코드를 삽입하는 실행하고있다. 이 코드는 프로덕션 환경의 Solaris 10 서버에서 호스트되는 JSP에서 실행됩니다. 올해 이전에이 코드는 약 18,000 개의 레코드 만 처리하면되므로 완벽하게 작동했습니다. 올해에는 몇 가지 업데이트가 있었으며 세부 사항을 보완하기 위해 약 4 만 건의 레코드가 처리됩니다.

개발 중에 이클립스 내부에서 실행되는 Tomcat 서버의 Windows PC에서 프로덕션에서 사용 된 것과 동일한 데이터베이스 (레코드 세트가 충돌하지 않음)에서 테스트합니다. 모든 것이 올바르게 작동하고 40,000 건 정도의 모든 레코드가 데이터베이스에 저장됩니다. 내가 프로덕션 서버에 사이트를 설치하고 나는 것으로 나타났습니다 테스트를 실행

중간 과정을 통해 다음과 같은 예외 메시지와 함께, 실패 된 이상 :

com.microsoft.sqlserver.jdbc.SQLServerException : 연결이 닫힙니다. com.microsoft.sqlserver.jdbc.SQLServerStatement.checkClosed에서 com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed (알 소스)에 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError (알 소스)에 (알 소스)에 com.microsoft.sqlserver.jdbc.SQLServerResultSet.next com.microsoft.sqlserver.jdbc.SQLServerResultSet.checkClosed (알 소스) (알 소스)에 (ClassNameOmittedToProtectTheInnocent.java:74)에서

SQL Server는 무제한의 동시 연결, 무제한 시간 제한으로 설정됩니다. 내 코드가 클래스 Db 인 것으로 가정하면 (Windows 측면에서 작동하고 있으므로 데이터가 올라갈 때까지 Solaris 측에서는 성능이 뛰어나다) 체크 아웃을 시작하기위한 아이디어는 무엇입니까?

SQL Server를 추적하여 연결에 문제가 있는지 확인했지만 스택 추적이 기록 된 후에도 살아있는 것으로 보입니다.

추가 정보를 제공 할 수 있으면 알려 주시기 바랍니다. 내가 도울 수있는 최선을 다할 것입니다.

답변

0

귀하의 데이터베이스 및 결과 세트를 닫지 않고 참조 설정을 의심 스럽습니다. 나는 명시 적으로 을 닫습니다. (연결 풀이있는 경우 연결을 닫으면 실제로 닫히지 않지만 풀로 연결을 반환하는 신호 역할을합니다).

프로세스 당 최대 열린 파일 디스크립터 수와 같은 리소스 제한이있는 것으로 추측됩니다. 결과 세트/연결을 닫지 못하면이 문제의 원인이 될 것입니다.

+0

이러한 호출이 finally 블록에 있더라도? 이것은 db.insertApplicationData() 메소드 호출에서 실패합니다. – karlgrz

+0

JDBC 객체의 비슷한 처리가 잘못된 다른 곳에서 실행되는 다른 코드가이 문제를 일으키고 있는지 또는이 문제에 대한 독점적 인 db 액세스 권한이 있습니까? – banjollity

+0

@KG - 저의 요점은 당신이 자원을 적절히 닫거나 풀지 않아서 나중에 문제가 발생할 수 있다는 것입니다. –

관련 문제