![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
ORB 튜닝 지침
오브젝트 요청 브로커(ORB)를 워크로드에서 사용하는 경우 항상 이 문서의 지침을 사용하십시오.
ORB는 원격 인터페이스를 통해 엔터프라이즈 Bean에 액세스할 때 사용됩니다. CPU 사용량이 너무 많거나 너무 적은 경우, 다음 매개변수 값 중 하나에 문제점이 있을 수 있습니다. 모든 애플리케이션 배치 작업에 이러한 코어 튜닝 매개변수를 점검하십시오.
스레드 풀 조정
크기
워크로드에 따라 ORB 스레드 풀 크기를 튜닝하십시오. 스레드에는 처리할 수 있는 작업이 없으므로 일시중단해서는 안됩니다. 스레드에 처리할 수 있는 작업이 없는 경우, Object.wait 메소드를 호출하여 CPU 시간을 처리함으로써 컨텍스트 스위치를 수행합니다. 스레드 풀 크기를 튜닝하여 너무 긴 유휴 시간으로 인해 스레드가 제거되지 않도록 스레드의 대기 시간을 짧게 하십시오.
스레드 풀 크기는 워크로드 및 시스템에 따라 다릅니다. 일반 구성에서는 애플리케이션이 프로세서당 10개 이하의 스레드가 필요합니다.
그러나 애플리케이션이 데이터베이스 시스템에 대한 요청처럼 매우 느린 백엔드 요청을 수행하는 경우, 백엔드 요청을 대기하는 서버 스레드 블록이 완료됩니다. 백엔드 요청의 경우, CPU 사용량이 매우 적습니다. 이 경우, 로드를 늘려도 CPU 사용량 또는 처리량이 증가하지 않습니다. 스레드 덤프는 거의 모든 스레드가 백엔드 자원에 대한 호출 상태에 있는 것으로 표시합니다. 이 경우, 처리량이 증가하고 스레드가 백엔드 호출 이외의 다른 런타임 영역에 있는 것으로 스레드 덤프가 표시할 때까지 프로세서당 스레드 수를 늘릴 수 있습니다. 스레드 수는 백엔드 자원이 올바르게 튜닝되는 경우에만 조정해야 합니다.
최대 스레드 크기를 초과하는 스레드 할당 허용 매개변수는 스레드 풀 크기에도 영향을 주지만 백엔드가 오래 동안 중지되지 않는 한 이 매개변수를 사용해서는 안됩니다. 이 경우, 백엔드 시스템과 관련이 없는 다른 작업을 처리하는 대신 백엔드 시스템을 대기하는 모든 런타임 스레드가 차단되기 때문입니다.
스레드 풀 크기 설정은 관리 콘솔에서 조정할 수 있습니다. 서버 > 서버 유형 > 애플리케이션 서버 > server_name > 컨테이너 서비스 > ORB 서비스 > 스레드 풀을 클릭하십시오. 최소 및 최대 스레드 수를 조정할 수 있습니다.
스레드 풀 제한시간
ORB를 통한 각 인바운드 및 아웃바운드 요청에는 ORB 스레드 풀의 스레드가 있어야 합니다. 높은 로드 시나리오 또는 ORB 요청이 깊이 내포된 시나리오에서 JVM(Java™ Virtual Machine)에는 요청을 전송하려고 시도하는 ORB 스레드 풀의 모든 스레드가 있을 수 있습니다 반면에, 이러한 요청을 처리하는 원격 JVM ORB에는 요청을 전송하려고 시도하는 ORB 스레드 풀의 모든 스레드가 있을 수 있습니다. 따라서 진행되지 않고, 스레드가 ORB 스레드 풀로 다시 해제되지 않고, ORB에서 요청을 처리할 수 없습니다. 그러므로 잠재적인 교착 상태가 발생합니다. 관리 콘솔을 사용하면 ORB com.ibm.websphere.orb.threadPoolTimeout 사용자 정의 특성을 통해 이러한 동작을 조정할 수 있습니다. 자세한 정보는 오브젝트 요청 브로커 사용자 정의 특성에 대한 문서를 참조하십시오.
단편 크기
ORB는 메시지를 단편으로 구분하여 ORB 연결을 거쳐 전송합니다. com.ibm.CORBA.FragmentSize 매개변수를 통해 이 단편 크기를 구성할 수 있습니다.
- 관리 콘솔에서 ORB 특성 페이지의 ORB 추적을 사용 가능하게 하십시오.
- 로깅 및 추적 페이지에서 ORBRas 추적을 사용 가능하게 하십시오.
- 추적이 다량의 데이터를 생성할 수 있으므로 추적 파일 크기를 늘리십시오.
- 서버를 다시 시작하고 측정하려는 경우에 해당되는 최소 한 번(가능하면 여러 번)의 반복을 실행하십시오.
- 추적 가능 파일을 보고 Fragment to follow: Yes를 검색하십시오.
이 메시지에는 ORB가 단편을 전송한 것으로 표시되어 있지만 전체 메시지가 도착하기 전에 전송할 단편이 아직 하나 이상 남아 있습니다. Fragment to follow: No 값은 특정 단편이 전체 메시지에서 마지막임을 표시합니다. 또한 이 단편은 메시지가 전체적으로 하나의 단편에 맞을 경우에는 첫 번째가 될 수도 있습니다.
Fragment to follow: Yes가 있는 위치로 가면, 다음과 유사한 블록을 보게 됩니다.
Fragment to follow: Yes Message size: 4988 (0x137C) -- Request ID: 1411
이 예는 단편의 데이터 양이 4988바이트이고 요청 ID가 1411임을 표시합니다. Request ID: 1411 표시를 모두 검색하는 경우, 해당 특정 메시지를 전송하는 데 사용되는 단편 수를 확인할 수 있습니다. 연관된 모든 메시지 크기를 추가하면 ORB를 통해 전송 중인 메시지의 총 크기가 됩니다.
- com.ibm.CORBA.FragmentSize ORB 사용자 정의 특성을 설정하여 단편 크기를 구성할 수 있습니다.
인터셉터
인터셉터는 ORB가 요청을 실행하기 전에 컨텍스트를 설정할 수 있는 ORB 확장기능입니다. 예를 들어, 컨텍스트에는 가져올 트랜잭션 또는 활동 세션이 포함됩니다. 클라이언트가 트랜잭션을 작성하고 트랜잭션 컨텍스트를 서버로 전송하면 서버가 인터셉터를 통해 서버 요청으로 트랜잭션 컨텍스트를 가져옵니다.
대부분의 클라이언트는 트랜잭션 또는 활동 세션을 시작하지 않으므로 대부분의 시스템은 필요하지 않은 인터셉터를 제거하는 데 따른 이익을 얻을 수 있습니다.
인터셉터를 제거하려면 server.xml 파일을 수동으로 편집하고 ORB 섹션에서 필요하지 않은 인터셉터 행을 제거하십시오.
연결 캐시 조정
애플리케이션 서버의 워크로드 및 처리량 또는 응답 시간에 따라 ORB의 연결 캐시 크기를 조정해야 합니다. 연결 캐시의 각 항목은 고유한 TCP/IP 소켓 엔드포인트를 나타내는 오브젝트로서, ODB가 원격 대상 엔드포인트로 GIOP 요청 또는 GIOP 응답을 전송하기 사용하는 포트 번호와 호스트 이름 또는 TCP/IP 주소로 식별됩니다. 연결 캐시의 목적은 후속 요청 또는 응답에 ORB 연결 오브젝트를 다시 사용함으로써 연결 설정에 필요한 시간을 최소화하는 것입니다. 요청 및 해당 응답에는 동일한 TCP/IP 소켓이 사용됩니다.
각 애플리케이션 서버의 경우 연결 캐시의 항목 수는 동시 ORB 연결 수과 직접적인 관련이 있습니다. 이러한 연결은 원격 클라이언트에서 작성된 인바운드 요청과 애플리케이션 서버에서 작성된 아웃바운드 요청 모두로 구성됩니다. 서버측 ORB가 연결 요청을 수신하면 캐시 항목으로부터의 기존 연결을 사용하거나 새 연결을 설정하여 이 연결에 대한 항목을 캐시에 추가합니다.
ORB 연결 캐시 최대 및 연결 캐시 최소 특성은 지정된 시간에 연결 캐시 내 최소/최대 항목 수를 제어하는 데 사용됩니다. 항목 수가 연결 캐시 최대 특성에 지정된 값에 도달하여 새 연결이 필요하게 되면 ORB가 요청된 연결을 작성하고 캐시에 항목을 추가하여 검색하고 캐시에서 최대 다섯 개의 비활성화된 연결 항목을 제거하려고 시도합니다. 새 연결은 비활성 항목이 제거된 후에 추가되므로 캐시 항목 수가 연결 캐시 최대 특성에 지정된 값을 일시적으로 초과할 수 있습니다.
현재 TCP/IP 소켓 스트림을 사용하지 않고 해당 연결에 대해 작성된 요청에 대해 보류 중인 GIOP 응답이 없는 경우 ORB 연결은 비활성 상태로 간주됩니다. 애플리케이션 워크로드가 감소하면 ORB가 연결을 닫고 해당 연결에 대한 항목을 캐시에서 제거합니다. ORB는 나머지 항목 수가 연결 캐시 최대 특성에 지정된 값 이하가 될 때까지 계속해서 캐시에서 항목을 제거합니다. 캐시 항목 수는 연결 캐시 최소 특성에 지정된 값 미만이 될 수 없습니다. 연결 캐시 최소 특성의 최소값은 5이며 연결 캐시 최대 특성에 지정된 값보다 작아야 합니다.
클라이언트측에는 소수 연결만 작성되므로 일반적으로 클라이언트측 ORB의 연결 캐시는 조정하지 않아도 됩니다.
JNI 판독기 스레드
ORB는 기본적으로 Java 스레드를 사용하여 수신하는 각 인바운드 연결 요청을 처리합니다. 동시 요청 수가 증가하면 여러 판독기 스레드에서 처리하는 스토리지도 함께 증가하여 한정된 자원 환경에서 병목 현상이 발생할 수 있습니다. 결과적으로 동시 요청 수가 시스템에서 사용 가능한 자원을 초과하게 되면 작성된 Java 스레드 수로 인해 메모리 부족 예외가 발생할 수 있습니다.
이러한 잠재적인 문제점을 해결하기 위해 JNI 판독기 스레드를 사용하도록 ORB를 구성할 수 있습니다. 이 경우 ORB를 초기화하는 동안 Java 스레드 대신 기본 OS 스레드를 사용하여 구현되는 제한된 수의 판독기 스레드가 작성됩니다. JNI 판독기 스레드는 단일 기본 OS 스레드를 사용하여 여러 소켓의 I/O 이벤트를 동시에 처리할 수 있는 기본 OS TCP/IP 비동기 메커니즘을 따릅니다. ORB는 라운드 로빙 알고리즘을 사용하여 JNI 판독기 스레드 사용을 관리하고 사용 가능한 스레드 중 하나를 지정하여 연결 요청을 처리합니다. JNI 판독기 스레드는 일반적으로 Java 스레드를 사용함으로써 애플리케이션 환경의 메모리를 너무 많이 처리하는 경우에만 구성해야 합니다.
- 고정 스레드 수가 할당되므로 메모리 사용량이 감소합니다. 이러한 메모리 사용량 감소는 클라이언트 요청 워크로드가 지속적으로 큰 환경에서 매우 유용합니다.
- ORB를 초기화하는 동안 고정된 수의 JNI 스레드가 작성 및 할당되므로 Java 스레드를 동적으로 작성하고 삭제하는 데 필요한 시간이 줄어둡니다.
- 각 JNI 스레드는 최대 1024개의 소켓 연결을 처리할 수 있으며 비동기 I/O 기본 OS 메커니즘과 직접 상호작용함으로써 네트워크 I/O 처리 성능이 향상됩니다.