2015-01-29 3 views
2

우리는 Tomcat6/Hibernate 3.x/Postgres 응용 프로그램을 갖고 있으며 적어도 내 깊이에서 나는 입니다. 응용 프로그램 서버와 DB 사이의 "연결"을 구성하는 것에 대해 약간 명확하지 않습니다. 적어도 JDBC까지 간다.JDBC 연결이 netstat 네트워크 연결과 일치합니까?

우리는 시작시 10 개의 연결을 여는 연결 풀 (Tomcat JDBC)을 사용하고 있습니다. Netstat이이를 확인한 것 같습니다 :

netstat -nato | grep 5432 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 
::ffff:192.168.42.11:5432 ESTABLISHED off (0.00/0/0) 

그러나 이러한 연결은 항상 '꺼짐'상태로 유지됩니다. Hibernate 로그를 JDBC 용 DEBUG로 설정하면, openConnection()closeConnection() 콜 (간단한 웹 페이지의 경우 100 개 이상)이 표시되지만 netstat의 출력은 변경되지 않습니다.

JDBC와 네트워크 연결이 1 : 1 비율로 생성되지 않았습니까? 이것은 연결 풀링이 실제로 작동하는 증거일까요?

+0

예 수영장이 작동하는 증거입니다. – EJP

+0

EJP 답장을 보내 주셔서 감사합니다. 조금 혼란 스럽지만, jconsole을 원격으로 실행하면 풀 청소기가 표시되지만 풀과 관련된 다른 스레드는 표시되지 않습니다. 이게 우리의 앱과 jconsole의 설정 일 뿐이라고 생각 하나? – 8bitartist

+0

풀과 관련된 다른 스레드가있는 이유는 무엇입니까? – EJP

답변

2

이것이 바로 connection pooling의 작동 방식입니다. 풀은 N 개의 실제 데이터베이스 연결을 열고 응용 프로그램이 연결을 획득하면 실제 드라이버 연결 객체가 아닌 JDBC Connection 프록시를 갖게됩니다.

응용 프로그램 트랜잭션이 완료되면 Connection.close() 메서드가 호출됩니다. 프록시는 close 메서드를 가로 채고 실제 연결을 실제로 닫는 대신 Connection 개체를 풀에 반환합니다.

다음과 같이 많은 openConnection()closeConnection() 방법이 설명 될 수 볼 수있는 이유는 당신이 문별로 aggressive connection release을 요구 JTA를 사용하는

  • .
  • 하나의 @Transactional 서비스 메소드로 작업을 래핑하지 않으며 Hibernate는 기본적으로 자동 커밋 (auto-commit)을하므로 모든 명령문은 고유 한 트랜잭션으로 실행됩니다 (모든 명령문은 실제로 Connection 획득주기/릴리스주기가 필요합니다) .
  • Ajax를 많이 사용하기 때문에 첫 페이지를로드하는 것은 하나의 HTTP 요청이 아닙니다. 비동기 요청이 많을수록 트랜잭션이 더 많이 필요할수록 연결 풀에 더 많은 압력을 가하게됩니다.

연결 풀을 모니터링하고 조정하려면 FlexyPool을 사용하는 것이 좋습니다.

+0

아. 우리는 Hibernate 트랜잭션에서 자동 커밋을 사용하며, 릴리즈 모드를 'auto'(우리는 JTA를 사용하지 않음)로 설정했다. 나는 FlexyPool을 체크 아웃 할 것이다. 감사! 충분한 담당자가 생기 자마자 나는이 대답을 전제로하고 있습니다 - JDBC와 물리적 연결 간의 관계에 대한 훌륭한 설명. – 8bitartist

+0

친절한 말 주셔서 감사합니다. 당신이 Hibernate/transactions/JDBC/Spring/Database와 관련된 다른 흥미로운 질문 (이것처럼)을 가지고 있다면, 당신은 ping을 할 수 있습니다.FlexyPool은 작지만 강력한 유틸리티로서 업계의 주요 업체 (미국 및 스위스의 은행)가 사용하고 있습니다. –

관련 문제