이슈 정리
Sentry에서 Trigger에 Triggerer's async thread was blocked for xx seconds, likely by a badly-written .. 하는 에러가 Sentry를 통해 많이 발생한 것을 확인.
이슈가 발생한 코드
async def block_watchdog(self):
"""
Watchdog loop that detects blocking (badly-written) triggers.
Triggers should be well-behaved async coroutines and await whenever
they need to wait; this loop tries to run every 100ms to see if
there are badly-written triggers taking longer than that and blocking
the event loop.
Unfortunately, we can't tell what trigger is blocking things, but
we can at least detect the top-level problem.
"""
while not self.stop:
last_run = time.monotonic()
await asyncio.sleep(0.1)
# We allow a generous amount of buffer room for now, since it might
# be a busy event loop.
time_elapsed = time.monotonic() - last_run
if time_elapsed > 0.2:
self.log.error(
"Triggerer's async thread was blocked for %.2f seconds, "
"likely by a badly-written trigger. Set PYTHONASYNCIODEBUG=1 "
"to get more information on overrunning coroutines.",
time_elapsed,
)
Stats.incr('triggers.blocked_main_thread')
이 함수는 무한 루프를 실행하면서 이벤트 루프가 차단되지 않도록 매 0.1초마다 실행을 확인.
이벤트 루프에서 0.1초 await후에 다시 해당 task로 돌아왔을 때 0.2초이상이 걸렸다면 실행에 지연이 있다고 생각하고 error를 기록한다. 즉, 트리거의 이벤트 루프에 병목이 있다고 가정한다.
해결책
kubernetes상 리소스가 많이 부족한 상황은 아니었는데도 발생해서 처음에 이해할 수 없었는데, stackoverflow에서 주로 memory 이슈라는 얘기가 많아서 trigger의 request resource를 1536MiB로 늘렸더니 거의 발생하지 않았다. (일 10회 정도)
반응형
'Computer Engineering > My Stack Overflow' 카테고리의 다른 글
Airflow(에어플로우) could not queue task issue (0) | 2022.11.22 |
---|---|
[파이썬 상대경로 import 에러] ImportError: attempted relative import with no known parent package (18) | 2017.09.23 |