Bonjour à tous

je sais que le probleme a été posé maintes fois mais là j'avoues que je ne sais pas trop d'où vient le probleme

Je fais une petit formulaire qui permet d'uploader un fichier de type mp3 donc avec potentiellement des tailles assez grande J'utilise struts et les classes mises à disposition pour l'upload du fichier

Là où ça fait mal est bien sur les perfs ...
j'utilise jmeter et j'appelle mon action avec un certain nombre de threads simultanés

à partir de 25 appels simulatanés mon appli plante avec la stack trace suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:310)
	at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRequestHandler.java:233)
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1209)
	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Thread.java:595)
05/06/08 15:14:13.593 |ERROR | [http-8080-Processor2] [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/goomWeb].[action]:253]  - "Servlet.service()" pour la servlet action a généré une exception
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:168)
	at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:748)
	at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:778)
	at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
	at org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:713)
	at org.apache.coyote.Request.doRead(Request.java:419)
	at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:265)
	at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:403)
	at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:280)
	at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:977)
	at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:887)
	at java.io.InputStream.read(InputStream.java:89)
	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:94)
	at org.apache.commons.fileupload.util.Streams.copy(Streams.java:64)
	at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:593)
	at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:619)
	at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:638)
	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:961)
	at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:942)
	at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:349)
	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:310)
	at org.apache.struts.upload.CommonsMultipartRequestHandler.handleRequest(CommonsMultipartRequestHandler.java:233)
	at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1209)
	at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at o
voici mon code où :

-myFile est un objet de type FormFile passé en paramétre de la méthode invoquée

-

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
	byte[] fileData = new byte[2048];
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
	BufferedInputStream bufferedInputStream = null;
	BufferedOutputStream bufferedOutStream = null;
	int nbRead = 0;
....
 
              try {
			fileData = myFile.getFileData();
		} catch (FileNotFoundException e) {
			log.error("FileUtil getSaveFileOnDisk : ", e);
			return false;
		} catch (IOException e) {
			log.error("FileUtil getSaveFileOnDisk : ", e);
			return false;
		}
 
 
....
 
 
             File fileToCreate = new File(filePath, myFile.getFileName());
 
....
             try {
		fileInputStream = (FileInputStream) myFile
								.getInputStream();
	  } 
            catch (IOException e) {
           //TRAITEMENT
	  }
            bufferedInputStream = new BufferedInputStream(
							fileInputStream, 10 * 1024);
 
        try {
	fileOutputStream = new FileOutputStream(fileToCreate);
	}
        catch (FileNotFoundException e) {
		 //TRAITEMENT
	}
       try {
	    bufferedOutStream = new BufferedOutputStream(
								fileOutputStream);
 
	     while ((nbRead = bufferedInputStream.read(fileData)) > 0) {
	           bufferedOutStream.write(fileData, 0, nbRead);
	           bufferedOutStream.flush();
	      }
	} 
       catch (FileNotFoundException e) {		
					} 
       catch (IOException ioexception1) {
 
	}
...
}
catch(){
//TRAITEMENT
}
 
finally{
//TRAITEMENT de fermeture des streams
}

je sais pas si c'est tres clair mais j'ai repris pas mal d'exemple
et là j'avoue que je ne sais pas comment faire ...


J'ai l'impression que le probleme vient du inputstream
merci d'avance