如何将 VisualVM OQL 结果直接保存到文件中?
How to save the VisualVM OQL result directly into file?
我的查询结果有数百万行。我已经修改了visualvm.conf
-J-DOQLController.limitResults=1000000
目前,作为一种解决方法,我 运行 查询,并将结果复制并粘贴到文件中。然而,结果给我的记忆带来了很大的压力。是否可以跳过向 UI 显示结果,而直接将结果流式传输到文件?
我的查询如下:
select { obj1: busObj.obj1, ... , objN: busObj.objN }
from com.my.BusinessObject busObj
您可以尝试类似的方法:
writeToFile()
function writeToFile() {
var objects = heap.objects("com.my.BusinessObject", false);
var FileWriterClass=Java.type("java.io.FileWriter");
var writer = new FileWriterClass("/tmp/out.txt");
while (objects.hasMoreElements()) {
var busObj = objects.nextElement();
writer.write("obj1: "+busObj.obj1+", obj2: "+busObj.obj2+"\n");
}
writer.close();
return { Result: "done" };
}
几年前我也在解决同样的问题:
https://vondrnotes.blogspot.com/2014/09/visualvm-oql-which-write-byte-into-file.html
我在 OQL 中使用 VisualVM 做到了:
//To get Id of object
//In VisualVM right click on instance of byte[] and select 'Copy ID'
var bytes = heap.findObject(0xe21b95d8);
var filePath = "c:/tmp/result.txt"
var fos = new java.io.FileOutputStream(filePath);
var len = bytes.length
for (var i=0; i<len; i++) {
fos.write(bytes[i]);
}
fos.close();
"Bytes has been written into file '" + filePath+"'";
我的查询结果有数百万行。我已经修改了visualvm.conf
-J-DOQLController.limitResults=1000000
目前,作为一种解决方法,我 运行 查询,并将结果复制并粘贴到文件中。然而,结果给我的记忆带来了很大的压力。是否可以跳过向 UI 显示结果,而直接将结果流式传输到文件?
我的查询如下:
select { obj1: busObj.obj1, ... , objN: busObj.objN }
from com.my.BusinessObject busObj
您可以尝试类似的方法:
writeToFile()
function writeToFile() {
var objects = heap.objects("com.my.BusinessObject", false);
var FileWriterClass=Java.type("java.io.FileWriter");
var writer = new FileWriterClass("/tmp/out.txt");
while (objects.hasMoreElements()) {
var busObj = objects.nextElement();
writer.write("obj1: "+busObj.obj1+", obj2: "+busObj.obj2+"\n");
}
writer.close();
return { Result: "done" };
}
几年前我也在解决同样的问题: https://vondrnotes.blogspot.com/2014/09/visualvm-oql-which-write-byte-into-file.html
我在 OQL 中使用 VisualVM 做到了:
//To get Id of object
//In VisualVM right click on instance of byte[] and select 'Copy ID'
var bytes = heap.findObject(0xe21b95d8);
var filePath = "c:/tmp/result.txt"
var fos = new java.io.FileOutputStream(filePath);
var len = bytes.length
for (var i=0; i<len; i++) {
fos.write(bytes[i]);
}
fos.close();
"Bytes has been written into file '" + filePath+"'";