Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why?
트래픽이 많이 들어오면 superlifter thread가 많이 생성되는 이슈가 있습니다.
비동기 처리를 위해 사용하는 clojure.core의 future 매크로는 항상 solo executor로 cached pool을 사용하도록 되어있는데,
cached pool의 동작은 다음과 같이 동작하기 때문에 스레드가 제한없이 생성될 수 있습니다.
clojure.lang.Agent의 pooledExecutor를 사용하여, 고정 개수의 스레드를 할당하는 fixed pool을 적용해보고 부하 테스트로 성능을 비교해볼 예정입니다.
pooledExecutor는 newFixedThreadPool이며, 2 + 프로세서 개수만큼의 스레드를 생성하도록 되어있습니다.
큐잉 관련
newFixedThreadPool이 CachedThreadPool과 다른점은, idle 스레드가 없으면 LinkedBlockingQueue에 대기중인 요청이 쌓입니다.
큐의 크기는 옵션 파라미터를 넣지않으면 동적으로 확장되게 되어있어, OOM 발생시까지 쌓이는 것 같습니다.
호출부 살펴보면 옵션 파라미터를 넣고있지 않아서, 무한대로 설정되어있습니다.
(참고: https://medium.com/@amardeepbhowmick92/task-queuing-in-executors-newfixedthreadpool-31bc8c24b4d2)