2021년 8월 10일 화요일

What is thread in SAP NetWeaver AS JAVA(PO, PI)

스레드(Thread0는 SAP NetWeaver의 JAVA플랫폼에서 사용되기도 하며 자바프로그램을 개발할때도 스레드 로직을 구현할수 있는걸로 알고 있습니다. 하지만 SAP PO나 PI 등 에서 이 스레드에 대해 하는일에 대해 알아보려고 하는데 인터넷을 찾아보긴 했지만 생각외로 이해하기 쉬운 내용을 찾기가 힘들었으며 내용과 다른 부분은 댓글로 도움을 주시면 감사하겠습니다.

스레드란?

"스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드라고 한다-출처: 위키백과"
XI/PI/PO에서의 스레드라고 하면 JDBC, SOAP, FILE 등 여러 Sender/Receiver 어댑터들이 생각나는데요. 송,수신간 메시징 처리를 할때 여러 노드안에 어댑터에서 병렬처리가 되거나 때론 직렬처리(순차처리)를 할때도 있는데요. 스레드 개수가 부족하면 백로그 현상인 'To Be Delvered'나 'Devering' 현상들이 대량으로 발생되는 경우가 있는데 이때 스레드 개수를 늘려주면 문제를 해결될때가 있었습니다.

PO의 자바 스레드는 ABAP의 Work Process와 같은 역할을 한다고 하며 Max Thread를 증가시킨 후 늘어난 스레드를 사용할수 있도록 Mapping Connection 과 Messaging System Thread의 증개필요하다고 하는데.. 스레드에 대한 구성과 설정에 대한 이해가 안가 이부분에 대한 건 잘 모르겠습니다.

SAP Netweaver Application Server for Java에서는 Thread manager와 Application thread manager로 구성된다고 하며 해당 스레드 상태는 텔넷이나 SAP Management Console(SAP MC), SAP Netweaver Administrator(NWA)의 Availability and Performance에서 확인 가능합니다. 저같은경우 NWDS(Netweaver Developer Studio)에서 MC의 스레드상태를 확인하고 있는데 이클립스 기반 툴이라 PC메모리도 많이 차지하고 무겁습니다.

스레드 관리자(시스템 스레드용)

디스패쳐와 서버 노드 등 시스템 전반적으로 사용돠는것 같고 자세하게는 스레드 메시지 풀은 내부클러스터, 이벤트처리, 로그기록/백업, 데이터수집/저장 등을 위한 백그라운드 관련 시스템 작업에 사용된다고 합니다.

어플리케이션 스레드 관리자

프로그램 로직이 실행되는 스레드와 관련있는것 같으며 SOAP, REST와 같은 HTTP요청으로 AS JAVA의 여러노드에서 어플리케이션 스레드가 실행되는것 같습니다.

추가로 SAP PO의 비동기메시지 백로그현상 개선을 위한 스레드 관련설정인데 출처사이트를 참고하시면 좋을것 같습니다. 내용을 잘 정리해서 이해하기 쉽기도 하며 이 사이트에서는 Number of cluster nodes, connectionDefinition, shystem.queueParallelism.perInterface, ReceiverParallelism, MessagePrioitization 등 설정들이 PO에 있으며 문제가 있는 인터페이스를 개선을 위해 필요한 설정인것 같습니다. 하나씩 순서대로 설정하면 좋을것 같습니다.

비동기 메시지 처리개선을 위한 설정

1. 클러스터 노드 수 늘리기
해당 대기열에 백로그 현상이 발생되는 경우 CPU수와 메모리 용량에 따라 노드수를 늘리게 되면 스레드가 한 노드별로 2배가 늘어나 이 현상이 해결될수 도 있을것 같습니다.

2. messaging.connectionDefinition
해당 설정은 NWA > Configuration > Infrastructure > Java Service Properties의 Servies > XPI Service: AF Core에서 변경 가능하며 타겟쪽 메시지 전송이 배달예정인 상태로 처리가 오래 걸릴때 해당 대기열의 개수를 늘릴수 있습니다. 예를 들어 대기열 수를 5에서 20으로 늘리는 경우 해당 노드가 2개면 총 스레드는 40개가 됩니다. 이설정이 변경되는 경우 J2EE서비스를 다시 시작할수 있기 때문에 운영중인 시스템에서는 부담이 될수 있어 긴급하지 않은경우 PM(Prevention Maintenacnce) 작업 시 적용하는걸 권장합니다.

3. messaging.system.queueParallelism.perInterface
SAP PO를 운영하다보면 특정 인터페이스로 인해 해당 스레드를 모두 점유하여 배달예정 상태인 메시지가 확인되는 경우가 있을겁니다. 이런경우 Service > XPI Service; Messaging System에서 아래 값 수정 후 J2EE서비스를 재시작이 필요합니다.
system.queueParallelism.perInterface = true
system.queueParallelism.maxReceivers = 10(노드수 2개 * 스레드수 10개 = 총 스레드수 20개)

위 설정에 NWA > Configuration and Adaministration > Adapter Engine >PI Receiver Parallelism 설정은 특정 인터페이스나 규칙에 따라 최대연결수가 초과되지 않도록 조정이 가능한것 같습니다. 그리고 MessagePrioritization 설정을 통해 인터페이스 우선순위를 설정할수 있는데 해당 설정에 따라 시스템에서 할당되는 자원의 퍼센트가 달라지게 되며 우선순위가 높은 인터페이스일수록 디스패쳐 대기열에서 먼저 처리되는것 같습니다.

전체적인 스레드 흐름을 보면 정확하지는 않지만
  1. Sender Adapter(Adapter Engine) 메시지 수신및 폴링
  2. 스레드가 메시지를 대기열(디스패쳐큐)에 넣음
  3. 메시지설정 및 규칙(우선순위, 병렬처리 등)에 따른 메시지지정
  4. IB > ICO에 설정된 송,수신 설정반영(Receiver Determination)
  5. 3번작업과 동일
  6. 매핑작업
  7. Receier Adapter 처리

출처

Thread System
1625458 - How to check thread usage on SAP NetWeaver Application Server for Java
SAP PO Async Message Processing Analysis
Java Service Properties that May Require changes

댓글 없음:

댓글 쓰기

최근글

9월 태안~천안 아이와 3박4일 가족 여행지