私はehcacheを使用してユーザーセッションを制御していますが、毎回、ユーザーログイン時にこのエラーがログに記録されます。getKeysWithExpiryCheck()メソッドを使用するとehcacheのkeySetがタイムアウトしました
net.sf.ehcache.constructs.nonstop.NonStopCacheException: keySet timed out
at net.sf.ehcache.constructs.nonstop.concurrency.NonStopCacheKeySet$NonStopCacheKeySetIterator$1.performClusterOperationTimedOut(NonStopCacheKeySet.java:103)
at net.sf.ehcache.constructs.nonstop.concurrency.NonStopCacheKeySet$NonStopCacheKeySetIterator$1.performClusterOperationTimedOut(NonStopCacheKeySet.java:96)
at net.sf.ehcache.constructs.nonstop.store.ExecutorServiceStore.executeClusterOperation(ExecutorServiceStore.java:1187)
at net.sf.ehcache.constructs.nonstop.store.NonstopStoreImpl.executeClusterOperation(NonstopStoreImpl.java:704)
at net.sf.ehcache.constructs.nonstop.concurrency.NonStopCacheKeySet$NonStopCacheKeySetIterator.<init>(NonStopCacheKeySet.java:96)
at net.sf.ehcache.constructs.nonstop.concurrency.NonStopCacheKeySet.iterator(NonStopCacheKeySet.java:56)
at net.sf.ehcache.Cache.getKeysWithExpiryCheck(v.java:1906)
...
official ehcache doucmentationは言う:「この方法は非常に長い時間がかかるので、キャッシュの設定によっては、ご利用が期限切れのキーのチェックが必要かどうかを考えてみましょう...」。
私は実際には、20000msが私には十分すぎるように見えるにもかかわらず、このエラーを止めるために増やすべきecache.xmlのタイムアウトがわかりません。ドキュメントには、取られた時間が1000エントリあたり約200ms 。
これは、使用されるehcache.xmlです。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache name="RelianceCache" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
<cache name="READ_USERS_CACHE" maxElementsInMemory="0" eternal="true" overflowToDisk="false">
<terracotta clustered="true" valueMode="serialization" consistency="strong">
<nonstop immediateTimeout="false" timeoutMillis="20000">
<timeoutBehavior type="exception" />
</nonstop>
</terracotta>
</cache>
<terracottaConfig url="TSA_SERVERS:TSA_PORT" rejoin="true" />
</ehcache>
編集: the NonStopCacheKeySet implementationを参照してください、エラーが方法NonStopCacheKeySetIterator
でスローされています。
この場合、キャッシュのサイズに関する情報を提供できますか?または、アプリケーションのライフサイクルをTerracottaサーバーの開始と比較しますか? –
このキャッシュにはログインしているユーザーが含まれているため、サイズを100未満にすることができます。私は本当にテラコッタのサーバーに比べて私のアプリのライフサイクルで何を意味するか分からない。 – QuakeCore
元の例外原因が失われたため、ehcache-core-2.6.8.jarにいくつかのデバッグメッセージを追加しました。 – QuakeCore