[mule-user] Mule performance

0 views
Skip to first unread message

Hitoshi Ozawa

unread,
Apr 4, 2007, 3:57:34 AM4/4/07
to us...@mule.codehaus.org
Hi all,

Just went over to Matt Welsh's SEDA page and found there are some
comments about
SEDA performance. I haven't faced performance problem with Mule but
Matt's Feb.19, 2007
comments are little bit disturbing.
http://www.eecs.harvard.edu/~mdw/proj/seda/

Has anybody faced any performance problems?

Regards,
H.Ozawa

---------------------------------------------------------------------
To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Andrew Perepelytsya

unread,
Apr 4, 2007, 1:37:20 PM4/4/07
to us...@mule.codehaus.org
Hitoshi,

IBM JDK 1.3 and Linux 2.2 kernel are far not the best choices for such a test (prototype?), especially this old linux kernel.

The author's stress on programming model rather then artificial test performance I fully support. Real-world scenarios are rarely constrained by pure CPU chunking, more on the I/O side anyway.

And so far, production Mule users are pretty happy with the performance, I remember more requests to throttle/slow down Mule rather then 'I need faster Mule'. Of course, requests for optimal thread settings are not included.

HTH,
Andrew

Holger Hoffstätte

unread,
Apr 4, 2007, 2:10:51 PM4/4/07
to us...@mule.codehaus.org
Andrew Perepelytsya wrote:
> IBM JDK 1.3 and Linux 2.2 kernel are far not the best choices for such a
> test (prototype?), especially this old linux kernel.

Exactly.

> The author's stress on programming model rather then artificial test
> performance I fully support. Real-world scenarios are rarely constrained
> by pure CPU chunking, more on the I/O side anyway.

Balancing latency vs. throughput vs. stability in peak situations was the
whole idea behind SEDA. It is important to keep in mind that SEDA is a
conceptual model, not an implementation. Models can certainly define
performance envelopes or desired characteristics but it's still the
_implementations_ that actually have them. In other words: you can only
smell the real deal when the rubber hits the road.. :)

-h

Hitoshi Ozawa

unread,
Apr 5, 2007, 1:10:27 AM4/5/07
to us...@mule.codehaus.org
Great! Nice to hear that all's OK.

Regards,
H.Ozawa

bhalani

unread,
Oct 1, 2007, 9:49:45 AM10/1/07
to us...@mule.codehaus.org

Looks like we have performance issue....

MULE 1.4.2 (10K payload - 2 second)
.Net WebService ---> Mule Service ---> .Net WebService Call

OpenAdaptor 3.x (1.4 second and dropped afterwords to 250/300 mili second.)
.Net WebService ---> Mule Service ---> .Net WebService Call

Tested over Network (LAN)

Thanks!

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a12979561
Sent from the Mule - User mailing list archive at Nabble.com.

Andrew Perepelytsya

unread,
Oct 1, 2007, 10:00:14 AM10/1/07
to us...@mule.codehaus.org
Ok, and how do you want us to deal with it? At least provide your test framework and config.

Andrew

bhalani

unread,
Oct 1, 2007, 10:17:07 AM10/1/07
to us...@mule.codehaus.org

It's simple configuration..... Please find here with configuration file.

mule-config.xml
======================================================================
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration
XML V1.0//EN"

"http://mule.mulesource.org/dtds/mule-configuration.dtd">

<mule-configuration id="adaptor-config" version="1.0">

<description>
Configuration for the "Crowley Adaptor"...
</description>

<mule-environment-properties>
<threading-profile id="default" maxThreadsActive="10"
maxThreadsIdle="10" poolExhaustedAction="RUN" threadTTL="80000"
threadWaitTimeout="40" maxBufferSize="100" />
</mule-environment-properties>


<container-context
className="org.mule.extras.spring.SpringContainerContext">
<properties>
<property name="configFile" value="adaptor-beans.xml" />
</properties>
</container-context>

<!-- Need this to add the proper SOAP headers to the outgoing message -->
<connector name="xfiretest"
className="org.mule.providers.soap.xfire.wsdl.XFireWsdlConnector">
</connector>

