Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-08-2010, 11:50   #1
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
[Java] Profiling applicazione per trovare memory leak

Ragazzi ho bisogno di aiuto per trovare un probabile leak nell'applicazione Java in questione. Ho attivato il remote profiling sul server e mi ci sono connesso con il profiler di netbeans. Questi i risultati attuali:

Oggetti:
http://img704.imageshack.us/f/oggetti.jpg/

Surviving Generations:
http://img807.imageshack.us/i/generations.jpg/

Heap Size:
http://img175.imageshack.us/i/heap.jpg/

Il problema è che navigando ad es l'array di char, non riesco a risalire a nulla di utile

Qualcuno può darmi una mano?

Grazie,
TD

Ultima modifica di tylerdurden83 : 03-08-2010 alle 11:53.
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 07:47   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
Ragazzi ho bisogno di aiuto per trovare un probabile leak nell'applicazione Java in questione. Ho attivato il remote profiling sul server e mi ci sono connesso con il profiler di netbeans. Questi i risultati attuali:

Oggetti:
http://img704.imageshack.us/f/oggetti.jpg/

Surviving Generations:
http://img807.imageshack.us/i/generations.jpg/

Heap Size:
http://img175.imageshack.us/i/heap.jpg/

Il problema è che navigando ad es l'array di char, non riesco a risalire a nulla di utile

Qualcuno può darmi una mano?

Grazie,
TD
Immagino pero' che utilizzi gli array di char in qualche punto della tua applicazione, giusto? Quanti punti? char[] non e' poi cosi' comune in Java, direi che non avrai tanti punti da analizzare. Hai gia' dato un'occhiata?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 12:35   #3
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Immagino pero' che utilizzi gli array di char in qualche punto della tua applicazione, giusto? Quanti punti? char[] non e' poi cosi' comune in Java, direi che non avrai tanti punti da analizzare. Hai gia' dato un'occhiata?
No non li uso mai, sicuramente sono utilizzati internamente da oggetti più avanzati, se riesco a riconnettermi alla vm con il profiler remoto (senza dover restartare l'applicazione) ti posto più dati a riguardo...

EDIT: non mi fa riconnettere, la restarto al volo

Ieri ho notato che dopo un po l heap e le surviving generation si sono stabilizzate (la prima sui 250 MB e l altra sulle 13 generazioni), ma da top su unix il processo continuava a crescere (addirittura 700 MB allocati, sebbene la maggior parte di essi risultasse anche free)...

Ultima modifica di tylerdurden83 : 04-08-2010 alle 12:44.
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:04   #4
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Screenshot in arrivo, rieditero il post un po di volte...

Dump della memoria occupata dai char[]


Massima concentrazione di memoria e generations su StringBuffer.toString()


org.hibernate.sql.Select.toStatementString è quello che incide di più, ma siamo già arrivati a valori insignificanti di bit e surviving generations...


proseguendo ulteriormente da org.hibernate.sql.Select.toStatementString arrivo a


che è il mio main, ma non presenta nessun accumulo di memoria o generations...

Ultima modifica di tylerdurden83 : 04-08-2010 alle 13:24.
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:06   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Non conosco il tool ma sembra che ti mostri l'allocazione di ogni oggetto, giusto? Sei riuscito a vedere se ci sono anche i tuoi? Hai controllato se il software che stai usando ti da anche una rappresentazione "gerarchica" (i.e. queste chiamate sono generate da questo oggetto e cosi' via). In genere lo fanno...

Scusa per i suggerimenti triviali, ma da qualche parte si deve pur partire, no?

EDIT - ho visto lo snapshot che hai postato e parla di "tree", quindi immagino che puoi dettagliare il singolo item. Prova a vedere se, percorrendo l'albero delle chiamate, arrivi ad oggetti familiari
__________________
In God we trust; all others bring data

Ultima modifica di sottovento : 04-08-2010 alle 13:08.
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:21   #6
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Prova a vedere se, percorrendo l'albero delle chiamate, arrivi ad oggetti familiari
Più che altro non arrivo alla situazione che mi aspettavo. Su internet ho trovato esempi di interpretazione dell albero e classi per testare/generare leak. Ogni volta quando un oggetto di partenza è grosso, fai conto MyObject, ripercorrendo l'albero dei metodi (ammesso che siano molteplici) che li istanziano vedi sempre che la barra rossa di Live Bytes% è al 99% causata da un solo metodo (quello ke leaks). Espandendo quel metodo e navigando i metodi che hanno chiamato quel metodo si arriva ad una foglia che nuovamente ha la barra rossa LiveBytex% e Surviving generations che pesa praticamente il totale di quella segnata di fianco alla radice. Io navigando invece arrivo a metodi con peso in byte e generations assolutamente normali...

Non mi torna questo:


