当前位置: 首页 > 知识库问答 >
问题:

在离线模式下使用带有weblogic进程的Janalyiler Controller

汪迪
2023-03-14

我正在尝试使用ControllerJavaAPI,基于demos\api\样本\离线\示例,分析以离线模式在Weblogic上运行的应用程序。

我的问题是。虽然控制器未创建jps文件。saveSnapshot()无误退出。

>

  • 我创建了一个会话配置,当我在GUI中附加到进程时,它运行良好。

    我将config.xml文件从home复制到工作目录。

    我使用以下行更新了我的服务的服务器启动中的JVM参数:

    -代理路径:/home/alex/jprofiler10/bin/linux-x64/libjprofilerti。so=offline,id=116,config=/workdir/config\u-bak。xml

    我创建了一个Java程序,该程序启动CPU评测,然后结束CPU评测,并尝试保存评测结果。

    控制器。startCPURecording(真)
    performProfiledTask()
    控制器。StopCpureRecording();

    String fName=“test.jps”;系统出来println(“保存快照:”fName);控制器。saveSnapshot(新文件(fName))
    系统。出来println(“保存的快照:”fName);

    程序执行时不会出错,但不会创建快照文件。

    我尝试使用sudo权限运行它,结果相同。

    编辑:

    也许我不明白什么,但在我看来,如果控制器只在与分析代码相同的进程中运行,那么JProfiler脱机工作。

    当它在不同的\子进程中运行时,不会创建文件。

    例如,我希望创建文件的以下代码不这样做。

    分析过程:

    import java.io.File;
    import java.io.IOException;
    
    import com.jprofiler.api.controller.Controller;
    
    //turn on profiling and run a child process with offline profiling enabled in agentpath
    public class PerfDemo {
    
        public static void main(String[] args) throws IOException {
    
            System.out.println("Started profiling");
    
            // On startup, JProfiler does not record any data. The various recording subsystems have to be
            // switched on programatically.
            Controller.startCPURecording(true);
    
            try {
                exec(CpuIntensiveProcess.class);
    
            } catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("Exception: "+ex.getStackTrace());
            }
    
            // You can switch off recording at any point. Recording can be switched on again.
            Controller.stopCPURecording();
            saveSnapshot("snapshot.jps");              
        }
    
        private static void saveSnapshot(String fileName){
            System.out.println("saving snapshot: "+fileName);
            Controller.saveSnapshot(new File(fileName));        
        }
    
        //execute a new process with offline profiling enabled in agentpath
        public static int exec(Class klass) throws IOException, InterruptedException{
    
                String javaHome = System.getProperty("java.home");
                String javaBin = javaHome +
                File.separator + "bin" +
                File.separator + "java";
                String classpath = System.getProperty("java.class.path");
                String className = klass.getName();
    
                ProcessBuilder builder = new ProcessBuilder(
                javaBin, "-cp", classpath, "-agentpath:\"c:\\\\Progra~1\\\\jprofiler10\\\\bin\\\\windows-x64\\\\jprofilerti.dll\"=offline,id=110,config=config.xml", className );
    
                System.out.println("starting process");
                Process process = builder.inheritIO().start();
                process.waitFor();
    
                System.out.println("process finished");
                return process.exitValue(); 
        }
    }
    

    分析过程:

    import static java.lang.Math.*;
    
    import java.io.IOException;
    
    public class CpuIntensiveProcess {
    
        public static void main(String[] args) throws IOException {
            for (int i=0;i<50000000;i++) {
                double d = tan(atan(tan(atan(tan(atan(tan(atan(tan(atan(123456789.123456789))))))))));
                double h =d+1;
            }        
        }   
    }
    

    运行时批处理:

    @echo off
    
    SET CLASSPATH=.;jprofiler-controller-10.1.4.jar;agent.jar;
    "c:\Program Files\Java\jdk-10.0.1\bin\javac.exe" -cp %CLASSPATH% *.java
    java -cp %CLASSPATH% PerfDemo
    
    REM If I run in this configuration, the profiling is of the PerfDemo process and not of the CpuIntensiveProcess process
    REM SET AGENTPATH=-agentpath:"c:\\Progra~1\\jprofiler10\\bin\\windows-x64\\jprofilerti.dll"=offline,id=110,config=config.xml
    REM java -cp %CLASSPATH%  %AGENTPATH% PerfDemo
    
    set "CURR_DIR=%cd%"
    pushd "c:\Program Files\jprofiler10\bin"
    jpexport %CURR_DIR%/snapshot.jps -outputdir=%CURR_DIR% HotSpots out.csv
    popd
    
    type out.csv
    

    当我运行批处理时,没有。已创建jps文件。

    当我使用agentpath运行PerfDemo进程时,会创建jps文件,但分析是同一个进程,而不是另一个进程。

    输出:

    C:\dev\docs\bak\sample_other_process_profiling>profile.bat
    Started profiling
    Starting child process...
    JProfiler> Protocol version 59
    JProfiler> Java 9+ detected.
    JProfiler> JVMTI version 1.1 detected.
    JProfiler> Offline profiling mode.
    JProfiler> 64-bit library
    JProfiler> Using config file config.xml (id: 110)
    JProfiler> Listening on port: 8849.
    JProfiler> Enabling native methods instrumentation.
    JProfiler> Can retransform classes.
    JProfiler> Can retransform any class.
    JProfiler> Native library initialized
    JProfiler> VM initialized
    JProfiler> Retransforming 7 base class files.
    JProfiler> Base classes instrumented.
    JProfiler> Using instrumentation
    JProfiler> Time measurement: elapsed time
    JProfiler> CPU profiling enabled
    Child process finished
    Saving snapshot: snapshot.jps
    Controller.saveSnapshot finished, snapshot should exist on the disk: snapshot.jps
    The snapshot file C:\dev\docs\bak\sample_other_process_profiling\snapshot.jps does not exist.
    The system cannot find the file specified.
    
  • 共有1个答案

    夔桐
    2023-03-14

    控制器类仅在加载分析代理的JVM中起作用,通常通过使用-agentpath:VM参数启动JVM。

    在您的例子中,您在未加载分析代理的进程中调用控制器类,因此调用无效。此外,这些调用对子进程没有任何影响。

    您必须将对控制器类的调用移动到子进程中才能使其工作。

     类似资料:
    • 我在wift 3.0中访问了一个Web服务,并且我也在离线模式下收到响应。 以下是我工作的细节: > 我需要调用1个Web服务-让url=URL(string:"http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors") 通过使用URLSession。共享。数据任务(…)我在上述web服务中调用的方法。 用try?语句的JS

    • Progressive Web Apps(PWA) 是一项融合 Web 和 Native 应用各项优点的解决方案。我们可以利用其支持离线功能的特点,让我们的网站可以在信号差或者离线状态下正常运行。 要使用它也非常容易。 创建 serviceWorker 这里已经整理好了一份代码,你只需要在网站根目录下创建一个 sw.js 文件,并粘贴下面的代码。 sw.js /* ================

    • 我试图在离线模式下使用JPfroler分析运行在Linux机器上的远程服务器。我创建了一个堆使用阈值触发器,操作为“保存快照”和“触发堆转储”。然后我向服务器添加了以下JAVA_OPTIONS配置。 我的问题是如何检索触发器生成的快照和堆转储文件?是否有一个位置可以在远程服务器中查找这些文件?非常感谢您的回答。

    • 我试图在Mac OS上运行一个示例JavaFX应用程序。 Build.Gradle Java类 怎么啦?由于某种原因,JavaFX库没有正确加载。可能是MacOS或openjfx的错误吗?

    • 找不到https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/4.1.3/gradle-4.1.3.jar“。从服务器收到状态代码405:不允许方法禁用渐变“脱机模式”和同步项目在此处输入图像描述

    • 问题内容: 我有用Flask编写的Web应用程序。正如每个人的建议,我不能在生产中使用Flask。所以我想到了带有Flask的Gunicorn。 在Flask应用程序中,我正在加载一些机器学习模型。这些总大小为8GB。我的Web应用程序的并发性可以达到1000个请求。并且机器的RAM是15GB。 那么,运行此应用程序的最佳方法是什么? 问题答案: 你可以使用Gunicorn的多个工作人员或异步工作