<endpoint-identifiers>
<endpoint-identifier name="AdaptorInputService"
value="xfire:http://localhost:81/services" />
</endpoint-identifiers>

<transformers>
<transformer name="HttpRequestToSoapRequest"
className="org.mule.providers.soap.transformers.HttpRequestToSoapRequest"
/>
<transformer name="ObjectToString"
className="org.mule.transformers.simple.ObjectToString" />
</transformers>

<model name="MQ">
<mule-descriptor name="MQ" implementation="adaptorCall">
<inbound-router>
<endpoint address="AdaptorInputService"
transformers="HttpRequestToSoapRequest" type="senderAndReceiver"
responseTransformers="ObjectToString" />
</inbound-router>

<outbound-router>
<router
className="org.mule.routing.outbound.OutboundPassThroughRouter">
<endpoint

address="wsdl:http://jaxweb01/webservices/aftest/service.asmx?wsdl&amp;method=Request"
type="senderAndReceiver" responseTransformers="ObjectToString">
<properties>
<property name="soapAction"
value="${methodNamespace}${method}" />
</properties>
</endpoint>
</router>
</outbound-router>

</mule-descriptor>

</model>

</mule-configuration>
==================================================================


adaptor-config.xml (Spring)
================================================================
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="adaptorCall"
class="com.crowley.adaptor.service.impl.AdaptorCallImpl" />
</beans>
================================================================

AdaptorCallImpl.java
=================================================================

public class AdaptorCallImpl implements AdaptorCall {

public AdaptorCallImpl() {
}
public String receive(String input) {
//custom code...
return input;
}

}
=================================================================

Environment:

Machine 1: .Net Application and .NetWebService
Machine 2: Mule Service

.NetApplication calls MuleService and MuleService calls .NetWebService i.e.
Input = String and Output = SAME String....


Let me know if you need further information.

Thanks!

http://www.nabble.com/file/p12980059/adaptor-config.xml adaptor-config.xml
http://www.nabble.com/file/p12980059/adaptor-config.xml adaptor-config.xml
http://www.nabble.com/file/p12980059/adaptor-beans.xml adaptor-beans.xml
--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a12980059

bhalani

unread,
Oct 1, 2007, 10:44:23 AM10/1/07
to us...@mule.codehaus.org

FYI...

We tested both (Mule and OpenAdaptor) with WARN log level....

We understand that sometime network can cause performance issue but we
tested both (O/A and Mule) more than 10 times with 10K payload got almost
same result i.e. Mule: >=2 second and O/A: 250-400ms

We are just curious about response time difference - 5/6 time more (Mule).

Thanks!

>>> .Net WebService ---> O/A Service ---> .Net WebService Call

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a12980516

Andrew Perepelytsya

unread,
Oct 1, 2007, 11:49:36 AM10/1/07
to us...@mule.codehaus.org
Could be thread pool configuration. What kind of load due you put on?

Andrew

bhalani

unread,
Oct 1, 2007, 12:04:19 PM10/1/07
to us...@mule.codehaus.org

It's just Text....

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a12982102

Andrew Perepelytsya

unread,
Oct 1, 2007, 12:05:28 PM10/1/07
to us...@mule.codehaus.org
I mean, how many requests at what rate and so on, is it a burst request or it gradually ramps up, etc.

bhalani

unread,
Oct 1, 2007, 12:05:47 PM10/1/07
to us...@mule.codehaus.org

FYI... I treid without following configuration....got same results.

<threading-profile id="default" maxThreadsActive="10"
maxThreadsIdle="10" poolExhaustedAction="RUN"
threadTTL="80000"
threadWaitTimeout="40" maxBufferSize="100" />

Thanks!

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a12982127

bhalani

unread,
Oct 1, 2007, 12:46:29 PM10/1/07
to us...@mule.codehaus.org

Performance measured on a single request (every time)...

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a12982884

Paquette, Dan

