[ https://issues.apache.org/jira/browse/AXIS2-2574?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12490685 ]
Thilina Gunarathne commented on AXIS2-2574: ------------------------------------------- We have done many improvements to the performance of the file caching after the 1.1 release ... Please try using the latest axiom binaries... We even fixed the 1 byte at a time issue too... I'll also try with buffering the FileOutStream ad will commit it if it gives any more perf improvements... > usage of attachments is very slow when they are cached on disk (Server-Side) > ---------------------------------------------------------------------------- > > Key: AXIS2-2574 > URL: https://issues.apache.org/jira/browse/AXIS2-2574 > Project: Axis 2.0 (Axis2) > Issue Type: Bug > Affects Versions: 1.1.1 > Environment: SUN JRE 5.0 Update 11, Apache Tomcat 5.5.23, Windows XP > Professional > Reporter: Dirk Niededir > > I have implemented a small AXIOM based Service using the AXIS2 1.1.1 WAR-file. > I am using the DataHandler to receive big Byte-Arrays (base64binary). Using > MTOM, AXIS2 is converting them to attachments. This works fine using small > Byte-Arrays. To avoid a OutOfMemoryError, I enabled the file based cache > using the parameters cacheAttachments=true, attachmentDIR=cachedir and > sizeThreshold=30000 in the axis2.conf. This still works fine but very slow, > if the size is greater than sizeThreshold. I know File access should be > slower than using RAM. But this works much slower than it should and the CPU > is at maximum. > Using the Windows-Tool "Process Monitor" ( > http://www.microsoft.com/technet/sysinternals/utilities/processmonitor.mspx > ), I saw that the axis*.att files are written in blocks with size=1. This > might be a hint. > For this I have written a small test, which writes a 50MB file to disk either > buffered or unbuffered: > -------------------------- > File file = new File( "C:/java/temp/test.txt"); > if( file.exists()) > file.delete(); > file.createNewFile(); > long startTime = System.currentTimeMillis(); > > OutputStream fos = new FileOutputStream( file); > boolean buffered = true; > if( buffered) > fos = new BufferedOutputStream( fos); > > int count = 0; > while( count < 50*1000000) { > count++; > fos.write( 'a'); > } > fos.close(); > > long endTime = System.currentTimeMillis(); > > System.out.println("time = "+(endTime-startTime)+"ms"); > -------------------------- > if the buffered-flag is false, then time = 203360ms and CPU ~ 90% > if the buffered-flag is true, then time = 2763ms and CPU ~ 30% > The buffered version is 73.6 times faster with a much lower CPU utilization! > This confirms to the hint. So decoration of the FileOutputStream for the > axis*.att-Files with a BufferedOutputStream will fix this "bug". > Maybe it is a Windows-Problem, but the decoration will not be a disadvantage > for other systems. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]