Perchè l'heap cresce vergognosamente addirittura quando lo used heap non solo non ne occupa manco una minima parte, ma addirittura decresce...
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:40   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
Perchè l'heap cresce vergognosamente addirittura quando lo used heap non solo non ne occupa manco una minima parte, ma addirittura decresce...
Infatti, anche a me ha colpito questo.
__________________

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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:43   #8
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
E di nuovo....





presto esplodera...senza motivo....
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:44   #9
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Si, e' un po' strano.

Riassumendo: dagli ultimi snapshot che hai postato sembra che il tuo codice abbia effettuato chiamate a monitoraggiov4.factories.persistence.EntityManagerFactoryUtil.CreateEntityManagerFactoryUtil(), da cui sono usciti 40 begli oggetti, tutti vivi.

E' esattamente quello che ti serviva? Gli snapshot successivi indicano un incremento di questo valore?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:52   #10
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Si, e' un po' strano.

Riassumendo: dagli ultimi snapshot che hai postato sembra che il tuo codice abbia effettuato chiamate a monitoraggiov4.factories.persistence.EntityManagerFactoryUtil.CreateEntityManagerFactoryUtil(), da cui sono usciti 40 begli oggetti, tutti vivi.

E' esattamente quello che ti serviva? Gli snapshot successivi indicano un incremento di questo valore?
Questo lo snapshot della memoria in questo istante... ovviamente sempre dumpando char[] e seguendo lo stesso percorso dei metodi chiamanti...



Direi che è tutto "normale" sotto questo punto di vista, 4 oggetti vivi (nel frattempo è passata la GS, 1 sola generation)...
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:56   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
@tylerdurden83: dallo snapshot al post #8 si vede chiaramente che in corrispondeza di ogni diminuzione dello "Heap Used" (viola) c'è un aumento (praticamente speculare) dello "Heap Size" (rosa).

@EDIT
se guardi anche lo snapshot al post #6 vedrai che questo comportamento non si manifesta subito, ma solo dopo un tot. di tempo.

@RI-EDIT:
e si nota che capita proprio (molto probabilmente è solo un casò) quando lo "Heap Size" ha toccato i 100 MB.
__________________

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)

Ultima modifica di banryu79 : 04-08-2010 alle 13:59.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:58   #12
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Non ho ancora capito: nella prima snapshot ce n'erano vivi 40, ora 4. Sbaglio?
Dici che e' "normale" ma io, ad istinto, andrei ad indagare proprio li'...
Ho capito male?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 13:59   #13
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
@tylerdurden83: dallo snapshot al post #8 si vede chiaramente che in corrispondeza di ogni diminuzione dello "Heap Used" (viola) c'è un aumento (praticamente speculare) dello "Heap Size" (rosa).
Al timestamp 12:50 l'aumento del rosa non è stato proprio speculare, ma diciamo che si, sono daccordo con te. Tuttavia o non ho capito nulla oppure non dovrebbe succedere questo, no? Che senso ha allocare memoria su memoria (ora 258 mega su 26 usati...)
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 04-08-2010, 14:04   #14
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Non ho ancora capito: nella prima snapshot ce n'erano vivi 40, ora 4. Sbaglio?
Dici che e' "normale" ma io, ad istinto, andrei ad indagare proprio li'...
Ho capito male?
Io invece penso vada bene se il numero di oggetti diminuisce. In pratica il punto è che se gli oggetti hanno generation=1 significa che sono "sopravvissuti" ad una GC. Il problema è se questo valore sale.
Guarda in fondo a questo breve link ad esempio. Nel mio caso i 4 oggetti sono "freschi". Che siano 40 prima della GC e 4 dopo puo essere dovuto al fatto che oggetti "temporanei" (tipo Stringhe etc) usati per inizializzarne altri siano stati collezionati dalla GC
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2010, 06:53   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
Io invece penso vada bene se il numero di oggetti diminuisce. In pratica il punto è che se gli oggetti hanno generation=1 significa che sono "sopravvissuti" ad una GC. Il problema è se questo valore sale.
Guarda in fondo a questo breve link ad esempio. Nel mio caso i 4 oggetti sono "freschi". Che siano 40 prima della GC e 4 dopo puo essere dovuto al fatto che oggetti "temporanei" (tipo Stringhe etc) usati per inizializzarne altri siano stati collezionati dalla GC
Ok, finalmente ho capito. Sono tardo
Quindi stiamo guardando gli oggetti sbagliati, giusto? Per esserne davvero sicuri: hai visto se tutta la catena degli oggetti allocati (fino alle char[]) se ne va via una volta ammazzati gli oggetti di partenza? E' ovviamente un controllo di sicurezza.....
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2010, 11:00   #16
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Ok, finalmente ho capito. Sono tardo
Quindi stiamo guardando gli oggetti sbagliati, giusto? Per esserne davvero sicuri: hai visto se tutta la catena degli oggetti allocati (fino alle char[]) se ne va via una volta ammazzati gli oggetti di partenza? E' ovviamente un controllo di sicurezza.....
Corretto, non riesco a trovare nessun accumulo di oggetti che continua a sopravvivere alla GC. A questo punto l out of memory mi pare più facilmente da attribuire alla curiosa allocazione di ulteriore spazio quando viene eseguita una GC...
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2010, 11:27   #17
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da tylerdurden83 Guarda i messaggi
Corretto, non riesco a trovare nessun accumulo di oggetti che continua a sopravvivere alla GC. A questo punto l out of memory mi pare più facilmente da attribuire alla curiosa allocazione di ulteriore spazio quando viene eseguita una GC...
E' questa, secondo me, l'anomalia.

