【问题标题】:How to save the VisualVM OQL result directly into file?如何将 VisualVM OQL 结果直接保存到文件中?
【发布时间】:2017-04-12 17:57:02
【问题描述】:

我的查询产生数百万行。我已经修改了visualvm.conf

-J-DOQLController.limitResults=1000000

目前,作为一种解决方法,我运行查询,然后将结果复制并粘贴到文件中。然而,结果给我的记忆带来了很大的压力。有没有办法跳过将结果显示到 UI,而直接将结果流式传输到文件?

我的查询看起来像:

select { obj1: busObj.obj1, ... , objN: busObj.objN }
  from com.my.BusinessObject busObj

【问题讨论】:

    标签: visualvm oql


    【解决方案1】:

    你可以试试这样的:

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

    【讨论】:

    • 太酷了!我不知道你可以在 OQL 中使用 FileWriter!
    【解决方案2】:

    几年前我也在解决同样的问题: 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+"'";
    

    【讨论】:

    • 太酷了!我不知道你可以在 OQL 中使用文件流!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2013-09-30
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多