OK,
i wrote simple test to show you what is happening. I create 100 threads, and
i start them at the same time. They begin to update the cache.
public class UpdateableObject implements Serializable {
public int i = 0;
}
static int i = 0;
public static void main(String[] args) {
final List<Thread> ts = new ArrayList<Thread>();
for (i = 0; i < 100; i++) {
final Thread t = new Thread(new Runnable() {
int num = i++;
@Override
public void run() {
while (true) {
final long t = System.currentTimeMillis();
final UpdateableObject track =
UpdateableObjectMemCache.instance().get(num);
track.current = ++track.i;
UpdateableObjectMemCache.instance().cache(num,
track);
final long t1 = System.currentTimeMillis();
System.out.println(t1-t);
}
}
});
ts.add(t);
}
for (final Thread thread : ts) {
thread.start();
}
If i increase the number of threads >=200
It blows :
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - ++++
exception thrown while trying to get object from cache for key:
TESTcountpurchase
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - ++++
exception thrown while trying to get object from cache for key:
TESTcountpurchase
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - ++++
exception thrown while trying to get object from cache for key:
TESTcountpurchase
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - null
java.net.SocketTimeoutException
at
sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:201)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:86)
at java.io.DataInputStream.read(DataInputStream.java:132)
at com.danga.MemCached.SockIOPool$SockIO.readLine(SockIOPool.java:1767)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1285)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1209)
at claire.mem.cache.Memcached.get(Memcached.java:85)
at claire.mem.cache.MemCacheManager.cache(MemCacheManager.java:27)
at claire.web.util.PurchaseTracker$2.run(PurchaseTracker.java:138)
at java.lang.Thread.run(Thread.java:619)
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - ++++
exception thrown while trying to get object from cache for key:
TESTcountpurchase
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - ++++
exception thrown while trying to get object from cache for key:
TESTcountpurchase
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - null
java.net.SocketTimeoutException
at
sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:201)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:86)
at java.io.DataInputStream.read(DataInputStream.java:132)
at com.danga.MemCached.SockIOPool$SockIO.readLine(SockIOPool.java:1767)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1285)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1209)
at claire.mem.cache.Memcached.get(Memcached.java:85)
at claire.mem.cache.MemCacheManager.tryCache(MemCacheManager.java:92)
at claire.mem.cache.MemCacheManager.get(MemCacheManager.java:105)
at claire.web.util.PurchaseTracker$2.run(PurchaseTracker.java:135)
at java.lang.Thread.run(Thread.java:619)
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - ++++
exception thrown while trying to get object from cache for key:
TESTcountpurchase
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - null
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - ++++
exception thrown while trying to get object from cache for key:
TESTcountpurchase
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - null
java.net.SocketTimeoutException
at
sun.nio.ch.SocketAdaptor$SocketInputStream.read(SocketAdaptor.java:201)
at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:86)
at java.io.DataInputStream.read(DataInputStream.java:132)
at com.danga.MemCached.SockIOPool$SockIO.readLine(SockIOPool.java:1767)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1285)
at com.danga.MemCached.MemCachedClient.get(MemCachedClient.java:1209)
at claire.mem.cache.Memcached.get(Memcached.java:85)
at claire.mem.cache.MemCacheManager.tryCache(MemCacheManager.java:92)
at claire.mem.cache.MemCacheManager.get(MemCacheManager.java:105)
at claire.web.util.PurchaseTracker$2.run(PurchaseTracker.java:135)
at java.lang.Thread.run(Thread.java:619)
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - ++++
exception thrown while trying to get object from cache for key:
TESTcountpurchase
com.danga.MemCached.MemCachedClient Thu Feb 25 17:10:59 EET 2010 - null
java.net.SocketTimeoutException
Here is simple output of the time taken to update(it is not precise but
gives me some idea...):
1
122
120
73
1
0
72
72
70
421
129
0
1
1
0
425
132
130
1
1
0
367
75