

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

# `java.util.concurrent.TimeoutException` 문제 해결
<a name="best-practices-gremlin-java-exceptions-TimeoutException"></a>

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

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

이러한 종류의 제한 시간은 일반적으로 2가지 경우에 발생합니다.
+ **서버가 실제로 최대 용량에 도달.** 이 경우 서버의 대기열이 꽉 차게 되는데, 이는 [MainRequestQueuePendingRequests](cw-metrics.md#cw-metrics-available) CloudWatch 지표를 모니터링하여 감지할 수 있습니다. 서버에서 처리할 수 있는 병렬 쿼리의 수는 인스턴스 크기에 따라 달라집니다.

  `MainRequestQueuePendingRequests` 지표에 서버의 보류 중인 요청이 누적되어 표시되지 않는 경우 서버는 더 많은 요청을 처리할 수 있으며, 클라이언트 측 제한으로 인해 제한 시간이 발생합니다.
+ **요청의 클라이언트 제한.** 이 문제는 일반적으로 클라이언트 구성 설정을 변경하여 해결할 수 있습니다.

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

  ```
  maxParallelQueries = maxConnectionPoolSize * Max( maxSimultaneousUsagePerConnection, maxInProcessPerConnection )
  ```

  클라이언트에 `maxParallelQueries` 이상을 전송하면 `java.util.concurrent.TimeoutException` 예외가 발생합니다. 이 문제를 여러 가지 방법으로 해결할 수 있습니다.
  + *연결 제한 시간 증대.* 애플리케이션에 지연 시간이 중요하지 않은 경우 클라이언트 `maxWaitForConnection` 설정을 늘립니다. 그러면 클라이언트가 제한 시간이 초과되기 전에 더 오래 기다리며, 이로 인해 지연 시간이 늘어날 수 있습니다.
  + *연결당 최대 요청 수 증대.* 이렇게 하면 동일한 WebSocket 연결을 사용하여 더 많은 요청을 보낼 수 있습니다. 클라이언트의 `maxSimultaneousUsagePerConnection` 및 `maxInProcessPerConnection` 설정을 늘려서 이 작업을 수행할 수 있습니다. 이러한 설정은 일반적으로 동일한 값을 가져야 합니다.
  + *연결 풀의 연결 수 증대.* 클라이언트의 `maxConnectionPoolSize` 설정을 늘려서 이 작업을 수행할 수 있습니다. 각 연결에서 메모리와 운영 체제 파일 설명자를 사용하고 초기화 중에 SSL 및 WebSocket 핸드셰이크가 필요하기 때문에 리소스 사용량이 증가합니다.