首页 > 其他分享 >grafana jpprof 试用

grafana jpprof 试用

时间:2022-11-04 11:33:37浏览次数:79  
标签:http pprof grafana maven jpprof 试用 com

grafana jpprof 是为了方便grafana phlare 对于java 语言支持开发的一个包,可以让java 语言方便的自持pprof 格式的内容,进行持续性能优化
以下是一个简单的试用

环境准备

  • pom 文件
 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.dalong</groupId>
    <artifactId>jjprofilerapps</artifactId>
    <version>1.0-SNAPSHOT</version>
 
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
 
    <dependencies>
        <dependency>
            <groupId>com.grafana</groupId>
            <artifactId>jpprof</artifactId>
            <version>0.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.sparkjava</groupId>
            <artifactId>spark-core</artifactId>
            <version>2.9.4</version>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <name>maven</name>
            <id>maven</id>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <url>https://repo1.maven.org/maven2/</url>
        </repository>
    </repositories>
    <build>
        <finalName>myinstance-app</finalName>
        <plugins>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <from>
                        <image>eclipse-temurin:11-jdk-alpine</image>
                    </from>
                    <to>
                        <image>dalongrong/jpprof-learning</image>
                    </to>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <!-- Run shade goal on package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <!-- add Main-Class to manifest file -->
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.dalong.Application</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
  • 入口代码
    基于了spark java web 框架
 
package com.dalong;
 
import jpprof.CPUProfiler;
import spark.Service;
 
import java.io.IOException;
import java.time.Duration;
 
public class Application {
    public static void main(String[] args) throws IOException {
        Service service = Service.ignite();
        service.port(9999);
        // 内容参考子PprofHttpHandler 做了一些修改,方便支持sparkjava
        service.get("/debug/pprof/profile", (req, res) -> {
            String seconds = req.queryParams("seconds");
            Duration duration = Duration.ofSeconds((long) Integer.parseInt(seconds));
            try {
                res.header("Content-Encoding", "gzip");
                res.status(200);
                CPUProfiler.start(duration, res.raw().getOutputStream());
            } catch (Exception var9) {
                res.status(500);
            } finally {
                res.raw().getOutputStream().close();
            }
            return null;
        });
        service.get("/demo", (request, response) -> {
            return "dalongdemo";
        });
    }
}

使用

启动服务,并进行压测,然后使用go pprof 获取pprof 内容,显示效果

  • 压测
ab -n 4000 -c 100 http://localhost:9999/demo
  • 获取内容
go tool pprof -http :6060 http://localhost:9999/debug/pprof/profile\?seconds\=10
  • 效果

 

 

 

 

说明

jpprof 是基于jdk 11 开发的,所以目前会有一些问题(尤其是国内还是jdk 8 为主流的时候),jpprof 是一个很不错的工具包,让我们可以体验golang pprof 便捷的能力
一个现成可以运行试用的镜像dalongrong/jpprof-learning

参考资料

https://sparkjava.com/documentation#redirects
https://github.com/grafana/JPProf
https://github.com/rongfengliang/grafana-jpprof-learning

标签:http,pprof,grafana,maven,jpprof,试用,com
From: https://www.cnblogs.com/rongfengliang/p/16857176.html

相关文章

  • grafana phlare 开源持续优化平台
    对于持续优化我以前介绍过几个开源工具,目前grafana也开源了一个自己的,还是很不错的参考架构  支持的语言目前支持java,golang,rust,python说明parca也是一个不错......
  • 最全面的测试用例整理
    一、文本框为字符型必填项非空校验:1、必填项未输入--程序应提示错误;2、必填项只输入若干个空格,未输入其它字符--程序应提示错误;字段唯一性校验:(不是所有字段都作此项......
  • grafana faro-web-sdk web 可观测性sdk
    最近grafan大会开源了不少好东西,faro-web-sdk就是一个很不错的前端监控方案参考架构  说明phlare也是grafana开源的一些持续profle的一个方便工具,faro-web-sd......
  • 如何利用API FOX编写业务测试用例?
     假设管理员进行一个场景:为网站新增品牌,内容为品牌名:冬青及服务商名:胡歌,并验证是否新增成功所以:通过页面的F12查询,我们可以知道新增品牌接口,及列表品牌接口,以及品牌详情......
  • pytest运行测试用例时,控制台不打印警告信息
    使用pytest执行用例,控制台显示警告信息: 解决方法:新增pytest.ini文件,文件内容:[pytest]addopts=-pno:warnings 再次运行测试用例,控制台打印无警告信息......
  • 网易云音乐评论功能设计测试用例【杭州多测师】【杭州多测师_王sir】
    1、网易云音乐,评论功能设计测试用例功能测试:1.在歌曲播放界面点击评论按钮是否可以进入到评论区2.如果超过999条评论是否自动化会显示999+3.在评论界面点击左上角返回按钮......
  • Node_exporter+Prometheus+Grafana 安装配置详解
    在进行性能测试时,想直观看到服务器的CPU、内存占用多少,可以搭建prometheus+node_exporter+grafana来实现。通过node_exporter把从服务器(即被监控机器)采集到的信息发到pr......
  • 单元测试用例复用到集成测试?Testlet Library来助力!
    前言  作为一名测试工程师,在做MiL测试时,编写测试用例的效率影响整个测试项目的进度,如何有效提升编写测试用例的效率,是大家都关心的问题。 TPT作为一款自动化测试......
  • backstage 面向开发者门户框架再次简单试用
    很早以前我试用过backstage,同时写过简单的介绍,随着目前backstage越来越强大,而且进入了linux基金会,同时还是cncf孵化项目对于backstage需要重新深入学习研究下了,以下只......
  • 云原生爱好者周刊:使用 Cilium 和 Grafana 实现无侵入可观测性
    开源项目推荐CiliumGrafanaObservabilityDemo这个项目由Cilium母公司Isovalent开源,提供了一个Demo,使用Cilium、OpenTelemetry、Tempo、Prometheus和Grafana......