2014-06-11 22 views
8

Belirli bir nesnenin yaklaşık 5000 örneğini içeren bir bellek döküm dosyasına sahibim. Bu nesneler bir DB'ye yazılır ve bunu yaptığım şekilde, bir SQL eklentisi olarak hizmet edecek bir dize oluşturmak için jvisualvm'de bir OQL sorgusu yazmaktır. Örneğin, jvisualVM OQL resultset'in maksimum boyutunu artırma

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

Bunu OQL üzerinden çalıştırdığımda, böyle belirlenen bir sonucu - örneklerde toplam sayısı (5000) etrafında büyük olduğu

<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> 

vb

Ancak JvisualVM yaklaşık 100 tanesi gösterilmektedir. ve sonra "Çok fazla sonuç var. Lütfen, sorgunuzu hassaslaştırın" mesajıyla hata veriyor.

Sorguyu, bu şekilde tüm örnekleri ayrıştırmam gerektiği için hassaslaştıramıyorum. JvisualVM'den tüm örnekleri göstermesini ve sonuç sayısını kısıtlamamasını isteyebileceğim bir yol var mı?

Ayrıca Jvisual vm'nin herhangi bir filtresiz ilk 100 örneğini gösterdiğini görüyorum, OQL sorgusu üzerinden bir sonraki 100 örneğini almak mümkün mü?

Teşekkür

cevap

7

Ben resultset boyutunu artırmak için jvisualVm herhangi bir ayarı bulamadık. Bu şekilde mümkün olmayabilir. Jvisualvm kod tabanında sabit kodlanmış bir sınıra benziyor. Ref: Orada snippet'lere altında http://visualvm.sourcearchive.com/documentation/1.3/OQLController_8java-source.html

bulmak:

final AtomicInteger counter = new AtomicInteger(100); 

ve Şimdi

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 
} 

ilginç kısmı

, senin sorun için çözüm.

aşağıda sınıfı düşünün:

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; 
     } 
    } 

şimdi bu sınıf için bellekte 105 nesneleri söylüyorlar, böyle bir listede tutulur:

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

ve ben ne yaptığınızı ulaşmak için ihtiyaç .

Tüm bu örnek kümelerini listelemek yerine bu 105 nesneyi göstermek için, tüm nesneler üzerinde yinelemeyi ve yeni satır tarafından ayrılan tüm SQL sorgularını içeren tek bir dizgi oluşturmayı tercih ediyorum. Bunun için Query Editor'da benzer OQL komut dosyasını çağırmanız gerekir.

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")); 

ve Query Results sekmede sonuç olacaktır:

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); 

sadece gereksinimi uygun OQL senaryoyu değiştirin.

NOT: Xyz sınıfında, bu örnekle ilişkili nesne kimliğini itr.id döndüreceği gibi, idXyz alanı intentionally not set as id idi.OQL yöntemleri hakkında daha fazla bilgi için

ref: http://visualvm.java.net/oqlhelp.html#toHtml

1

Şimdi (v 1.7), netbeans/profiler.heapwalker/src/org/netbeans/modules/profiler/heapwalk/OQLController.java den mümkündür:

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

My yardımcı kodunu (atlarsanız limit - o zaman sınırsız):

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 Bulduğum başka bir numara, değişkene değer atama:

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

sonuçlanan nesne izleyicisi ile kullanılan arabirimi next()/hasNext() sahiptir. Varsayılan olarak 100 giriş gösterdi. Ancak bir sonraki çağrı sadece:

x 

sonraki 100 giriş gösteriliyor vb.

7

Açık visualvm.conf dosyası:

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

bir dizeye eklemek için arzu sınır değeri ile

visualvm_default_options=".... 

bir özellik ile başladı

-J-DOQLController.limitResults=999