Pecahkan masalah java.util.concurrent.TimeoutException - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pecahkan masalah java.util.concurrent.TimeoutException

Klien Gremlin Java melempar java.util.concurrent.TimeoutException ketika permintaan Gremlin habis waktu pada klien itu sendiri sambil menunggu slot di salah satu koneksi tersedia. WebSocket Durasi batas waktu ini dikendalikan oleh parameter konfigurasi di sisi klien maxWaitForConnection.

catatan

Karena permintaan yang kehabisan waktu di klien tidak pernah dikirim ke server, mereka tidak tercermin dalam salah satu metrik yang direkam di server, seperti GremlinRequestsPerSec.

Batas waktu semacam ini umumnya disebabkan oleh salah satu dari dua cara berikut:

  • Server sebenarnya mencapai kapasitas maksimum. Jika ini masalahnya, antrian di server terisi, yang dapat Anda deteksi dengan memantau metrik. MainRequestQueuePendingRequests CloudWatch Jumlah kueri paralel yang dapat ditangani server bergantung pada ukuran instansnya.

    Jika metrik MainRequestQueuePendingRequests tidak menampilkan penumpukan permintaan tertunda di server, maka server dapat menangani lebih banyak permintaan dan batas waktu disebabkan oleh throttling sisi klien.

  • Pelambatan permintaan klien. Hal ini umumnya dapat diperbaiki dengan mengubah pengaturan konfigurasi klien.

    Jumlah maksimum permintaan paralel yang dapat dikirim klien dapat diperkirakan secara kasar sebagai berikut:

    maxParallelQueries = maxConnectionPoolSize * Max( maxSimultaneousUsagePerConnection, maxInProcessPerConnection )

    Mengirim lebih dari maxParallelQueries ke klien menyebabkan pengecualian java.util.concurrent.TimeoutException. Anda biasanya dapat memperbaikinya dengan beberapa cara:

    • Tingkatkan durasi batas waktu koneksi. Jika latensi tidak penting untuk aplikasi Anda, tingkatkan pengaturan maxWaitForConnection klien. Klien kemudian menunggu lebih lama sebelum waktu habis, yang pada gilirannya dapat meningkatkan latensi.

    • Tingkatkan permintaan maksimum per koneksi. Ini memungkinkan lebih banyak permintaan dikirim menggunakan WebSocket koneksi yang sama. Lakukan ini dengan meningkatkan pengaturan maxSimultaneousUsagePerConnection dan maxInProcessPerConnection klien. Pengaturan ini umumnya memiliki nilai yang sama.

    • Tingkatkan jumlah koneksi di kolam koneksi. Lakukan ini dengan meningkatkan pengaturan maxConnectionPoolSize klien. Biaya peningkatan konsumsi sumber daya, karena setiap koneksi menggunakan memori dan deskriptor file sistem operasi, dan memerlukan dan jabat tangan selama inisialisasiSSL. WebSocket