연결 탱크 파라미터 테스트 결과 분석

8422 단어 연결 풀
연결 풀 속성 테스트
1. initialSize 속성
initialSize 속성은tomcat6.0 이후 연결 탱크에 추가된 속성입니다. 서버가 몇 개의 연결을 초기화하는 것을 정의합니다. 기본적으로 0은 서버가 시작할 때 연결을 초기화하지 않습니다.
2.maxActive 속성
병렬 상황에서 최대 연결 탱크에서 얻을 수 있는 연결 수를 나타냅니다.만약에 데이터베이스가 단독이 아니라면 하나의 응용 프로그램에 사용할 수 있도록 maxActive 파라미터를 설정함으로써 특정한 응용 프로그램이 무제한으로 연결을 얻는 것이 다른 응용 프로그램에 영향을 미치는 것을 피할 수 있다. 만약에 데이터베이스가 하나의 응용 프로그램을 지원하는 데 사용된다면maxActive 이론적으로 이 데이터베이스가 지탱할 수 있는 최대 연결 수로 설정할 수 있다.maxActive는 연결 탱크를 통해 동시에 얻을 수 있는 최대 연결 수를 나타냅니다.
3.maxIdle 속성(maxActive=5, maxIdle=3)
만약 병발 시 maxActive=5에 도달하면 연결 탱크는 데이터베이스에서 5개의 연결을 가져와 공급용 프로그램으로 사용해야 한다. 응용 프로그램이 연결을 닫은 후maxIdle=3이기 때문에 모든 연결이 데이터베이스에 반환되는 것은 아니다. 3개의 연결이 연결 탱크 종류에 유지되고 상태가 비어 다음에 사용할 때 다시 사용할 수 있도록 하는 것도 연결 탱크가 진정으로 역할을 발휘하는 곳이다.
4.minIdle 속성
최소 기본값은 적용되지 않습니다. 연결 탱크의 연결이minIdle보다 적으면 시스템 모니터링 라인이 보충 기능을 시작하고 일반적인 상황에서는 보충 라인을 시작하지 않습니다.
5.testOnBorrow="true"와validationQuery="select1"의 속성 설정
우리는 데이터베이스 연결이 본질적으로 tcp/ip 연결에 구축되어 있음을 알고 있다. 일반적인 상황에서 웹 서버와 데이터베이스 서버는 같은 물리적 기계에 있지 않고 네트워크를 통해 연결된다. 그러면 데이터베이스 연결 탱크를 구축한 기계와 데이터베이스 서버가 스스로 네트워크 이상이 발생할 때 연결 탱크에 유지되는 연결은 효력을 잃고 다음에 사용할 수 없으며 전통적인 상황에서는 재부팅을 통해서만 가능하다.연결을 다시 설정합니다. 상기 두 가지 파라미터를 설정하지만 프로그램이 연결 탱크에서 연결을 가져올 때 먼저 활성 검사를 하고 연결이 활성화되었을 때 프로그램에 사용됩니다. 연결이 효력을 잃으면 연결이 해제됩니다.validationQuery는 테스트 문장으로 실제적인 의미가 없고 현실에서 가장 간단한 검색 문장으로 충당된다.
6.removeAbandoned, removeAbandonedTimeout 및 logAbandoned 속성 설정
때때로 부주의한 프로그램 작성자는 연결 탱크에서 연결을 가져온 후 연결이 닫히는 것을 잊어버리고, 연결 탱크가 서비스를 제공할 수 없을 때까지maxActive에 연결됩니다.현대 연결 탱크는 일반적으로'스마트'한 검사를 제공하지만,removeAbandoned='true'를 설정하면 연결 탱크의 연결 수가 (getNumIdle()<2) and(getNumActive()>getMaxActive()-3)에 도달할 때 연결 회수를 시작합니다. 그 활동이 RemoveAbandonedTimeout='60'을 초과하는 연결은 회수되며, logAbandoned='true'가 true로 설정되면 프로그램은 연결을 회수하는 동시에 로그를 출력합니다.
removeAbandoned는 연결 탱크의 고급 기능이다. 이론적으로 이 설정은 실제 생산 환경에 나타나서는 안 된다. 때로는 응용 프로그램이 긴 업무를 수행하기 때문에 이런 상황에서 연결 탱크가 잘못 회수될 수 있다. 이 설정은 일반적으로 프로그램 테스트 단계에서 연결이 누출된 구체적인 코드 위치를 정하기 위해 켜지고 생산 환경에서 연결의 폐쇄는 프로그램 자체에 의해 보장되어야 한다.
7.Tomcatdbcp 데이터베이스 연결 탱크,tomcat에 여러 개의 응용 프로그램을 배치할 때 어떤 상황에서 연결 탱크를 공유하고, 어떤 상황에서 연결 탱크를 공유하지 않습니까?
답: 연결 탱크에 설정된resource를context에 연결 탱크 바늘을 놓으면 모든 응용 프로그램에 독립적입니다. 즉, 토마토캣이 시작할 때 모든 응용 프로그램에 설정된 모든 연결 탱크를 만들 것입니다. 몇 개의 응용 프로그램이 있고 같은 연결 탱크가 몇 개 있습니다.
연결 탱크의 리소스를 전역 리소스, 즉 GlobalNaming Resources에 설정하면 연결 탱크는 공유됩니다.전체tomcat은 아무리 많은 응용 프로그램을 설정해도 전체tomcat이 시작될 때 설정된 연결 탱크마다 하나만 생성되고 프로젝트마다 이 연결 탱크를 공유합니다.수정된 xml은 다음과 같습니다.
(GlobalNaming Resources는 server.xml에서)
<GlobalNamingResources> 
     <Resource name="UserDatabase" auth="Container" 
       type="org.apache.catalina.UserDatabase" 