Leggendo questo:
Quote:
Ieri ho notato che dopo un po' lo heap e le surviving generations si sono stabilizzate (la prima sui 250 MB e l'altra sulle 13 generazioni), ma da top su unix il processo continuava a crescere (addirittura 700 MB allocati, sebbene la maggior parte di essi risultasse anche free)...
mi è venuto in mente che potresti provare a far girare l'applicazione anche in qualche altro sistema. Tanto per verificare che l'anomala alloacazione "fantasma" sullo heap si verifichi sempre (che so, magari è dovuto a qualche bug in qualche libreria di terze parti che si verifica solo in qualche sistema...)

Magari aggiungendoci qualche print su consolle o su un logger che ogni tot. e/o in vari punti dell'applicazione ti stampa lo stato della memoria (java.lang.Runtime ha dei metodi utili in questo senso); in punti strategici: ad esempio prima e dopo la chiamata a codice di librerie esterne (cioè non del JDK) e controllerei anche tutti i cicli in cui siano presenti queste chiamate.

Mi rendo conto che non è un metodo molto "scentifico" di procedere... non ho esperienza di profiling, e non saprei che pesci pigliare, così sui due piedi.
__________________

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)

Ultima modifica di banryu79 : 05-08-2010 alle 11:31.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2010, 11:30   #18
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
E' questa, secondo me, l'anomalia.

Leggendo questo:

mi è venuto in mente che potresti provare a far girare l'applicazione anche in qualche altro sistema.
Magari aggiungedoci qualche print su consolle o su un logger che ogni tot. e/o in vari punti dell'applicazione ti stampa lo stato della memoria (java.lang.Runtime ha dei metodi utili in questo senso).

Mi rendo conto che non è un metodo molto "scentifico" di procedere... non ho esperienza di profiling, e non saprei che pesci pigliare, così sui due piedi.
E' un po complicato perchè i dati che estrae sono disponibili solo su quella macchina... provo a fare qualche test
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2010, 15:38   #19
tylerdurden83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 691
prstat -p 20546 300 > cacca.log

bash-2.03$ cat cacca.log
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
20546 esmon01 180M 99M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 180M 99M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 180M 99M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 180M 99M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 179M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 179M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 179M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 101M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 102M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 102M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 102M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 102M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 177M 102M sleep 59 0 0:00.07 0.0% java/31
20546 esmon01 175M 103M sleep 59 0 0:00.07 0.0% java/31

Niente niente erano le librerie di profiling a causare il leak...
tylerdurden83 è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2010, 16:11   #20
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
OMG, è un po' lollica come cosa.
Uno usa un profiler per sgamare i leak e il profiler, gentilissimo, per evitargli la fatica di scovarli glieli crea ad hoc

Ok, facendo tesoro di questa esperienza ho imparato che:
1) è meglio monitorare un'applicazione in esecuzione in un sistema da remoto, così cazzi & mazzi del profiler stesso non vanno ad inficiare i risultati (consumo di memoria, performance, anomalie varie come nel tuo caso).

2) non te l'ho suggerito prima perchè son poco avvezzo e non mi è venuto in mente, ma una cosa che potevi provare era mandare in esecuzione la tua applicazione non dall'IDE e lanciare JConsole da riga di comando.

L'importante è che alla fine ne sei venuto a capo
__________________

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)

Ultima modifica di banryu79 : 06-08-2010 alle 16:14.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
SpaceX: un satellite ha fotografato il s...
36 idee regalo con offerte Amazon sotto ...
Sony assume il controllo dei Peanuts: Sn...
DJI Neo scende a 149€ su Amazon, in vers...
Scoperto un nuovo esopianeta che orbita ...
Blue Origin NS-37: successo per la missi...
Potrebbe essere stata rilevata una super...
La cometa interstellare 3I/ATLAS è...
Xiaomi 17 Ultra: l'autonomia non sarà un...
Il processo produttivo a 2 nm di TSMC è ...
L'atteso aggiornamento dei driver della ...
The Elder Scrolls VI nel 2029 e Fallout ...
Il Ryzen 7 9850X3D appare nel catalogo d...
Weekend pre natalizio Amazon, ecco tutte...
Prezzi giù su Oral-B iO: spazzolini elet...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v