memcache鏈結超時問題

2021-06-26 11:01:59 字數 2224 閱讀 8246

spymemcache的timed out waiting for operation 問題**

主要原因:在想memcache客戶端新增獲取資料時,主要spymemcache是基於nio非同步獲取的,所以當獲取資料時會把任務新增任務佇列等待執行(如圖1),同時spymemcache也會做資料獲取的鏈結超時驗證,預設時間2500毫秒,如果超過2500就會報異常(如圖2)。所以歸根到底還是從快取獲取資料任務太多,後面新增的資料需要等待前面的任務完成才可以繼續執行,但後面任務有時間限制,所以才會出現這個問題。

@override

public t get(string key, transcodertc) catch (interruptedexception e) catch (executionexception e) else

} catch (timeoutexception e) }圖0

圖一@override

public getfutureasyncget(final string key, final transcodertc)

@override

public void gotdata(string k, int flags, byte data)

@override

public void complete()

});rv.setoperation(op);

mconn.enqueueoperation(key, op);

return rv;

}圖2public t get(long duration, timeunit units) throws interruptedexception,

timeoutexception, executionexception

throw new checkedoperationtimeoutexception(

"timed out waiting for operation", op);

} else

if (op != null && op.haserrored())

if (iscancelled())

if (op != null && op.istimedout())

/* todo: re-add assertion that op.getstate() == operationstate.complete */

return objref.get();

}xmemcache

xmemcache的get方法原始碼最終還是訪問這個fetch0方法,

從原始碼分析 xmemcache 也會 報錯timed out,大致原理和spymemcache一致

圖一@suppresswarnings("unchecked")

private final object fetch0(final string key, final byte keybytes,

final commandtype cmdtype, final long timeout,

transcodertranscoder) throws interruptedexception,

timeoutexception, memcachedexception, memcachedexception

if (transcoder == null)

if (cmdtype == commandtype.gets_one) else

}圖2private void latchwait(final command cmd, final long timeout,

final session session) throws interruptedexception,

timeoutexception

} else catch (exception e)

}throw new timeoutexception(

"timed out("

+ timeout

+ " milliseconds) waiting for operation while connected to "

+ session);}}

3個人解決思路

1:控制memcache任務佇列

2:補做異常

4:返回null

訪問TOP鏈結超時和重置問題

前一陣子配合乙個isv一直在查訪問top服務鏈結被重置的問題,當時認為是sdk的問題,因此我就將sdk的資料鏈路層 單獨剝離出來給isv測試,沒有發現鏈結重置的問題。在加上部分業務 以後,有出現服務重置,但是概率很低。今天isv同學給我發來了修改後的 重置情況降低 這種修改還是有道理的,因此後續配合...

訪問TOP鏈結超時和重置問題

前一陣子配合乙個isv一直在查訪問top服務鏈結被重置的問題,當時認為是sdk的問題,因此我就將sdk的資料鏈路層 單獨剝離出來給isv測試,沒有發現鏈結重置的問題。在加上部分業務 以後,有出現服務重置,但是概率很低。今天isv同學給我發來了修改後的 重置情況降低 這種修改還是有道理的,因此後續配合...

MongoDB Java鏈結超時問題解決彙總

先用一張圖來描述mongodb連線超時問題 以下是我在網路上收集到的 官方的解決方法鏈結描述 set the tcp keepalive鏈結描述 聚合查詢解決方案是建立相關的索引鏈結描述 正確建立索引將background設定成非同步的 db.getcollection project ensure...