Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    258

    Java heap space

    Salve ragazzi,
    avrei un problemino durante l'esecuzione di una mia applicazione jsf sotto eclipse e Tomcat 5.0.
    Quando vado a fare l'upload di un file, se il file è confinato entro i 4,5 MB non mi da alcun problema e me lo inserisce in una tabella di mysql.
    Se le dimensioni arrivano a 7,8MB mi dà un errore, più propriamente di spazio sull'heap java.
    Qualcuno può spiegarmi la causa dell'errore e come risolverlo?(possibilmente in maniera più dettagliata possibile,sono agli inizi....).
    Premetto che non credo sia un'errore sulla dimensione max dell'upload,ho già modificato opportunamente i parametri....

    La mia configurazione è
    winxp SP2
    exadel studio pro 3.5.4
    eclipse 3.1.2
    Tomcat 5.0 embedded con eclipse

    L'errore che ho lanciando l'applicazione è:



    GRAVE: Error calling action method of component with id MyForm:_id5
    javax.faces.FacesException: Error calling action method of component
    with id MyForm:_id5
    at
    org.apache.myfaces.application.ActionListenerImpl. processAction(ActionListe_nerImpl.java:74)
    at javax.faces.component.UICommand.broadcast(UIComman d.java:312)
    at
    javax.faces.component.UIViewRoot.broadcastEvents(U IViewRoot.java:267)
    at
    javax.faces.component.UIViewRoot.processApplicatio n(UIViewRoot.java:381)
    at
    com.sun.faces.lifecycle.InvokeApplicationPhase.exe cute(InvokeApplicationPha_se.java:75)
    at com.sun.faces.lifecycle.LifecycleImpl.phase(Lifecy cleImpl.java:200)
    at
    com.sun.faces.lifecycle.LifecycleImpl.execute(Life cycleImpl.java:90)
    at javax.faces.webapp.FacesServlet.service(FacesServl et.java:197)
    at
    org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(Applicatio_nFilterChain.java:237)
    at
    org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterC_hain.java:157)
    at
    org.apache.myfaces.webapp.filter.ExtensionsFilter. doFilter(ExtensionsFilter_.java:144)
    at
    org.apache.catalina.core.ApplicationFilterChain.in ternalDoFilter(Applicatio_nFilterChain.java:186)
    at
    org.apache.catalina.core.ApplicationFilterChain.do Filter(ApplicationFilterC_hain.java:157)
    at
    org.apache.catalina.core.StandardWrapperValve.invo ke(StandardWrapperValve.j_ava:214)
    at
    org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveConte_xt.java:104)
    at
    org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520)
    at
    org.apache.catalina.core.StandardContextValve.invo keInternal(StandardContex_tValve.java:198)
    at
    org.apache.catalina.core.StandardContextValve.invo ke(StandardContextValve.j_ava:152)
    at
    org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveConte_xt.java:104)
    at
    org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520)
    at
    org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:13_7)
    at
    org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveConte_xt.java:104)
    at
    org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:11_8)
    at
    org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveConte_xt.java:102)
    at
    org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520)
    at
    org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.jav_a:109)
    at
    org.apache.catalina.core.StandardValveContext.invo keNext(StandardValveConte_xt.java:104)
    at
    org.apache.catalina.core.StandardPipeline.invoke(S tandardPipeline.java:520)
    at
    org.apache.catalina.core.ContainerBase.invoke(Cont ainerBase.java:929)
    at
    org.apache.coyote.tomcat5.CoyoteAdapter.service(Co yoteAdapter.java:160)
    at
    org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:799)
    at
    org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.processConn_ection(Http11Protocol.ja va:705)
    at
    org.apache.tomcat.util.net.TcpWorkerThread.runIt(P oolTcpEndpoint.java:577)
    at
    org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.ja_va:683)
    at java.lang.Thread.run(Unknown Source)
    Caused by: javax.faces.el.EvaluationException:
    java.lang.OutOfMemoryError: Java heap space
    at
    com.sun.faces.el.MethodBindingImpl.invoke(MethodBi ndingImpl.java:130)
    at
    org.apache.myfaces.application.ActionListenerImpl. processAction(ActionListe_nerImpl.java:63)
    ... 34 more
    Caused by: java.lang.OutOfMemoryError: Java heap space



    QUalcuno sa aiutarmi?
    Grazie...

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,327
    L'errore principe è OutOfMemory.
    Non so come tu faccia l'upload ma non credo di sbagliare se dico che probabilmente leggi tutto il file e lo spari in upload.
    Questo metodo va bene per file piccoli, ma per file di grosse dimensioni dovresti effettuare una lettura a blocchi del file (utilizzando un array di byte con dimensioni "contenute").


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    puoi provare ad aumentare la memoria della jvm con -XmsN1mb e -XmxN2mb
    dove N1 è il min e N2 è il max...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    258
    ho provato a fare
    codice:
    java -Xms64mb -Xmx128mb
    ma mi dà errore
    Could not create the JVM, invalid initial size

    come devo fare?
    usando l'help ho visto che la sintassi prevede un ulteriore campo classe....cosa dovrei metterci?
    Grazie...

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    258
    credo di aver risolto il problema,
    ma essendo cresciuta la dimensione dei miei file in upload vorrei seguire il consiglio di LeleFT.
    La mia procedura funziona così:
    leggo tutto il file e riga dopo riga lo memorizzo in un vettore.
    Arrivato alla fine del file mi creo un array di byte,lo istanzio con la dimensione del vettore e poi eseguo la copia dei dati.

    codice:
    byte[] data=null;
    data = new byte[temp.size()];
    	for (int t = 0; t < temp.size(); t++) {
    	data[t] = (((Byte) temp.elementAt(t)).byteValue());
    
    }
    Poi con questa operazione effettuo l'inserimento nella tabella tbl
    codice:
    PreparedStatement pst = null;
    pst = conn.prepareStatement("INSERT INTO tbl(Data) VALUES (?)");
    pst.setBytes(1, data);
    pst.executeUpdate();
    pst.close();
    e con

    codice:
    Connection conn = ds.getConnection();
    Statement st = null;
    st = conn.createStatement();
    ResultSet rs = null;
    rs = st.executeQuery("SELECT Data FROM tbl WHERE nome='1' ");
    rs.first();
    Blob blob = rs.getBlob("Data");
    byte[] read = blob.getBytes(1, (int) blob.length());
    carico il blob nell'array di byte.
    Vi andrebbe di aiutarmi nel caricamento dell'array per blocchi come consigliatomi da LeleFT...??
    Vi prego,questo problema mi è capitato totalmente "a freddo" mentre sono impegnatissimo su altre cose..................

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    258
    cosa potrei fare senza modificare il mio codice?
    Se scrivessi l'array di byte su un file e inviassi il file nel blob si risolverebbe la questione?
    Grazie...

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,479
    Originariamente inviato da gbattine
    Vi andrebbe di aiutarmi nel caricamento dell'array per blocchi come consigliatomi da LeleFT...??
    Vi prego,questo problema mi è capitato totalmente "a freddo" mentre sono impegnatissimo su altre cose..................
    Non mi sembra che ti sia capitato "tra capo e collo", visto che ne parlavi già qui.

    Che moda di duplicare le discussioni... :master:
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.