이벤트 핸들러가 동시에 처리되는 한계점이 있나요?

MQTT라이브러리를 사용하여 데이터를 전달 받으면
콜백이벤트를 발생시키는 코드를 작성하고 있습니다.

초당 약 700 개의 데이터가 발생하는 것 까지는 문제가 없습니다.
그러나 700건보다 많은 데이터가 발생하면
메모리 사용량이 점차 증가하고 애플리케이션이 종료됩니다.
(증가하는 동안 CPU 사용률은 40 ~ 70 %정도 되고 콜백 이벤트는 지속적으로 발생합니다)

처음에는 메모리 누수가 의심되었는데,
메모리가 늘어난 시점에서 데이터가 발생을 중단시키고 지켜본 결과,
그동안 밀린 이벤트들이 지속적으로 처리되면서
메모리 사용량이 점차 감소하고
메모리 사용량이 처음 실행되었을 때와 유사하게 돌아갑니다.

많은양의 데이터가 발생하면 CPU 사용률이 100 %가 아니고
이벤트가 발생하지 않아도 누적 이벤트가 실행되는 점이
이벤트 핸들러의 동시처리 제한이 되어 있지 않은가 싶은데
혹시 이와 관련해서 참조할만한 자료나 키워드를 알려주시면 감사하겠습니다!

추가-------------------------------------------------------------------------
콜백 이벤트 부분을 매우 간소화 시키면 메모리 상승이 발생하지 않습니다.

구글링을 해봤을 때 이벤트가 완전히 종료될때까지 인스턴스가 유지된다고 봤는데
이 부분이 메모리 상승률에 영향을 끼치는 부분이라 생각됩니다.

정 안되면 데이터를 전달받으면 큐에 쌓고
별도의 서비스를 돌리려 하는데 근본적인 해결책은 아닌거 같네요.

이벤트 핸들러의 문제를 해결할 수 있게 도움 부탁드립니다.

1개의 좋아요

이벤트 핸들러가 동시에 처리되는 한계점은 스펙상으로는 없는 것으로 알고 있습니다. 다만, 이벤트가 병렬로 발생하면서 생성된 스레드의 증가 및 각 스레드의 처리량으로 인해 병목현상이 생기는게 아닌가 생각해봅니다.
MQTT 처럼 대량의 데이터가 빠르게 발생하는 구조에서, 개별 이벤트 처리로 보통 처리하지 않는데요. 말씀하신 것처럼 큐잉 분산처리를 하는게 일반적인 처리 방식입니다.

1개의 좋아요

좀더 MQTT에 전문적인 분이 답변을 주시면 좋을 듯 합니다.

1개의 좋아요

콜백이벤트는 최대한 경량화를 하고 별도로 처리하는 방향이 맞나보군요…

제가 아직 이런 작업에는 익숙하지가 않아서 올바르지 않은 방향이라고 생각했습니다

답변주셔서 감사합니다.

1개의 좋아요