description="User database that can be updated and saved"              factory="org.apache.catalina.users.MemoryUserDatabaseFactory" 
       pathname="conf/tomcat-users.xml" /> 
<Resource name="jdbc/test" auth="Container" 
type="javax.sql.DataSource" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/test" username="root" 
password="root" maxActive="20" maxIdle="10" maxWait="1000" initialSize="10"/> 
  </GlobalNamingResources> 

 
예전에는 컨텍스트였어요.xml의 라벨에 있습니다.구체적으로 다음과 같습니다.
<context> 
<Resource name="jdbc/test" auth="Container" 
type="javax.sql.DataSource" 
driverClassName="com.mysql.jdbc.Driver" 
url="jdbc:mysql://localhost:3306/test" username="root" 
password="root" maxActive="20" maxIdle="10" maxWait="1000" initialSize="10"/> 
 </context> 
 
그러나 전역 연결 탱크를 설정할 때context에 있어야 합니다.xml의 context에서 참조합니다. 코드는 다음과 같습니다.
<context> 
<ResourceLink name="jdbc/test" global="jdbc/test" type="javax.sql.DataSource"/> 
</context> 
 
8. 연결 탱크의 연결은 창고 유형의 데이터 구조로 저장합니까, 아니면 대기열 유형의 데이터 구조로 저장합니까?
답: 연결 탱크의 연결은 창고의 형성으로 저장된다. 테스트를 통해 되돌아오는 연결을 닫고 나중에 사용되며, 되돌아오는 연결을 닫는 것은 먼저 사용되고 창고의 선진적인 후출 원칙에 부합되기 때문이다.
테스트된 Connection 객체의 주소 순서는 다음과 같습니다.
a) 연결을 얻고 연결 대상 주소를 인쇄하며 연결을 닫고 다음 연결을 얻으면 연결이 같은 것을 발견할 수 있습니다.
코드:
 
for(int i=0; i<10; i++){ 
Connection conn = dataSource.getConnection(); 
System.out.println(i+": "+conn.getClass().getName()+"@"+   Integer.toHexString(conn.hashCode())); 
conn.close(); 
} 
 
결과:
0: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
1: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
2: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
3: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
4: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
5: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
6: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
7: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
8: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
9: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@164b9b6 
 
b) 10개의 연결을 순환하여 목록 집합cons에 연결합니다. 이 10개의 연결을 끄지 않고 연결 대상 주소를 출력합니다.그리고 방금 cons에 넣은 순서에 따라 방어 연결을 하나씩 닫고 닫은 후에 연결 탱크에서 10개의 연결을 가져와 닫지 않고 방출합니다. 획득 순서에 따라 모든 연결 대상의 주소를 인쇄하면 먼저 방출된 연결 대상이 나중에 얻지 못한 것을 발견할 수 있습니다.
코드:
ArrayList<Connection> cons = new ArrayList<Connection>(); 
for(int i=0; i<10; i++){ 
Connection conn = dataSource.getConnection(); 
cons.add(conn); 
System.out.println(i+":"+conn.getClass().getName() 
+"@"+Integer.toHexString(conn.hashCode())); 

} 
for(int i=0; i<cons.size(); i++){ 
cons.get(i).close(); 
} 
for(int i=0; i<10; i++){ 
Connection conn = dataSource.getConnection(); 
cons.add(conn); System.out.println(i+":"+conn.getClass().getName() 
+"@"+Integer.toHexString(conn.hashCode())); 
} 
 
결과:
0: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1bfbfb8 
1: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1c3e9ba 
2: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@125d61e 
3: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@10c6cfc 
4: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@c72243 
5: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@19a8416 
6: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@155d3a3 
7: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1b994de 
8: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@dc9766 
9: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@57e787 
0: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@57e787 
1: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@dc9766 
2: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1b994de 
3: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@155d3a3 
4: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@19a8416 
5: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@c72243 
6: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@10c6cfc 
7: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@125d61e 
8: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1c3e9ba 
9: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper@1bfbfb8 


좋은 웹페이지 즐겨찾기