unread,
Oct 1, 2007, 1:22:26 PM10/1/07
to us...@mule.codehaus.org
That might be your problem. You really need to send N requests and divide the total runtime by N. Maybe N=10000 or something pretty big. You want to ensure that all the classloading, initialization, etc falls into the noise. In addition the resolution of PC system clocks may not be good enough and by measuring over a larger sample the resolution gets lost in the noise as well.

>> >> >>> 1 Sent from the Mule - User mailing list archive at

>> >> >>> Nabble.com.
>> >> >>>
>> >> >>>
>> >> >>>
>> ---------------------------------------------------------------------
>> >> >>> To unsubscribe from this list please visit:
>> >> >>>
>> >> >>> http://xircles.codehaus.org/manage_email
>> >> >>>
>> >> >>>
>> >> >>
>> >> >>
>> >> > http://www.nabble.com/file/p12980059/adaptor-config.xml
>> >> > adaptor-config.xml
>> >> > http://www.nabble.com/file/p12980059/adaptor-config.xml
>> >> adaptor-config.xml
>> >> > http://www.nabble.com/file/p12980059/adaptor-beans.xml
>> >> adaptor-beans.xml
>> >> >
>> >>
>> >> --
>> >> View this message in context:
>> >> http://www.nabble.com/Mule-performance-tf3524409.html#a12980516
>> >> Sent from the Mule - User mailing list archive at Nabble.com.
>> >>
>> >>
>> >> ------------------------------------------------------------------

>> >> --- To unsubscribe from this list please visit:


>> >>
>> >> http://xircles.codehaus.org/manage_email
>> >>
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Mule-performance-tf3524409.html#a12982102
>> Sent from the Mule - User mailing list archive at Nabble.com.
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe from this list please visit:
>>
>> http://xircles.codehaus.org/manage_email
>>
>>
>
>

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a12982884
Sent from the Mule - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email


bhalani

unread,
Oct 1, 2007, 1:48:22 PM10/1/07
to us...@mule.codehaus.org

We did consider class loading, initialization etc (preliminary level). We
skipped first request (every time) and then performance measured with
System.out(DATETIME) statement i.e. from 2nd request onwards.

Do you think testing above scenario in a loop (10000) will help to improve
Mule performance 5/6 time better?

Thanks!

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a12984052

Anatoli Kuzmin

unread,
Oct 2, 2007, 11:41:13 AM10/2/07
to us...@mule.codehaus.org

You can put a watch on http://mule.mulesource.org/jira/browse/MULE-2470 for any follow-up.

Anatoli

bhalani

unread,
Oct 3, 2007, 9:56:24 AM10/3/07
to us...@mule.codehaus.org

I tried to test vm--http--http-vm i.e. used same configuration what you used
for testing.

I get following exception from MuleClient....could you please advise?


========================EXCEPTION===============================
Failed to route event via endpoint: MuleEndpoint{endpointUri=vm://in,
connector=VMConnector{this=228a02, started=true, initialised=true,
name='connector.VM.0', disposed=false,
numberOfConcurrentTransactedReceivers=4,
createMultipleTransactedReceivers=true, connected=true,
supportedProtocols=[vm], serviceOverrides=null}, transformer=null,
name='endpoint.vm.in', type='sender', properties={},
transactionConfig=Transaction{factory=null, action=NONE, timeout=30000},
filter=null, deleteUnacceptedMessages=false, initialised=false,
securityFilter=null, synchronous=null, initialState=started,
createConnector=0, remoteSync=null, remoteSyncTimeout=null,
endpointEncoding=null}. Message payload is of type: String
org.mule.umo.provider.DispatchException: Failed to route event via endpoint:
MuleEndpoint{endpointUri=vm://in, connector=VMConnector{this=228a02,
started=true, initialised=true, name='connector.VM.0', disposed=false,
numberOfConcurrentTransactedReceivers=4,
createMultipleTransactedReceivers=true, connected=true,
supportedProtocols=[vm], serviceOverrides=null}, transformer=null,
name='endpoint.vm.in', type='sender', properties={},
transactionConfig=Transaction{factory=null, action=NONE, timeout=30000},
filter=null, deleteUnacceptedMessages=false, initialised=false,
securityFilter=null, synchronous=null, initialState=started,
createConnector=0, remoteSync=null, remoteSyncTimeout=null,
endpointEncoding=null}. Message payload is of type: String
at
org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:252)
at org.mule.providers.AbstractConnector.send(AbstractConnector.java:1629)
at org.mule.impl.ImmutableMuleEndpoint.send(ImmutableMuleEndpoint.java:955)
at org.mule.impl.MuleSession.sendEvent(MuleSession.java:327)
at org.mule.extras.client.MuleClient.send(MuleClient.java:737)
at org.mule.extras.client.MuleClient.send(MuleClient.java:714)
at org.mule.extras.client.MuleClient.send(MuleClient.java:667)
at JIRAClient.main(JIRAClient.java:26)
Caused by: org.mule.umo.provider.NoReceiverForEndpointException: There is no
receiver registered on connector "connector.VM.0" for endpointUri vm://in
at
org.mule.providers.vm.VMMessageDispatcher.doSend(VMMessageDispatcher.java:185)
at
org.mule.providers.AbstractMessageDispatcher.send(AbstractMessageDispatcher.java:224)

