You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commons-dev@ws.apache.org by "Rich Scheuerle (JIRA)" <ji...@apache.org> on 2008/05/22 17:25:55 UTC
[jira] Created: (WSCOMMONS-349) Improved Large Attachment
Performance
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.
[jira] Resolved: (WSCOMMONS-349) Improved Large Attachment
Performance
Posted by "Rich Scheuerle (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/WSCOMMONS-349?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Rich Scheuerle resolved WSCOMMONS-349.
--------------------------------------
Resolution: Fixed
> 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.