본문 바로가기

WAS/JBoss&WildFly

[JBoss EAP 7.4] Thread Pool 설정 관련 정리

728x90

Q1) 실제 jboss에서 처리할때 사용하는 thread 설정은 어떤것?
Q2) curl명령어 수행시 관련있는 쓰레드설정값은 어느부분인지?

 

Ans)
I/O subsystem의 http-worker에 설정된 값이 이에 해당된다.
task-core-threads가 min값, task-max-threads가 max값
해당 값이 명시되어 있지 않을 경우, default 값은 min=1, max="CPU core 수 * 16"
예시로 CPU Core 수가 4core 라면 max 값이 64

        <subsystem xmlns="urn:jboss:domain:io:3.0">
            <worker name="default"/>
            <worker name="http-worker" task-core-threads="32" task-max-threads="32"/>
            <!--<worker name="ajp-worker" task-core-threads="32" task-max-threads="32"/>-->
            <buffer-pool name="default"/>
        </subsystem>

----------------------------------------------------------------

Q3) 각 서브시스템내의 역할, 쓰레드min,max,default 설정값? 

JBoss EAP 7은 Undertow를 기본 웹 컨테이너로 사용한다.
Undertow 내의 모든 리스너들은 I/O subsystem에서 제공하는 worker를 사용한다.
전달받은 standalone.xml 에는 Undertow가 http-worker를 사용하도록 되어있으며,
즉 thread min/max 값은 32/32 로 설정되어 있는 상태이다.

<http-listener name="default" tcp-keep-alive="true" socket-binding="http" worker="http-worker" record-request-start-time="true"
redirect-socket="https" proxy-address-forwarding="true" enable-http2="true"/>

----------------------------------------------------------------

Q4) task-max-threads, short-running-threads, long-running-threads 각각의 의미

해당 thread 값들은 jca subsystem에 설정 되어있습니다. 일반적인 request를 처리하는 상황에서는 직접 사용되지 않는다.
외부 시스템과의 통신이나 트랜잭션을 처리하며, 특정 자원 어댑터(예: JDBC, JMS 등)를 통해 데이터를 주고받을 때 사용된다.
short-running-threads: 짧은 시간 동안 실행되는 작업을 위한 스레드 풀이다. 외부 시스템과의 빠른 요청-응답 작업 처리 등
long-running-threads: 오랜 시간 동안 실행되는 작업을 위한 스레드 풀이다. 장기 트랜잭션이나 복잡한 데이터 처리 작업 처리 등
보내준 config의 값과, 원본 standalone.xml 상에 설정되어 있는 default 값과 일치한다.
해당 값의 수정은 불필요하다 판단되어 그대로 유지하면 된다.

        <subsystem xmlns="urn:jboss:domain:jca:5.0">
            <archive-validation enabled="true" fail-on-error="true" fail-on-warn="false"/>
            <bean-validation enabled="true"/>
            <default-workmanager>
                <short-running-threads>
                    <core-threads count="50"/>
                    <queue-length count="50"/>
                    <max-threads count="50"/>
                    <keepalive-time time="10" unit="seconds"/>
                </short-running-threads>
                <long-running-threads>
                    <core-threads count="50"/>
                    <queue-length count="50"/>
                    <max-threads count="50"/>
                    <keepalive-time time="10" unit="seconds"/>
                </long-running-threads>
            </default-workmanager>
            <cached-connection-manager/>
        </subsystem>

추가로, 현재 보내준 설정파일에서 JCA 관련 패키지를 사용하는 곳은 DB Validation check용으로 확인이 됨. 
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/> 

----------------------------------------------------------------

Q5) 각 서브시스템의 상관관계? 
Q6) thread 설정의 연관관계 설명

I/O와 JCA subsystem의 thread pool 간에 한정 지어서 생각한다면, 상관관계가 따로 있지는 않다고 판단.
JCA는 외부 시스템과의 처리를 위한 thread pool이고, task-max-threads는 사용자 request를 처리하는데 쓰이는 thread-pool.
일반적인 운영 환경에서는 I/O subsystem의 task-core-threads 및 task-max-threads 옵션값만 신경 쓰면 될 것으로 보인다.

==========================================================