JBoss EAP & Wildfly

JBoss EAP (Wildfly) 튜닝 – ajp connector 에 대한 Thread Pool 생성하기

JBoss EAP6 (AS7) 의 웹 서브시스템은 클라이언트 요청에 대해서 스레드를 할당해 처리한다. 웹 서브시스템은 클라이언트의 요청을 수신하면 풀에서 대기 상태의 스레드를 할당하고 요청이 완료(클라이언트에의 응답 완료 시)되면 스레드 풀에 반환한다.
 
클라이언트 요청이 들어왔을 때 스레드 풀이 최대값에 도달하지 않는 경우 새로운 스레드를 생성하여 할당한다. 스레드 풀이 최대값에 도달한 경우에는 클라이언트와 연결되지 않는다. 클라이언트의 동시 접속 수는 이 스레드 풀의 최대값에 의해 결정된다. 스레드 풀은 커넥터마다 생성하여 관리한다. 
 
Http와 AJP 커넥터에서 사용자 요청을 처리하기 위해서는 미리 최대 사용자에 맞게 커넥터의 “Max Connections” 수와 thread 생성에 제한이 없는 unbounded-queue-thread-pool을 할당해 놓는다.
 
다음은  Http 커넥터에 unbounded-queue-thread-pool executor 를  설정하는 과정이다. 

1. AJP Connector 생성과 max-connections 설정하기

위치
속성
설명
/subsystem=web/connector=ajp
max-connections
  • 할당된 스레드 풀의 최댓값.
  • 기본값은 JVM이 사용할 수 있는 CPU 코어수 × 512
1.1 ajp connector 생성 하기
[domain@localhost:9999 /] /profile=default/subsystem=web/connector=ajp:add(socket-binding=ajp, protocol="AJP/1.3", enabled=true, scheme=http)
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => undefined
}
1.2 ajp connector 에 max-connections 설정하기
[domain@localhost:9999 /] /profile=default/subsystem=web/connector=ajp:write-attribute(name=max-connections,value=2000)
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => undefined
}

2. AJP Connector 를 위한 Thread Factory 정의


[domain@localhost:9999 /] /profile=default/subsystem=threads/thread-factory=ajp-connector-factory:add(thread-name-pattern="AJP-%t", priority="9", group-name="uq-thread-pool")
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => undefined
}

3. AJP Connector 를 위한 Executor 생성

[domain@localhost:9999 /] /profile=default/subsystem=threads/unbounded-queue-thread-pool=uq-thread-pool:add(thread-factory="ajp-connector-factory", keepalive-time={time=30, unit="seconds"}, max-threads=30)
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => undefined
}

4. AJP Connector 에 새로 생성한 Thread Pool를 지정


[domain@localhost:9999 /] /profile=default/subsystem=web/connector=ajp:write-attribute(name=executor, value="uq-thread-pool")
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => undefined
}

5. 설정 결과 확인

5.1. 다음과 같이 domain.xml 에 profile=defalut에 subsystem=thread 에 생성된 것을 확인한다.

     
                
                
                    
                    
                    
                
            

5-2. 다음과 같이 domain.xml 에 profile=default 에 subsystem=web 에서 변경된 것을 확인한다.

  
                
                
                
                    
                    
                
            

본 내용은  “거침없이 배우는 JBoss EAP6”  중 일부를 발췌한 내용입니다.

거침없이 배우는 JBoss10점
전준식 엮음/지&선(지앤선)