2014-06-11 38 views
8

Possiedo un file di dettagli della memoria che contiene quasi 5000 istanze di un oggetto particolare. Questi oggetti devono essere scritti in un DB e il modo in cui sto facendo è scrivere una query OQL in jvisualvm per generare una stringa che servirà come un inserto SQL ad esempio Aumentare la dimensione massima del set di risultati Ovis jvisualVM

select "insert into trades (id, tradeNumber) values ("+ x.id+ ", " + x.tradeNumber +");" from com.test.application.TradeObject x; 

Quando eseguo questo tramite OQL, ottengo un set di risultati come questo -

<code> 
insert into trades (id, tradeNumber) values (1,12345); 
insert into trades (id, tradeNumber) values (2,123456); 
insert into trades (id, tradeNumber) values (3,123457); </code> 

ecc

Tuttavia, dal momento che il numero totale di casi è di grandi dimensioni (circa 5000) jvisualvm mostra solo circa 100 di loro. e poi errori con un messaggio "Troppi risultati. Perfeziona la tua query".

Non riesco a definire la query perché devo analizzare tutte le istanze in questo modo. C'è un modo in cui posso chiedere a JvisualVM di mostrarmi tutte le istanze e non limitare il numero di risultati?

Vedo anche che Jvisual vm mostra le prime 100 istanze senza filtri, è possibile ottenere le successive 100 istanze e così via tramite query OQL?

Grazie

risposta

7

non sono riuscito a trovare le impostazioni in jvisualvm per aumentare le dimensioni del gruppo di risultati. Forse non è possibile in questo modo. Sembra un limite hard codificato nella base di codice Jvisualvm. Rif: http://visualvm.sourcearchive.com/documentation/1.3/OQLController_8java-source.html

seguito troverete frammenti di là:

final AtomicInteger counter = new AtomicInteger(100); 

e

if (counter.get() == 0) { 
sb.append("<tr><td><h4>Too many results. Please, refine your query.</h4></td></tr>"); 
} else if (counter.get() == 100) { 
sb.append("<tr><td><h4>"); // NOI18N 
sb.append(NbBundle.getMessage(OQLController.class, "OQL_NO_RESULTS_MSG")); // NOI18N 
sb.append("</h4></td></tr>"); // NOI18N 
} 

Ora la parte interessante, la soluzione per il vostro problema.

considera la categoria di seguito:

package com.demo.test; 
class Xyz { 
     int idXyz;// intentionally not set as id 
     String value; 

     public Xyz(int idXyz, String value) { 
      this.idXyz = idXyz; 
      this.value = value; 
     } 
    } 

ora dire che ho 105 oggetti in memoria per questa classe, tenuti in una lista come:

 static List<Xyz> lst = new ArrayList<>(); 
     for (int i = 0; i < 105; i++) { 
      lst.add(new Xyz(i,"xyz value-" + i)); 
     } 

e ho bisogno di realizzare ciò che si sta facendo .

Ora per mostrare questi 105 oggetti invece di elencare tutti i set di risultati, preferirei iterare su tutti gli oggetti e creare una singola stringa contenente tutte le query SQL separate da una nuova riga. Per questo è necessario richiamare uno script OQL simile in Query Editor.

function fun(objEnumeration){ 
var res =" "; 
while (objEnumeration.hasMoreElements()) { 
    var itr = objEnumeration.nextElement(); 
    var v = "insert into table_Xyz (idXyz, value) values ("+ itr.idXyz.toString()+ ", " + itr.value.toString() +");\n" 
    res = res + v; 
} 
return res; 
} 

fun(heap.objects("com.demo.test.Xyz")); 

e il risultato in Query Results scheda sarà:

insert into table_Xyz (idXyz, value) values (104, xyz value-104); 
insert into table_Xyz (idXyz, value) values (103, xyz value-103); 
insert into table_Xyz (idXyz, value) values (102, xyz value-102); 
insert into table_Xyz (idXyz, value) values (101, xyz value-101); 
insert into table_Xyz (idXyz, value) values (100, xyz value-100); 
insert into table_Xyz (idXyz, value) values (99, xyz value-99); 
insert into table_Xyz (idXyz, value) values (98, xyz value-98); 
insert into table_Xyz (idXyz, value) values (97, xyz value-97); 
insert into table_Xyz (idXyz, value) values (96, xyz value-96); 
insert into table_Xyz (idXyz, value) values (95, xyz value-95); 
insert into table_Xyz (idXyz, value) values (94, xyz value-94); 
insert into table_Xyz (idXyz, value) values (93, xyz value-93); 
insert into table_Xyz (idXyz, value) values (92, xyz value-92); 
insert into table_Xyz (idXyz, value) values (91, xyz value-91); 
insert into table_Xyz (idXyz, value) values (90, xyz value-90); 
insert into table_Xyz (idXyz, value) values (89, xyz value-89); 
insert into table_Xyz (idXyz, value) values (88, xyz value-88); 
insert into table_Xyz (idXyz, value) values (87, xyz value-87); 
insert into table_Xyz (idXyz, value) values (86, xyz value-86); 
insert into table_Xyz (idXyz, value) values (85, xyz value-85); 
insert into table_Xyz (idXyz, value) values (84, xyz value-84); 
insert into table_Xyz (idXyz, value) values (83, xyz value-83); 
insert into table_Xyz (idXyz, value) values (82, xyz value-82); 
insert into table_Xyz (idXyz, value) values (81, xyz value-81); 
insert into table_Xyz (idXyz, value) values (80, xyz value-80); 
insert into table_Xyz (idXyz, value) values (79, xyz value-79); 
insert into table_Xyz (idXyz, value) values (78, xyz value-78); 
insert into table_Xyz (idXyz, value) values (77, xyz value-77); 
insert into table_Xyz (idXyz, value) values (76, xyz value-76); 
insert into table_Xyz (idXyz, value) values (75, xyz value-75); 
insert into table_Xyz (idXyz, value) values (74, xyz value-74); 
insert into table_Xyz (idXyz, value) values (73, xyz value-73); 
insert into table_Xyz (idXyz, value) values (72, xyz value-72); 
insert into table_Xyz (idXyz, value) values (71, xyz value-71); 
insert into table_Xyz (idXyz, value) values (70, xyz value-70); 
insert into table_Xyz (idXyz, value) values (69, xyz value-69); 
insert into table_Xyz (idXyz, value) values (68, xyz value-68); 
insert into table_Xyz (idXyz, value) values (67, xyz value-67); 
insert into table_Xyz (idXyz, value) values (66, xyz value-66); 
insert into table_Xyz (idXyz, value) values (65, xyz value-65); 
insert into table_Xyz (idXyz, value) values (64, xyz value-64); 
insert into table_Xyz (idXyz, value) values (63, xyz value-63); 
insert into table_Xyz (idXyz, value) values (62, xyz value-62); 
insert into table_Xyz (idXyz, value) values (61, xyz value-61); 
insert into table_Xyz (idXyz, value) values (60, xyz value-60); 
insert into table_Xyz (idXyz, value) values (59, xyz value-59); 
insert into table_Xyz (idXyz, value) values (58, xyz value-58); 
insert into table_Xyz (idXyz, value) values (57, xyz value-57); 
insert into table_Xyz (idXyz, value) values (56, xyz value-56); 
insert into table_Xyz (idXyz, value) values (55, xyz value-55); 
insert into table_Xyz (idXyz, value) values (54, xyz value-54); 
insert into table_Xyz (idXyz, value) values (53, xyz value-53); 
insert into table_Xyz (idXyz, value) values (52, xyz value-52); 
insert into table_Xyz (idXyz, value) values (51, xyz value-51); 
insert into table_Xyz (idXyz, value) values (50, xyz value-50); 
insert into table_Xyz (idXyz, value) values (49, xyz value-49); 
insert into table_Xyz (idXyz, value) values (48, xyz value-48); 
insert into table_Xyz (idXyz, value) values (47, xyz value-47); 
insert into table_Xyz (idXyz, value) values (46, xyz value-46); 
insert into table_Xyz (idXyz, value) values (45, xyz value-45); 
insert into table_Xyz (idXyz, value) values (44, xyz value-44); 
insert into table_Xyz (idXyz, value) values (43, xyz value-43); 
insert into table_Xyz (idXyz, value) values (42, xyz value-42); 
insert into table_Xyz (idXyz, value) values (41, xyz value-41); 
insert into table_Xyz (idXyz, value) values (40, xyz value-40); 
insert into table_Xyz (idXyz, value) values (39, xyz value-39); 
insert into table_Xyz (idXyz, value) values (38, xyz value-38); 
insert into table_Xyz (idXyz, value) values (37, xyz value-37); 
insert into table_Xyz (idXyz, value) values (36, xyz value-36); 
insert into table_Xyz (idXyz, value) values (35, xyz value-35); 
insert into table_Xyz (idXyz, value) values (34, xyz value-34); 
insert into table_Xyz (idXyz, value) values (33, xyz value-33); 
insert into table_Xyz (idXyz, value) values (32, xyz value-32); 
insert into table_Xyz (idXyz, value) values (31, xyz value-31); 
insert into table_Xyz (idXyz, value) values (30, xyz value-30); 
insert into table_Xyz (idXyz, value) values (29, xyz value-29); 
insert into table_Xyz (idXyz, value) values (28, xyz value-28); 
insert into table_Xyz (idXyz, value) values (27, xyz value-27); 
insert into table_Xyz (idXyz, value) values (26, xyz value-26); 
insert into table_Xyz (idXyz, value) values (25, xyz value-25); 
insert into table_Xyz (idXyz, value) values (24, xyz value-24); 
insert into table_Xyz (idXyz, value) values (23, xyz value-23); 
insert into table_Xyz (idXyz, value) values (22, xyz value-22); 
insert into table_Xyz (idXyz, value) values (21, xyz value-21); 
insert into table_Xyz (idXyz, value) values (20, xyz value-20); 
insert into table_Xyz (idXyz, value) values (19, xyz value-19); 
insert into table_Xyz (idXyz, value) values (18, xyz value-18); 
insert into table_Xyz (idXyz, value) values (17, xyz value-17); 
insert into table_Xyz (idXyz, value) values (16, xyz value-16); 
insert into table_Xyz (idXyz, value) values (15, xyz value-15); 
insert into table_Xyz (idXyz, value) values (14, xyz value-14); 
insert into table_Xyz (idXyz, value) values (13, xyz value-13); 
insert into table_Xyz (idXyz, value) values (12, xyz value-12); 
insert into table_Xyz (idXyz, value) values (11, xyz value-11); 
insert into table_Xyz (idXyz, value) values (10, xyz value-10); 
insert into table_Xyz (idXyz, value) values (9, xyz value-9); 
insert into table_Xyz (idXyz, value) values (8, xyz value-8); 
insert into table_Xyz (idXyz, value) values (7, xyz value-7); 
insert into table_Xyz (idXyz, value) values (6, xyz value-6); 
insert into table_Xyz (idXyz, value) values (5, xyz value-5); 
insert into table_Xyz (idXyz, value) values (4, xyz value-4); 
insert into table_Xyz (idXyz, value) values (3, xyz value-3); 
insert into table_Xyz (idXyz, value) values (2, xyz value-2); 
insert into table_Xyz (idXyz, value) values (1, xyz value-1); 
insert into table_Xyz (idXyz, value) values (0, xyz value-0); 

