java.util.concurrent.TimeoutException 문제 해결 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

java.util.concurrent.TimeoutException 문제 해결

Gremlin Java 클라이언트는 연결 중 하나에 있는 슬롯을 사용할 수 있을 때까지 기다리는 동안 클라이언트 자체에서 Gremlin 요청 제한 시간이 java.util.concurrent.TimeoutException 초과되면 a를 발생시킵니다. WebSocket 이 제한 시간은 maxWaitForConnection 클라이언트측 구성 가능한 파라미터에 의해 제어됩니다.

참고

클라이언트에서 제한 시간이 초과된 요청은 서버로 전송되지 않으므로, 서버에서 캡처된 지표에는 반영되지 않습니다(예: GremlinRequestsPerSec).

이러한 종류의 제한 시간은 일반적으로 2가지 경우에 발생합니다.

  • 서버가 실제로 최대 용량에 도달. 이 경우 서버의 대기열이 꽉 차게 되는데, 메트릭을 모니터링하여 이를 감지할 수 있습니다. MainRequestQueuePendingRequests CloudWatch 서버에서 처리할 수 있는 병렬 쿼리의 수는 인스턴스 크기에 따라 달라집니다.

    MainRequestQueuePendingRequests 지표에 서버의 보류 중인 요청이 누적되어 표시되지 않는 경우 서버는 더 많은 요청을 처리할 수 있으며, 클라이언트 측 제한으로 인해 제한 시간이 발생합니다.

  • 요청의 클라이언트 제한. 이 문제는 일반적으로 클라이언트 구성 설정을 변경하여 해결할 수 있습니다.

    클라이언트가 보낼 수 있는 최대 병렬 요청 수를 대략적으로 추산할 수 있습니다.

    maxParallelQueries = maxConnectionPoolSize * Max( maxSimultaneousUsagePerConnection, maxInProcessPerConnection )

    클라이언트에 maxParallelQueries 이상을 전송하면 java.util.concurrent.TimeoutException 예외가 발생합니다. 이 문제를 여러 가지 방법으로 해결할 수 있습니다.

    • 연결 제한 시간 증대. 애플리케이션에 지연 시간이 중요하지 않은 경우 클라이언트 maxWaitForConnection 설정을 늘립니다. 그러면 클라이언트가 제한 시간이 초과되기 전에 더 오래 기다리며, 이로 인해 지연 시간이 늘어날 수 있습니다.

    • 연결당 최대 요청 수 증대. 이렇게 하면 동일한 WebSocket 연결을 사용하여 더 많은 요청을 보낼 수 있습니다. 클라이언트의 maxSimultaneousUsagePerConnectionmaxInProcessPerConnection 설정을 늘려서 이 작업을 수행할 수 있습니다. 이러한 설정은 일반적으로 동일한 값을 가져야 합니다.

    • 연결 풀의 연결 수 증대. 클라이언트의 maxConnectionPoolSize 설정을 늘려서 이 작업을 수행할 수 있습니다. 각 연결에서 메모리와 운영 체제 파일 설명자를 사용하고 초기화 중에 and 핸드셰이크가 필요하기 때문에 리소스 사용량이 증가합니다. SSL WebSocket