You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-user@james.apache.org by "Bungaro, Paola" <pb...@cisco.com> on 2003/12/02 16:20:50 UTC

James load test causes several exceptions

Together with a couple of colleagues I'm investigating whether to replace Windows SMTP server with James as the transport mechanism for one of our products. One of the parts of the investigation involves load testing James to see how remote delivery performs under load and compare it with Windows SMTP server.

Here are some info about the config and the tests; I have a very detailed doc if you're interested:
- PC is a Dell PE4600 dual 1790Mhz CPU 2GB RAM running Windows 2000 and James 2.1.3 running as a service.
- There are three servers, server1 runs Windows SMTP server to send emails, server2 acts as a relay and runs James in one set of tests and  Windows SMTP server in the other, and server3 is the final destination of the messages and it runs Windows SMTP server .
- One set of tests sent 1.04KB plain text emails, the other 649KB G711 voice; these two sets of tests were performed first using James and then using Windows SMTP server.
- We sent 100 messages per SMTP session.
- We measured max msgs per minute, CPU usage at different stages, number of threads, memory usage and various leaks.
- As for James, we set the spoolmanager threads to 12, as per per        <http://nagoya.apache.org/wiki/apachewiki.cgi?JamesByTheNumbers> ; delayTime for remote delivery set to 300000; deliveryThreads set to 20. We're using file as the spool type.

The results were quite disappointing, and we saw several errors. Since we quite like the idea of using open source code and we like the flexibility, portability and extra features of the James code, I'm hoping that somebody in this list can give us advice about these problems, ex. have you seen these errors? Is there anything in the configuration that you know how to optimize? The problem is that if the performance is too poor, and we see these types of errors, we're not going to be able to sell this to management.

First the errors. We enabled DEBUG logging; note that for each of the following errors, the frequency of errors increased with traffic. Here are some examples:
- In mailet log:
Could not connect to SMTP host: jdccisco-000003.ecsbu-lab-sea.cisco.com, port: 25;
  nested exception is:
	java.net.BindException: Address already in use: connect
	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:911)
	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:158)
	at javax.mail.Service.connect(Service.java:233)
	at javax.mail.Service.connect(Service.java:134)
	at javax.mail.Service.connect(Service.java:86)
	at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:95)
	at org.apache.james.transport.mailets.RemoteDelivery.deliver(RemoteDelivery.java:305)
	at org.apache.james.transport.mailets.RemoteDelivery.run(RemoteDelivery.java:758)
	at java.lang.Thread.run(Unknown Source)

In mailstore logs:
25/11/03 15:26:57 ERROR mailstore: Exception retrieving mail: java.lang.RuntimeException: Exception caught while retrieving an object, cause: java.io.FileNotFoundException: C:\JAVA\JAMES\james-2.1.3\apps\james\var\mail\outgoing\4D61696C313036393830323831373132362D383437372D746F2D6A6463636973636F2D3030303030332E65637362752D6C61622D7365612E636973636F2E636F6D.Repository.FileObjectStore (The system cannot find the file specified), so we're deleting it... good riddance!

	...and...

25/11/03 15:27:24 ERROR mailstore: Exception retrieving mail: java.lang.RuntimeException: Exception caught while retrieving an object, cause: java.io.FileNotFoundException: C:\JAVA\JAMES\james-2.1.3\apps\james\var\mail\spool\4D61696C313036393830323834343137312D39323539.Repository.FileObjectStore (The system cannot find the file specified), so we're deleting it... good riddance!

- In smptserver logs:
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(Unknown Source)
	at java.io.BufferedInputStream.read1(Unknown Source)
	at java.io.BufferedInputStream.read(Unknown Source)
	at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder$CharsetSD.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at java.io.BufferedReader.readLine(Unknown Source)
	at org.apache.james.smtpserver.SMTPHandler.readCommandLine(SMTPHandler.java:527)
	at org.apache.james.smtpserver.SMTPHandler.handleConnection(SMTPHandler.java:381)
	at org.apache.james.util.connection.ServerConnection$ClientConnectionRunner.run(ServerConnection.java:462)
	at org.apache.avalon.excalibur.thread.impl.ExecutableRunnable.execute(ExecutableRunnable.java:47)
	at org.apache.avalon.excalibur.thread.impl.WorkerThread.run(WorkerThread.java:80)

...and...

25/11/03 18:58:00 ERROR smtpserver: Unknown error occurred while processing DATA.
javax.mail.MessagingException: Unable to retrieve the data: Connection reset;
  nested exception is:
	java.net.SocketException: Connection reset
	at org.apache.james.core.MimeMessageInputStreamSource.<init>(MimeMessageInputStreamSource.java:125)
	at org.apache.james.core.MailImpl.<init>(MailImpl.java:173)
	at org.apache.james.smtpserver.SMTPHandler.processMail(SMTPHandler.java:1394)
	at org.apache.james.smtpserver.SMTPHandler.doDATA(SMTPHandler.java:1253)
	at org.apache.james.smtpserver.SMTPHandler.parseCommand(SMTPHandler.java:608)
	at org.apache.james.smtpserver.SMTPHandler.handleConnection(SMTPHandler.java:381)
	at org.apache.james.util.connection.ServerConnection$ClientConnectionRunner.run(ServerConnection.java:462)
	at org.apache.avalon.excalibur.thread.impl.ExecutableRunnable.execute(ExecutableRunnable.java:47)
	at org.apache.avalon.excalibur.thread.impl.WorkerThread.run(WorkerThread.java:80)

