3

1週間前からこの奇妙なエラーが発生しています。これがスタックトレースです

 ERROR (redisson-netty-1-4) [DNSMonitor(operationComplete:98)] Unable to resolve redis.***********.cache.amazonaws.com java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at io.netty.resolver.dns.DnsNameResolver.doResolveCached(DnsNameResolver.java:613)
at io.netty.resolver.dns.DnsNameResolver.doResolve(DnsNameResolver.java:593)
at io.netty.resolver.dns.DnsNameResolver.doResolve(DnsNameResolver.java:527)
at io.netty.resolver.SimpleNameResolver.resolve(SimpleNameResolver.java:63)

アプリケーションは、redisson クライアントを使用して Elasticache に接続する springboot API です。これらのエラーが表示されますが、API はエラーなしで正常に実行されています。これについてもオンラインで手がかりを得ることができませんでした。ここで似たようなことに直面した人はいますか?

ログにもこのエラーが表示され、その後に上記のエラーが続きます

org.redisson.client.RedisTimeoutException: Redis server response timeout (3000 ms) occured for command: (HGET) with params: [packagesCache, PooledUnsafeDirectByteBuf(ridx: 0, widx: 3, cap: 256)] channel: [id: 0xdfd44ac3, L:/10.0.2.206:42857 - R:redis.kl3ise.0001.use1.cache.amazonaws.com/10.0.1.234:6379]
    at org.redisson.command.CommandAsyncService$11.run(CommandAsyncService.java:682)
    at io.netty.util.HashedWheelTimer$HashedWheelTimeout.expire(HashedWheelTimer.java:663)
    at io.netty.util.HashedWheelTimer$HashedWheelBucket.expireTimeouts(HashedWheelTimer.java:738)
    at io.netty.util.HashedWheelTimer$Worker.run(HashedWheelTimer.java:466)
    at java.lang.Thread.run(Thread.java:748)

ログの追加

Request for schedule for student with access key ab947-cf32-4965-ab06-36d4e904899don date 2018-02-14org.redisson.client.RedisTimeoutException: Redis server response timeout (60000 ms) occured for command: (HEXISTS) with params: [analyzedStudyPlanCache, PooledUnsafeDirectByteBuf(ridx: 0, widx: 9, cap: 256)] channel: [id: 0xe4dc90da, L:/10.0.2.206:56685 – R:redis.kl3ise.0001.use1.cache.amazonaws.com/10.0.1.234:6379]
4

1 に答える 1

2

ログは既にヒントを与えていますUnable to resolve redis.***********.cache.amazonaws.com

最初に、インスタンスが解決できるかどうかを確認してください (Redis サーバーの場所を見つけます)。これを実行するだけで実行できます。

$ host redis.****.cache.amazonaws.com

または単純ping redis.****.cache.amazonaws.comにping応答が得られない場合がありますが、少なくともドメインを解決する必要があります(いくつかのIPアドレスを取得します)

何も返されない場合は、elasticache インスタンスが作成されたばかりでジェットが伝播されていない可能性があります。そのため、ログに do エントリが記録されています。インスタンスがしばらく稼働している場合は、確認してください。 DNS リゾルバーが適切に設定されている。あなたが試すことができる追加のテストとして

$ dig @8.8.8.8 redis.***cache.amazonaws.com +short

これはGoogleパブリックDNSを使用し、そのクエリから回答が得られた場合、問題は定義されたネームサーバーにあります。確認してください/etc/resolv.conf

ドメインを解決できる場合は、elasticache/redis インスタンスが稼働しているかどうか、およびインスタンスからアクセスできるかどうかを確認してみてください。ターミナル経由でこれを行うには、次のようにします。

redis-cli -h redis.***.cache.amazonaws.com

デフォルトのポート 6379 を使用していない場合は、使用できます

redis-cli -h redis.***.cache.amazonaws.com -p XXXX 

ここで、XXXX は構成済みのポートです。

コマンドがない場合は、redis-cli次のように telnet を試すことができます。

telnet redis.***.cache.amazonaws.com 6379

インスタンスが稼働中で、名前を解決できるにもかかわらず接続できないことが確実な場合は、AWS 側のセキュリティ グループを確認してください。おそらくブロックされています。

于 2018-03-03T06:36:07.457 に答える