Improved Large Attachment Performance
-------------------------------------
Key: WSCOMMONS-349
URL: https://issues.apache.org/jira/browse/WSCOMMONS-349
Project: WS-Commons
Issue Type: Improvement
Components: AXIOM
Reporter: Rich Scheuerle
Assignee: Rich Scheuerle
Tim Hefele (IBM) has been running tests on the performance of large attachments.
Using this profile data, Tim and I have made several localized improvements to
the
attachment processing.
Summary of Changes:
1) Larger Threshold Toleration
Currently a user can specify (via Axis config) a file threshold for
attachments.
If an attachment is larger than the threshold, the attachment is stored in a
backing
file. This improves the memory footprint but can degrade performance.
This code has been improved. Now users can supply a much larger attachment
threshold.
The axiom PartFactory will automatically reduce the threshold if it appears
that the
Runtime is low on memory. This allows users to choose a much higher
threshold and get better performance throughput.
2) PartFactory.createPart Synchronization
The createPart method is used to create an attachment part from the input
stream. In
normal operation, this input stream is an HTTP InputStream and the message
is (assumed) chunked.
If too many threads are allowed to operate in this section of the code,
there tends to be
a lot of thrashing. By reducing the number of operating threads, the total
throughput of
the system seems to increase.
3) Improved BAAInputStream and BAAOutputStream
The BAAInputStream is like a ByteArrayInputStream except that the content is
an array of
byte arrays. Likewise for BAAOutputStream.
The BAAInputStream now has a writeTo(OutputStream) method. This allows the
Axiom layer
to directly write out the stream without additional buffer copies.
In addition, the BAAOutputStream now has a receive(InputStream) method.
This allows the
BAAOutputStream to be built directly from an InputStream without excessive
buffer copies.
4) Upgraded the BufferUtils code to take advantage of (3)
5) Added a verification test
Kudos to Tim Hefele, David Strite and Nikhil Thaker for their efforts on this
issue.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.