====================================MULE CLIENT======================

public static void main(String[] args) {

MuleClient muleClient = null;
try {
muleClient = new MuleClient();
logger
.error("**************************IN************************** >>>>
:"+new java.util.Date());
UMOMessage msg = muleClient.send(
"vm://in",
"AUD USD", null);

logger
.error("**************************OUT************************** >>>>
:"+new java.util.Date());

muleClient.dispose();

} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
if (muleClient != null)
muleClient.dispose();
}


========================== CONFIG ==================================

From JIRA.....


Thanks!

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a13019520

Andrew Perepelytsya

unread,
Oct 3, 2007, 9:58:58 AM10/3/07
to us...@mule.codehaus.org
Enable VM queueing for events, it's in the config in the JIRA.

I think without vm queueing it could be even faster.

Andrew

org.mule.providers.AbstractMessageDispatcher.send (AbstractMessageDispatcher.java:252)

        at org.mule.providers.AbstractConnector.send(AbstractConnector.java:1629)
        at org.mule.impl.ImmutableMuleEndpoint.send(ImmutableMuleEndpoint.java:955)
        at org.mule.impl.MuleSession.sendEvent(MuleSession.java:327)
        at org.mule.extras.client.MuleClient.send(MuleClient.java:737)
        at org.mule.extras.client.MuleClient.send(MuleClient.java:714)
        at org.mule.extras.client.MuleClient.send (MuleClient.java:667)

bhalani

unread,
Oct 3, 2007, 10:01:20 AM10/3/07
to us...@mule.codehaus.org

I used same config (from JIRA)....i.e following config.


<?xml version="1.0" encoding="ISO-8859-1"?>


<!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration
XML V1.0//EN"
"http://mule.mulesource.org/dtds/mule-configuration.dtd">

<mule-configuration id="http_fuctional_test" version="1.0">

<connector name="httpConnector"
className="org.mule.providers.http.HttpConnector" />

<connector name="vmConnector"
className="org.mule.providers.vm.VMConnector">
<properties>
<property name="queueEvents" value="true" />
</properties>
</connector>

<transformers>
<transformer name="ByteArrayToString"
className="org.mule.transformers.simple.ByteArrayToString" />
<transformer name="StringToByteArray"
className="org.mule.transformers.simple.StringToByteArray" />
</transformers>

<global-endpoints>
<endpoint name="out" address="http://localhost:60190"
connector="httpConnector" />
<endpoint name="in" address="vm://in" connector="vmConnector" />
<endpoint name="inH" address="http://localhost:60190"
connector="httpConnector" />
<endpoint name="outH" address="vm://out"
connector="vmConnector" />
</global-endpoints>

<model name="main">
<mule-descriptor name="testComponent"
implementation="org.mule.components.simple.BridgeComponent">
<inbound-router>
<global-endpoint name="in" />


</inbound-router>
<outbound-router>
<router
className="org.mule.routing.outbound.OutboundPassThroughRouter">

<global-endpoint name="out"
transformers="StringToByteArray" />
</router>
</outbound-router>
</mule-descriptor>
<mule-descriptor name="testComponent2"
implementation="org.mule.components.simple.BridgeComponent">
<inbound-router>
<global-endpoint name="inH"
transformers="ByteArrayToString" />


</inbound-router>
<outbound-router>
<router
className="org.mule.routing.outbound.OutboundPassThroughRouter">

<global-endpoint name="outH" />
</router>
</outbound-router>
</mule-descriptor>
</model>

</mule-configuration>

>> at org.mule.extras.client.MuleClient.send(MuleClient.java:667)

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a13019610

Andrew Perepelytsya

unread,
Oct 3, 2007, 10:03:24 AM10/3/07
to us...@mule.codehaus.org
Are you trying to talk to a remote server? Use MuleClient's RemoteDispatcher instead. Most probably you create a local instance of the client with no config, and it fails to find any endpoint.

Andrew

bhalani

unread,
Oct 3, 2007, 10:14:15 AM10/3/07
to us...@mule.codehaus.org

It's local server....

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a13019837

bhalani

unread,
Oct 9, 2007, 4:24:41 PM10/9/07
to us...@mule.codehaus.org

DEBUG 2007-10-09 15:40:22,433 [connector.http.0.receiver.3]
httpclient.wire.header: << "HT
TP/1.1 100 Continue[\r][\n]"
DEBUG 2007-10-09 15:40:22,433 [connector.http.0.receiver.2]
httpclient.wire.header: << "HT
TP/1.1 100 Continue[\r][\n]"
DEBUG 2007-10-09 15:40:22,433 [connector.http.0.receiver.2]
httpclient.wire.header: << "Se
rver: Microsoft-IIS/5.0[\r][\n]"
DEBUG 2007-10-09 15:40:22,433 [connector.http.0.receiver.2]
httpclient.wire.header: << "Da
te: Tue, 09 Oct 2007 19:40:21 GMT[\r][\n]"
DEBUG 2007-10-09 15:40:22,433 [connector.http.0.receiver.2]
httpclient.wire.header: << "X-
Powered-By: ASP.NET[\r][\n]"
DEBUG 2007-10-09 15:40:22,433 [connector.http.0.receiver.3]
httpclient.wire.header: << "Se
rver: Microsoft-IIS/5.0[\r][\n]"
DEBUG 2007-10-09 15:40:22,433 [connector.http.0.receiver.3]
httpclient.wire.header: << "Da
te: Tue, 09 Oct 2007 19:40:21 GMT[\r][\n]"
DEBUG 2007-10-09 15:40:22,433 [connector.http.0.receiver.3]
httpclient.wire.header: << "X-
Powered-By: ASP.NET[\r][\n]"

MULE 1.4.3 waits and waits randomly at above line.....vs. OpenAdaptor.
(trying to call .net web service)

Thanks!

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a13124076

bhalani

unread,
Oct 9, 2007, 4:31:23 PM10/9/07
to us...@mule.codehaus.org

(trying to call .net web service - multi threading (2 no of thread))

Thanks!

bhalani wrote:
>
> It's local server (Mule running locally and I am using eclipse to test -
> MuleClient)....
>
>
> I tried dispatch, it works, but I see following in my log....
>
> WARN 2007-10-03 10:38:29,597 [connector.VM.0.dispatcher.1]
> org.mule.providers.vm.VMMessageDispatcher: No receiver for endpointUri:
> vm://in
>
> Thanks!


>
>
>
> Andrew Perepelytsya wrote:
>>
>> Are you trying to talk to a remote server? Use MuleClient's
>> RemoteDispatcher
>> instead. Most probably you create a local instance of the client with no
>> config, and it fails to find any endpoint.
>>
>> Andrew
>>
>>
>
>

--
View this message in context: http://www.nabble.com/Mule-performance-tf3524409.html#a13124192

Reply all
Reply to author
Forward
0 new messages