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...