You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by sa...@emc.com on 2006/07/25 11:49:33 UTC

corrupted stream

Hello,
We entercounter the problem that under high workload we get corrupted data
from Inputstream. The interesting moment that corruption has following
structure: 
imagine correct data as number of chunks - 1,2,3,4,5
received data - 3,4,3,4,5  (the first two chunks replaced by middle chunks).
The size of such chunks is exactly 1260 bytes. the corruption can occure in
the middle of file(e.g. 1,2,5,4,5). Number of corrupted chunks can vary
 
Here is situation description:
We have Tomcat 5.0.28(JVM: 1.5.0._06) and java servlet that works on it. The
servlet application receives binary files. The workload is high: more than
200 concurent users(and more than 2000 total). Every user uploads to server
number image files(size of each is about 700Kb). Tomcat has default settings
(see below). Clients connect to Tomcat directly.
Our code is (not exactly because it spared between different classes):
 
 
BufferedInputStream sis = null;
File f = new File(fileName);
BufferedOutputStream bos = null;
FileOutputStream fos = null;
long totalBytesReceived = 0L;
try {
 sis = new BufferedInputStream(m_request.getInputStream());
 byte[] buffer = new byte[FILE_UPLOAD_BUFFER_SIZE];
 File f = new File(fileName);
 fos = new FileOutputStream(f, true);
 bos = new BufferedOutputStream(fos);
                
 int bytesRead;
                
 while ((bytesRead = sis.read(buffer)) >= 0) 
 {
  bos.write(buffer, 0, bytesRead);
  totalBytesReceived += bytesRead;
 }
        } catch (IOException e) {
 ...
            }
        } finally {
            try {
                if (bos != null) bos.close();
                if (fos != null) fos.close();
            } catch (IOException e) {
                logger.warn("Close output stream throws an exception", e);
                throw new MyException(MyException.ERR_REQUEST_PROCESS, e);
            }
        } 
 
 
Can anybody suggest to use what we can do to resolve this situation.
 
Regards,
Denis
 
Additional info:
 
Tomcat runs on Windows 2003 (Windows Server 2003 Enterprise SP1 Intel Xeon
CPU 3.60 Ghz 2.00 GB of RAM). Tomcat(server.xml):
  <?xml version="1.0" encoding="utf-8" ?> 
 
<file:///C:/Documents%20and%20Settings/dsamoilov/Local%20Settings/Temporary%
20Internet%20Files/OLKE/server.xml#> - <Server>
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"
/> 
  <Listener
className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> 
 
<file:///C:/Documents%20and%20Settings/dsamoilov/Local%20Settings/Temporary%
20Internet%20Files/OLKE/server.xml#> - <GlobalNamingResources>
  <Environment name="simpleValue" type="java.lang.Integer" value="30" /> 
  <Resource auth="Container" description="User database that can be updated
and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase" /> 
 
<file:///C:/Documents%20and%20Settings/dsamoilov/Local%20Settings/Temporary%
20Internet%20Files/OLKE/server.xml#> - <ResourceParams name="UserDatabase">
 
<file:///C:/Documents%20and%20Settings/dsamoilov/Local%20Settings/Temporary%
20Internet%20Files/OLKE/server.xml#> - <parameter>
  <name>factory</name> 
  <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value> 
  </parameter>
 
<file:///C:/Documents%20and%20Settings/dsamoilov/Local%20Settings/Temporary%
20Internet%20Files/OLKE/server.xml#> - <parameter>
  <name>pathname</name> 
  <value>conf/tomcat-users.xml</value> 
  </parameter>
  </ResourceParams>
  </GlobalNamingResources>
 
<file:///C:/Documents%20and%20Settings/dsamoilov/Local%20Settings/Temporary%
20Internet%20Files/OLKE/server.xml#> - <Service name="Catalina">
  <Connector acceptCount="100" connectionTimeout="20000"
disableUploadTimeout="true" port="8080" redirectPort="8443"
maxSpareThreads="75" maxThreads="150" minSpareThreads="25" /> 
  <Connector port="8009" protocol="AJP/1.3"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"
redirectPort="8443" /> 
 
<file:///C:/Documents%20and%20Settings/dsamoilov/Local%20Settings/Temporary%
20Internet%20Files/OLKE/server.xml#> - <Engine defaultHost="localhost"
name="Catalina">
 
<file:///C:/Documents%20and%20Settings/dsamoilov/Local%20Settings/Temporary%
20Internet%20Files/OLKE/server.xml#> - <Host appBase="webapps"
name="localhost">
  <Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_log." suffix=".txt" timestamp="true" /> 
  </Host>
  <Logger className="org.apache.catalina.logger.FileLogger"
prefix="catalina_log." suffix=".txt" timestamp="true" /> 
  <Realm className="org.apache.catalina.realm.UserDatabaseRealm" /> 
  </Engine>
  </Service>
  </Server>
 
Tomcat