I am doing a performance test for evaluating our product using JMeter. Our product is deployed in a Weblogic server and has an Oracle database.
In the performance test, JMeter client accesses a set of EJB s which reside in the weblogic server and call the relevant functions.
But after the test, I see some exceptions in jmeter log. I have put the exceptions encountered during the test below. It seems somehow JMeter client cannot access to the EJB instances in the weblogic server due to the load. But I am not sure. Could you please help me to solve this issue?
javax.ejb.EJBException: No message was received for: '240' seconds; nested exception is: weblogic.rjvm.PeerGoneException: No message was received for: '240' seconds
weblogic.rjvm.PeerGoneException: No message was received for: '240' seconds
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:234)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:348)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:259)
at com.xxxx.xxx.impl.adminagent.AdminAgentInfoSessionBeanWithAffinity_337280_AdminAgentInfoSessionRemoteWithAffinityImpl_1034_WLStub.setAdminAgentInfoForSecureElement(Unknown Source)
at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:73)
at $Proxy7.setAdminAgentInfoForSecureElement(Unknown Source)
at com.xxxx.xxx.bench.subscription.SubscriptionUseCases.addAdminAgentInfo(SubscriptionUseCases.java:388)
at com.xxxx.xxx.bench.sampler.m1.create.AddAATriggerInfoSampler.runTest(AddAATriggerInfoSampler.java:145)
at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:165)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:300)
at java.lang.Thread.run(Unknown Source)
javax.ejb.EJBException: No message was received for: '240' seconds; nested exception is: weblogic.rjvm.PeerGoneException: No message was received for: '240' seconds
at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.unwrapRemoteException(RemoteBusinessIntfProxy.java:112)
at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:91)
at $Proxy7.setAdminAgentInfoForSecureElement(Unknown Source)
at com.xxxx.xxx.bench.subscription.SubscriptionUseCases.addAdminAgentInfo(SubscriptionUseCases.java:388)
at com.xxxx.xxx.bench.sampler.m1.create.AddAATriggerInfoSampler.runTest(AddAATriggerInfoSampler.java:145)
at org.apache.jmeter.protocol.java.sampler.JavaSampler.sample(JavaSampler.java:165)
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:300)
at java.lang.Thread.run(Unknown Source)
Caused by: weblogic.rjvm.PeerGoneException: No message was received for: '240' seconds
According to the Oracle Forum Post this occurs when there is no network connectivity between the client (JMeter in this case) and server (EJB Application deployed on ManagedServer) with in the specific time limit (default : 240 seconds) the PeerGoneException is thrown.
If the performance test configuration you are doing is the simulation of the actual production level traffic then it is a good idea to perform tuning of the WebLogic server.
To perform tuning, go to : Admin Console -> Servers -> serverName -> Tuning (tab) -> Advanced (link at the bottom).
Period LengthandIdle Periods Until Timeoutare the properties that need to be changed. The default value 240 seconds is calculated this way : Period Length * Idle Periods Until Timeout. So adjust these values to set an optimal value (based on the JMeter performance testing). Try with different values and decide upon an optimal value which is closer to the default value.