JavaScript 활동에서 무한 루프 발견 및 종료

IBM Business Process Manager 애플리케이션 내에서 실행 중인 JavaScript 코드에서 무한 루프가 발생할 수 있습니다. 무한 루프를 발견하고 선택적으로 이 루프를 종료하기 위해 100Custom.xml 파일에서 JavaScript 루프 발견 매개변수를 구성할 수 있습니다.

IBM BPM 애플리케이션 내에서 실행 중인 JavaScript 코드에서 무한 루프가 발생하면, 다른 자원에도 영향을 미칩니다. 예를 들어, 서버가 종료될 때까지 Process Center 또는 Process Server 스레드가 유실되어 서버 가용성에 영향을 미칩니다. 하지만 루핑 중인 JavaScript 활동을 식별하는 것은 어려울 수 있습니다.

IBM BPM은 각 스크립트 활동에서 실행된 JavaScript 명령어 수를 모니터합니다. JavaScript 런타임은 명령어 카운터가 IBM BPM 엔진에 의해 설정된 한계에 도달하면 IBM BPM 엔진에 알립니다. 명령어 카운터 임계값에 도달하면 IBM BPM 엔진은 스크립트 활동이 실행된 기간을 확인합니다.

참고:
  • Java 메소드에 대한 호출 또는 IBM BPM JavaScript API 호출(예: tw.system.executeServiceByName)은 하나의 명령어로 계수됩니다.
  • 서버 측 컴포넌트에 의해 참조되는 관리 대상 서버 측 파일 내 JavaScript 코드는 하나의 명령어가 아니라 개별 명령어로 계수됩니다.
  • 현재는 2천 500만 개의 JavaScript 명령어라는 하드 코딩된 제한이 있습니다. APAR JR51504에서는 이 제한을 변경하는 기능을 소개합니다. JR51504: JAVASCRIPT LOOP DETECTION DOES NOT CATCH LOOPS THAT SPEND MOST OF THE TIME IN JAVA CODE를 참조하십시오.
loop-detection-exception 매개변수가 false로 설정되면 다음 메시지 중 하나가 SystemOut.log 파일에 기록됩니다.
  • CWLLG2261W: Infinite loop suspected after {0} seconds in ''UKNOWN'' activity. If this script is not in a loop, increase the loop-detection-duration property.
  • CWLLG2263W: Infinite loop suspected after {0} seconds in ''{1}'', for BPD ''{2}'', script activity ''{3}''. If this script is not in a loop, increase the loop-detection-duration property.
  • CWLLG2265W: Infinite loop suspected after {0} seconds in service ''{1}''. If this service is not in a loop, increase the loop-detection-duration property
loop-detection-exception 매개변수가 true로 설정되면 다음 메시지 중 하나가 SystemOut.log 파일에 기록됩니다.
  • CWLLG2262E: Infinite loop detected after {0} seconds, ''UKNOWN'' activity terminated. If this script is not in a loop, increase the loop-detection-duration property.
  • CWLLG2264E: Infinite loop detected after {0} seconds in ''{1}'', for BPD ''{2}'', script activity ''{3}'' terminated. If this script is not in a loop, increase the loop-detection-duration property.
  • CWLLG2266E: Infinite loop detected after {0} seconds, service ''{1}'' terminated. If this service is not in a loop, increase the loop-detection-duration property.

loop-detection-duration 매개변수에 의해 지정된 값이 초과되면 활동이 무한 루프 상태인 것으로 간주됩니다. 기본 지속 기간은 20초로 설정되지만 이 값은 구성할 수 있습니다(다음 예 참조).

기본적으로 무한 루프가 발견되면 IBM BPM 엔진은 SystemOut.log 파일에 경고를 기록하지만 스크립트 활동은 계속됩니다. 무한 루프 상태의 스크립트 활동을 종료하도록 IBM BPM 엔진을 구성하려면 loop-detection-exception 매개변수를 true로 설정하십시오.

100Custom.xml 파일에서 다음과 같이 JavaScript 루프 발견 매개변수를 구성하십시오.
<common merge="mergeChildren">
  <javascript-engine>
    <loop-detection-duration>90</loop-detection-duration>            
    <loop-detection-exception>true</loop-detection-exception>
  </javascript-engine>
</common>