TimedSupervisorTask task supervisor timed out - TimeoutException
2022, Jul 16
java springboot
problem
서비스 올릴 때 발생하는 오류로 오류와 무관하게 서비스는 잘 되고 있다.
error
07:53:02.003 ryClient-0 WARN .n.d.TimedSupervisorTask: 73 run task supervisor timed out
java.util.concurrent.TimeoutException: null
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at com.netflix.discovery.TimedSupervisorTask.run(TimedSupervisorTask.java:68)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
07:53:17.011 ryClient-0 WARN .n.d.TimedSupervisorTask: 73 run task supervisor timed out
java.util.concurrent.TimeoutException: null
at java.util.concurrent.FutureTask.get(FutureTask.java:205)
at com.netflix.discovery.TimedSupervisorTask.run(TimedSupervisorTask.java:68)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
07:53:25.348 main DEBUG s.a.c.s.c.c.CipherConfig: 19 cipherCrypto CipherCrypto:CipherCryptoProperties{encryptAlgorithm='AES/ECB/PKCS5Padding'}
07:53:25.363 main DEBUG s.a.c.s.c.c.JsonCrypto : 30 <init> JsonCrypto[CipherCrypto], CryptoProperties{enabled=true, encryptFields=[message, metadata.address, name, email, phone, extra, answerValues]}
07:53:37.015 ryClient-0 WARN .n.d.TimedSupervisorTask: 84 run task supervisor rejected the task
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@354aaa21 rejected from java.util.concurrent.ThreadPoolExecutor@704822ec[Running, pool size = 2, active threads = 2, queued tasks = 0, completed tasks = 0]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
at com.netflix.discovery.TimedSupervisorTask.run(TimedSupervisorTask.java:66)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
try 1 (실패)
application.yml에 아래 속성 추가
eureka:
client:
fetch-registry: true
register-with-eureka: true
stackoverflow - problems-spring-cloud-config-and-spring-cloud-bus
try 2
eureka버그로 버전 업 필요
try 3
client.registryFetchIntervalSeconds를 30초로 늘려주라고 함
30초로 늘려도 발생해서 60초로 설정함.
60초로 늘려도 발생해서..
cause
https://www.cnblogs.com/linus-tan/p/14814045.html
여기서 말하는 원인은
프로젝트가 시작되고 초기화되면 두 가지 타이밍 작업이 시작됩니다.
하나는 유레카에 등록하는 것, 즉 하트비트 스레드이고,
다른 하나는 유레카에서 서비스 등록 목록을 가져오는 것, 즉 새로 고칠 스레드입니다.
등록 목록 캐시.위의 두 스레드는 30초마다 실행되며 기본 타임아웃 시간은 30초이므로
30초 이내에 작업이 완료되지 않으면 Timeout 예외가 발생합니다.
하트비트를 보내는 작업은 비교적 간단하며 일반적으로 시간이 초과되지 않습니다.
등록 목록을 얻는 작업은 오랜 시간이 걸립니다.
레지스트리는 모든 서비스 통신의 기반이므로 여러 서버에 배포된 응용 프로그램은 통신하는 데
시간이 걸릴 수 있으며 시간 초과가 자주 발생합니다.