As for performance, it looks like James, in this test, performs way worse than Windows SMTP server. Some examples:
- when sending 1.04KB voice messages, James maxes out at 1860 per minute, while Windows SMTP at 1920; however, at these number James is using 70% of CPU, and Windows SMTP 8%.
- when sending 649KB voice messages, James maxes out at 222 per minute, while Windows SMTP at 420; at these number James is using 96% of CPU, and Windows SMTP 15%.
- If McAfee online access scan is enabled, James throughput declines, while MS SMTP server does not.

Again, please let me know if you have any helpful information, or if you're intested in seeing more info about our tests.


---------------------------------------------------------------------
To unsubscribe, e-mail: server-user-unsubscribe@james.apache.org
For additional commands, e-mail: server-user-help@james.apache.org


Re: James load test causes several exceptions

Posted by Serge Knystautas <se...@lokitech.com>.
Paola,

Noel already addressed each point, but just to highlight the two 
quickest things are to leave debugging at error and to upgrade to the 
latest 2.2 release.  I would bet (hope) that James would be faster than 
Windows SMTP server on the smaller messages, though would probably still 
consume more CPU.

I'm a bit suspicious about McAfee not slowing down the throughput for 
Windows SMTP.  I guess since there is available CPU, it means McAfee can 
crunch as much as possible without affecting SMTP throughput.  However, 
usually the forking and checking for viruses/spam will increase the 
processing time.

One note below...

Bungaro, Paola wrote:
> First the errors. We enabled DEBUG logging; note that for each of the following errors, the frequency of errors increased with traffic. Here are some examples:
> - In mailet log:
> Could not connect to SMTP host: jdccisco-000003.ecsbu-lab-sea.cisco.com, port: 25;
>   nested exception is:
> 	java.net.BindException: Address already in use: connect
> 	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:911)
> 	at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:158)
> 	at javax.mail.Service.connect(Service.java:233)
> 	at javax.mail.Service.connect(Service.java:134)
> 	at javax.mail.Service.connect(Service.java:86)
> 	at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:95)
> 	at org.apache.james.transport.mailets.RemoteDelivery.deliver(RemoteDelivery.java:305)
> 	at org.apache.james.transport.mailets.RemoteDelivery.run(RemoteDelivery.java:758)
> 	at java.lang.Thread.run(Unknown Source)

I've never seen this error before.  Any further information about this 
would be very appreciated.

-- 
Serge Knystautas
President
Lokitech >> software . strategy . design >> http://www.lokitech.com
p. 301.656.5501
e. sergek@lokitech.com


---------------------------------------------------------------------
To unsubscribe, e-mail: server-user-unsubscribe@james.apache.org
For additional commands, e-mail: server-user-help@james.apache.org


RE: James load test causes several exceptions

Posted by "Noel J. Bergman" <no...@devtech.com>.
> - One set of tests sent 1.04KB plain text emails, the other 649KB G711
voice;

James isn't as efficient as we'd like with large messages.  That is an area
to be worked on shortly.

> We're using file as the spool type.

Try using dbfile instead.

> We enabled DEBUG logging

That would slow things down a bit since you'll produce a lot of log entries.

> Could not connect to SMTP host: jdccisco-000003.ecsbu-lab-sea.cisco.com,
port: 25;
> 	java.net.BindException: Address already in use: connect
>	at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:911)
> ...
>	at com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:95)
>	at
org.apache.james.transport.mailets.RemoteDelivery.deliver(RemoteDelivery.jav
a:305)

That's a bit odd.  I've never seen that despite millions of test messages.

> Exception retrieving mail: java.lang.RuntimeException:
> Exception caught while retrieving an object, cause:
java.io.FileNotFoundException:
> (The system cannot find the file specified), so we're deleting it... good
riddance!

A known ahd harmless message.  Should be largely gone in the current build.

	...and...

> java.net.SocketException: Connection reset
>	at
org.apache.james.smtpserver.SMTPHandler.readCommandLine(SMTPHandler.java:527
)

> Unknown error occurred while processing DATA.
> javax.mail.MessagingException: Unable to retrieve the data: Connection
reset;
>  nested exception is:
>	java.net.SocketException: Connection reset

Both cases should be the client disconnecting from the server.  Although ...
which JVM?

> As for performance, it looks like James, in this test, performs way worse
than Windows SMTP server.
> - when sending 1.04KB voice messages, James maxes out at 1860 per minute,
while Windows SMTP at 1920;
>   however, at these number James is using 70% of CPU, and Windows SMTP 8%.

How is your pipeline configured?  And how much memory did you allocate for
the JVM?  You might also want to retest with the current test build.

	--- Noel


---------------------------------------------------------------------
To unsubscribe, e-mail: server-user-unsubscribe@james.apache.org
For additional commands, e-mail: server-user-help@james.apache.org