basta modificare lo script OQL in base alle proprie esigenze.

NOTA: in classe Xyz il campo idXyz era intentionally not set as id, poiché in tal caso itr.id restituirà l'ID oggetto associato a tale istanza.

per più sui metodi OQL Rif: http://visualvm.java.net/oqlhelp.html#toHtml

1

Ora è possibile (v 1.7), da netbeans/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/OQLController.java:

private static final int RESULTS_LIMIT = \ 
    Integer.parseInt(System.getProperty("OQLController.limitResults", "100")); // NOI18N 

Il mio codice di supporto (se si salta limit - allora illimitato):

function loop1(iter, limit) { 
    if (!iter.hasNext()) 
    return "<b>Nothing found!</b>"; 
    var count = 0; 
    var html = ""; 
    while (true) { 
    if (count >= limit) 
     return "<b>First </b>" + limit + "<b> objects (not all):</b><br>" + html; 
    if (!iter.hasNext()) 
     return "<b>Total </b>" + count + "<b> objects:</b><br>" + html; 
    html += toHtml(iter.next()) + "<br>"; 
    count += 1; 
    } 
} 
function loop2(iter, limit) { 
    if (!iter.hasMoreElements()) 
    return "<b>Nothing found!</b>"; 
    var count = 0; 
    var html = ""; 
    while (true) { 
    if (count >= limit) 
     return "<b>First </b>" + limit + "<b> objects (not all):</b><br>" + html; 
    if (!iter.hasMoreElements()) 
     return "<b>Total </b>" + count + "<b> objects:</b><br>" + html; 
    html += toHtml(iter.nextElement()) + '<br>'; 
    count += 1; 
    } 
} 
function loop(iter, limit) { 
    if ('hasMoreElements' in iter) 
    return loop2(iter, limit); 
    return loop1(iter, limit); 
} 

loop(filter(heap.classes(), "/javax.mail./(it.name)"), 1000) // loop1 
loop(heap.objects('java.lang.ClassLoader'))     // loop2 

UPDATE Un altro trucco che ho trovato è l'assegnazione di valore alla variabile:

x = filter(heap.objects("java.lang.String"), "/hibernate\\.ejb/(it.toString())") 
x 

oggetto Portato ha interfaccia next()/hasNext() che viene utilizzato dal visualizzatore. Di default mostrava 100 voci. Ma la prossima chiamata solo:

x 

mostrato le prossime 100 voci e così via ...!

7

Aperto visualvm.conf di file:

%JDK_HOME%\lib\visualvm\etc\visualvm.conf 

aggiungere una stringa iniziato con

visualvm_default_options=".... 

una proprietà con il valore limite auspicabile

-J-DOQLController.limitResults=999