Job stopped with an unexpected exit code: 0xE0434352 ___

오케스트레이터 한 폴더 내에 5분마다 실행되는 프로세스 3개와 10분마다 실행되는 프로세스 1개가 있습니다.

그 중 5분마다 실행되는 프로세스 1개와 10분마다 실행되는 프로세스 1개에서 수십 번에 한 번씩 표제와 같은 에러가 발생하면서 프로세스가 실패합니다.
로그도 보면 프로세스 시작됐다는 로그밖에 안 남아있습니다.

몇 개월간 해당 에러가 없었는데 지난주부터 발생하기 시작했습니다.
그리고 에러가 나는 두 프로세스가 겹치지 않을 때도 에러가 발생합니다.

찾아보니 엑셀 Activity에서 발생하는 에러코드라는데, 계속 실패하는게 아니라서 디버깅에서 재현하기도 어렵습니다. 오류를 어떻게 추적하면 좋을까요?

이벤트 뷰어에서 해당 에러 발생 시간 추적해보면 좀 더 자세한 내용이 나와있을 수 있습니다.
아마 Windows 로그 - 응용 프로그램 쪽에 있을 겁니다.
image

이 건에도 해당되는 얘기인진 모르겠는데 제가 본 사례 중에는 메모리 부족 때문에 엑셀과 로봇 프로세스가 강제로 종료된 적이 있습니다.

감사합니다. 이벤트 뷰어에서 에러 추적하니 OutOfMemoryException이었습니다.
근데 메모리는 충분한데 왜 이런 Exception이 발생할까요? ㅠ

System.OutOfMemoryException: Insufficient memory to continue the execution of the program.

저도 그 사례 목격했을 때, 정확한 원인이 뭐였는지는 파악하진 못했습니다 ㅠㅠ

다만 도움이 도움이 될 말한 내용들은 좀 찾았습니다.

  1. 메모리 사용량 추적
    로그메시지에 아래 내용 사용하면 그 시점의 Uipath로봇이 점유 중인 메모리 용량이 나온다고 합니다.
    System.Diagnostics.Process.GetCurrentProcess.PrivateMemorySize64
    그냥 찍으면 바이트로 나오니 적절하게 나눠서 MB또는 GB 단위로 군데군데 로그 남겨보면 참고가 될 수 있습니다.

  2. 가비지콜렉션 수동 실행으로 메모리 확보
    invoke code나 invoke method로 아래 내용 실행하면 즉시 가비지콜렉션이 실행되어 수동으로 메모리 정리가 가능합니다.
    GC.Collect
    GC.WaitForPendingFinalizers
    GC.Collect

  3. DT.select보단 Linq Where문 사용
    제가 봤던 사례에서는 For each안에서 dt.select가 열 몇 번 반복하는 형태였습니다.
    그 때 해당 부분을 linq로 변경하고 그 밖의 로직도 좀 더 간결화 하고 나서 개선됐었던 것으로 기억합니다. dt.select가 메모리 사용량을 좀 더 늘리는거 같은데… 의미있는 수준인지는 모르겠습니다.

1 Like

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.