Kirk, Mike,
I have performed load testing on my app. Here are the details about
machines used:
Machine 1 (Voldemort):
----------------------
Machine configuration:
Dual Core CPU
4GB RAM
Voldemort Configuration:
node.id=0
max.threads=5000
############### DB options ######################
http.enable=true
socket.enable=true
# BDB
bdb.write.transactions=false
bdb.flush.transactions=false
bdb.cache.size=1G
storage.configs=voldemort.store.bdb.BdbStorageConfiguration,
voldemort.store.readonly.ReadOnlyStorageConfiguration
Machine 2 (my app):
-------------------
Machine configuration:
Dual Core CPU
4GB RAM
Load test observations:
App running on this machine connects to voldemort in machine 1 to do
the operations.
I am using Jmeter to do the load test. No. of threads is 300 and loop
count is forever in Jmeter load test settings.
After running the test for 15 minutes, getting the following errors in
my app logs:
1. 17:55:52 WARN [BannagePeriodFailureDetector]: Node 0 set as
unavailable
voldemort.store.UnreachableStoreException: Failure while checking out
socket for 192.168.5.30:6666(vp1):
at voldemort.store.socket.SocketPool.checkout(SocketPool.java:
92)
at voldemort.store.socket.SocketStore.get(SocketStore.java:
121)
at voldemort.store.socket.SocketStore.get(SocketStore.java:47)
at voldemort.store.logging.LoggingStore.get(LoggingStore.java:
105)
at voldemort.store.routed.RoutedStore
$1.execute(RoutedStore.java:79)
at voldemort.store.routed.RoutedStore
$GetCallable.call(RoutedStore.java:900)
at voldemort.store.routed.RoutedStore
$GetCallable.call(RoutedStore.java:880)
at java.util.concurrent.FutureTask
$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor
$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor
$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.util.concurrent.TimeoutException: Could not acquire
resource in 500 ms.
at
voldemort.utils.pool.KeyedResourcePool.checkout(KeyedResourcePool.java:
104)
at voldemort.store.socket.SocketPool.checkout(SocketPool.java:
87)
Then,
17:55:52 WARN [DlrStatusHandlerTask]: 1 reads required, but 0
succeeded.
voldemort.store.InsufficientOperationalNodesException: 1 reads
required, but 0 succeeded.
at voldemort.store.routed.RoutedStore.get(RoutedStore.java:
562)
at voldemort.store.routed.RoutedStore.get(RoutedStore.java:
454)
at voldemort.store.routed.RoutedStore.get(RoutedStore.java:72)
at voldemort.store.DelegatingStore.get(DelegatingStore.java:
59)
at
voldemort.store.stats.StatTrackingStore.get(StatTrackingStore.java:64)
at
voldemort.store.serialized.SerializingStore.get(SerializingStore.java:
79)
at voldemort.store.DelegatingStore.get(DelegatingStore.java:
59)
at
voldemort.store.versioned.InconsistencyResolvingStore.get(InconsistencyResolvingStore.java:
50)
at
voldemort.client.DefaultStoreClient.get(DefaultStoreClient.java:121)
at
voldemort.client.DefaultStoreClient.get(DefaultStoreClient.java:154)
at
com.netcore.mammcwt.store.StoreWrapper.get(StoreWrapper.java:55)
at
com.netcore.mammcwt.store.StoreDAO.getCommunicationId(StoreDAO.java:
343)
at
com.netcore.mammcwt.dlrstatushandler.DlrStatusHandlerTask.run(DlrStatusHandlerTask.java:
67)
at java.util.concurrent.ThreadPoolExecutor
$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor
$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: voldemort.store.UnreachableStoreException: Failure while
checking out socket for 192.168.5.30:6666(vp1):
at voldemort.store.socket.SocketPool.checkout(SocketPool.java:
92)
at voldemort.store.socket.SocketStore.get(SocketStore.java:
121)
at voldemort.store.socket.SocketStore.get(SocketStore.java:47)
at voldemort.store.logging.LoggingStore.get(LoggingStore.java:
105)
at voldemort.store.routed.RoutedStore
$1.execute(RoutedStore.java:79)
at voldemort.store.routed.RoutedStore
$GetCallable.call(RoutedStore.java:900)
at voldemort.store.routed.RoutedStore
$GetCallable.call(RoutedStore.java:880)
at java.util.concurrent.FutureTask
$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
... 3 more
Caused by: java.util.concurrent.TimeoutException: Could not acquire
resource in 500 ms.
at
voldemort.utils.pool.KeyedResourcePool.checkout(KeyedResourcePool.java:
104)
at voldemort.store.socket.SocketPool.checkout(SocketPool.java:
87)
... 11 more
Then,
18:00:30 INFO [DefaultStoreClient]: bootstrapping metadata.
18:00:30 WARN [DlrStatusHandlerTask]: org.jdom.JDOMException: Could
not load default SAX parser: org.apache.xerces.parsers.SAXParser: SAX2
driver class org.apache.xerces.parsers.SAXParser not found:
org.apache.xerces.parsers.SAXParser
voldemort.xml.MappingException: org.jdom.JDOMException: Could not load
default SAX parser: org.apache.xerces.parsers.SAXParser: SAX2 driver
class org.apache.xerces.parsers.SAXParser not found:
org.apache.xerces.parsers.SAXParser
at voldemort.xml.ClusterMapper.readCluster(ClusterMapper.java:
106)
at
voldemort.client.AbstractStoreClientFactory.getFailureDetector(AbstractStoreClientFactory.java:
201)
at
voldemort.client.AbstractStoreClientFactory.getRawStore(AbstractStoreClientFactory.java:
154)
at
voldemort.client.DefaultStoreClient.bootStrap(DefaultStoreClient.java:
80)
at
voldemort.client.DefaultStoreClient.<init>(DefaultStoreClient.java:74)
at
voldemort.client.AbstractStoreClientFactory.getStoreClient(AbstractStoreClientFactory.java:
124)
at
voldemort.client.AbstractStoreClientFactory.getStoreClient(AbstractStoreClientFactory.java:
118)
at
com.netcore.mammcwt.store.StoreWrapper.<init>(StoreWrapper.java:44)
at
com.netcore.mammcwt.cache.SingleInitializationCache.getVendorAckIdCommIdMapStoreClient(SingleInitializationCache.java:
181)
at com.netcore.mammcwt.store.StoreDAO.<init>(StoreDAO.java:46)
at
com.netcore.mammcwt.dlrstatushandler.DlrStatusHandlerTask.run(DlrStatusHandlerTask.java:
65)
at java.util.concurrent.ThreadPoolExecutor
$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor
$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.jdom.JDOMException: Could not load default SAX parser:
org.apache.xerces.parsers.SAXParser: SAX2 driver class
org.apache.xerces.parsers.SAXParser not found:
org.apache.xerces.parsers.SAXParser
at org.jdom.input.SAXBuilder.createParser(SAXBuilder.java:618)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:460)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:888)
at voldemort.xml.ClusterMapper.readCluster(ClusterMapper.java:
93)
... 13 more
Caused by: java.lang.ClassNotFoundException:
org.apache.xerces.parsers.SAXParser
at
org.xml.sax.helpers.XMLReaderFactory.loadClass(XMLReaderFactory.java:
189)
at
org.xml.sax.helpers.XMLReaderFactory.createXMLReader(XMLReaderFactory.java:
180)
at org.jdom.input.SAXBuilder.createParser(SAXBuilder.java:610)
... 16 more
Caused by: java.lang.ClassNotFoundException:
org.apache.xerces.parsers.SAXParser
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:
301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at
org.xml.sax.helpers.NewInstance.newInstance(NewInstance.java:49)
at org.xml.sax
My use case is, the app should support 300 req/sec. Can you please
help me in tuning parameters?
Thanks,
Mani