Memcache連接超時(shí)什么原因?
最近遇到一個(gè)工作上的BUG.
大家知道JAVA NIO的異步阻塞IO. 我們有個(gè)客戶(hù)端用來(lái)做緩存的查詢(xún)和插入操作. 突然有一天線(xiàn)上報(bào)警, 緩存的查詢(xún)超時(shí)了. 然后趕緊拉緩存的人解決(大公司的人真是慢, 效率太差了). 緩存的人直接截了個(gè)圖和我們說(shuō), 它們Server每次查詢(xún)都是10ms以?xún)?nèi), 根本沒(méi)有超時(shí)發(fā)生. 不是他們的問(wèn)題. 最后經(jīng)過(guò)定位之后, 原因在于Memcache的客戶(hù)端是NIO模型, 只起了一個(gè)線(xiàn)程, 做多路復(fù)用. BUT!! 由于當(dāng)時(shí)CPU已經(jīng)有點(diǎn)高了.(50% 實(shí)際看起來(lái)不高). 但是服務(wù)器那里因?yàn)槭怯昧司€(xiàn)程池, 已經(jīng)起了1000多個(gè)java線(xiàn)程了.. 導(dǎo)致CPU調(diào)度不過(guò)來(lái)了.. 緩存取的速度很快, 但是由于只有一個(gè)線(xiàn)程, CPU調(diào)度到緩存的線(xiàn)程的時(shí)候 ,已經(jīng)超時(shí)了....
然后..解決方式就是加機(jī)器.. 結(jié)論: (公司里這幫人能力也真的是挺菜的.)