|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
[JAVA/SQL]Errore "Memory Exhausted" quando genero un script SQL enorme!!! help...
Su eclipse sto generando uno script SQL enorme ... e ad un certo punto mi da l'errore "memory exausthed near..." ...me lo da intorno alla 10000esima riga!!!
Non si tratta di un errore Java Heap Space (out of memory) il quale anche lui era comparso, ma l'ho risolto settando in run configurations l'argomento -Xmx1200m. Ora nn so dove mettere le mani perchè online nn ho trovato nulla che facesse al mio caso! ps Ho 2gb di ram |
|
|
|
|
|
#2 | |
|
Bannato
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
|
Quote:
...ciao Andrea... |
|
|
|
|
|
|
#3 | |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
Quote:
...hai qualche suggerimento? Attualmente utilizzo uno StringBuffer per creare lo script e da problemi...con uno StringBuilder idem!!! Ho letto qualcosa online sulla documentazione di eclipse ganymede e sembra sia un problema di buffer di memoria! che ne dici? |
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Memory Exhausted è un errore tipico delle Virtual Machine... e/o di interpreti di linguaggi interpretati (penso si sia capito).
Memoria Esaurita? Bene... quanto è lunga la tua stringa? Quanti BIT va ad occupare?
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
Quote:
Cmq la memoria della JVM l'ho aumentata fino a 1,2gb! |
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
Ok, generato intorno a quella i-esima riga. Va bene; cosa c'è a quella riga? Prima e dopo? Incolla un pò di codice va... Inoltre... tu puoi avere anche 2GB di memoria ram... ma se invii una stringa che in bit supera quella lunghezza, lui te la tronca... o in questo caso, Memory Exhausted!
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#7 |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
x Ally...
Ho provato a "spezzare la stringa"...invece di restituire una stringa enorme ho restituito un Set<String> e poi da questo ho ricorstruito la stringa finale, ma non va...sempre quell'errore mi da! |
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
Quote:
la 10000esima riga non è di sorgente!!!!!!...è dello script e ne sono sicuro! Considera che ho fatto una classe di prova "piccola" e l'errore fatidico si verifica quando faccio questa cosa: String script=generationScript(...); ecco l'errore... ........ ........ ........ UNION DISTINCT SELECT DISTINCT 'a4', 'b1' FROM U alias_0 , U alias_1 , S alias_2 , R alias_3 WHERE alias_0.term2=alias_1.term1 AND alias_1.term2='b1' AND alias_1.term1=alias_2.term1 AND alias_2.term1=alias_2.term2 AND alias_3.term1='a4' UNION DISTINCT SELECT DISTINCT 'a4', 'b1' FROM T alias_0 , U alias_1 , U alias_2 , R alias_3 WHERE alias_0.term1=alias_0.term2 AND alias_0.term2=alias_1.term2 AND alias_1.term2=alias_2.term1 AND alias_2.term2='b1' AND alias_3.term1='a4' >: memory exhausted near ' U alias_2 , U alias_3 , T alias_4 , R alias_5 WHERE alias_0.term2=alias_1.term1' at line 10663 |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Riempire tutto solo fino alla 9.900 riga e farsi stampare la memoria?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
Non vorrei far confusione tra sorgente java e sorgente sql. Script non ne vedo Mi sa che stia andando in un infinite loop di mysql...
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#11 | |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
Quote:
...quella in rosso nell'errore per esempio io la considero una parte dello script! |
|
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
|
|
|
|
|
|
#13 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
tu mi hai riportato l'errore che l'engine mysql ti stampa a video; ma la riga d'errore? Vado a pranzo, dopo vedo di risponderti e aiutarti
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Non c'entra con il sorgente Java, cioè non sembra essere un errore della JVM.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#15 | ||
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
Quote:
nella console di eclipse inizia a scorrere a manetta e non ce la faccio a bloccare dove sta l'errore! rimedi? Quote:
Praticamente nel metodo che va a creare lo "script" viene utilizzato uno StringBuffer... Ho smanettato qualcosa e ho impostato questo parametro: buf.ensureCapacity(1000000000); Ora nn da più il problema di Memory Exhausted, ma da di nuovo il problema out of memory... eppure in run configurations ho impostato 1500mb!!! come cacchio è possibile!!! Altra cosa curiosa... Se utilizzo un metodo già implementato in questo progetto, che genera ed esegue questo script tutto insieme (senza restituire un resultset ma un'altra cosa) non mi da alcun problema!!! Se separo le cose, generazione ed esecuzione invece da questi problemi! 2a cosa... Ho fatto la stampa di una cavolata, ad esempio "true", alla fine della creazione della stringa SQL, per vedere se il problema si verifica durante o dopo la creazione della stringa! ...bene, la stringa sql viene generata senza problemi, perchè mi stampa "true" dopo aver creato lo script...subito dopo però (che corrisponde al momento dell'esecuzione della query sql) da il problema! Quindi Ally, hai quasi sicuramente ragione!!! cosa si può fare? impostare qualche parametro in MySql? |
||
|
|
|
|
|
#16 | |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
Quote:
L'unica cosa che mi viene da pensare è 'frammentare' la query sql ed eseguirla a blocchi.
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Jan 2003
Città:
Messaggi: 4423
|
...ma ricapitolando...crei una query talmente lunga e complessa da occupare 1GB di ram?!...
...ciao Andrea... |
|
|
|
|
|
#18 |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
scusate, ma ho confuso un pò i vostri nomi nei messaggi che ho scritto...
Ho invocato il metodo length() sulla stringa SQL mi restituisce questo numero: 3072229 E' tanto? |
|
|
|
|
|
#19 |
|
Member
Iscritto dal: Oct 2009
Città: Varese
Messaggi: 209
|
No. Probabilmente l'esecuzione della query va in loop ed occupa tutta la memoria...
__________________
MacBook White 13.3'' Intel CPU :: 2GB DDR2 800Mhz :: 160Gb :: Mac OS X 10.6 Snow Leopard |
|
|
|
|
|
#20 | |
|
Bannato
Iscritto dal: Oct 2007
Messaggi: 452
|
Quote:
...invece se separo le 2 cose (generazione ed esecuzione) da questi problemi!!! mistero... |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:05.




















