首页 > 其他分享 >springboot-micrometer潜在oom问题解决办法

springboot-micrometer潜在oom问题解决办法

时间:2023-12-13 13:57:59浏览次数:37  
标签:httpExchange springboot oom micrometer meter server Prometheus new prometheusMet

在服务中起一个监听Prometheus 拉取的线程,在拉取完成之后清理调meterMap中内容比较多的tag,我这边是清理调gateway.requests.代码如下:

@Component
public class PrometheusMeterRegistryFactory {

    @Resource
    private PrometheusMeterRegistry prometheusMeterRegistry;


    @Value("${gatewayMeter.clearMinute:60}")
    private Integer clearMinute;


    @PostConstruct
    public void createHttpServer() {
        try {
            //创建一个Http服务
            HttpServer server = HttpServer.create(new InetSocketAddress(38888), 0);
            //服务设置一个针对/metrics路径请求的监听,并设置处理器HttpHandler
            server.createContext("/actuator/prometheus", httpExchange -> {
                //由PrometheusMeterRegistry抓取数据,它会将抓取的数据按Prometheus所需要的格式处理好
                String response = prometheusMeterRegistry.scrape();
                //接下来有httpExchange将数据返回给Prometheus服务器
                httpExchange.sendResponseHeaders(200, response.getBytes().length);
                try (OutputStream os = httpExchange.getResponseBody()) {
                    os.write(response.getBytes());
                }
                List<Meter> meters = prometheusMeterRegistry.getMeters();
                for (Meter meter : meters) {
                    if (meter.getId().getName().startsWith("gateway.requests")) {
                        prometheusMeterRegistry.remove(meter);
                    }
                }
            });
            //开启一个线程来处理Prometheus服务器抓取数据的请求
            new Thread(server::start).start();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}

标签:httpExchange,springboot,oom,micrometer,meter,server,Prometheus,new,prometheusMet
From: https://www.cnblogs.com/tyli/p/17898883.html

相关文章

  • springboot+vue小白升级之路14-实现系统公告首页公告展示、springboot+vue小白升级之
    还是接着之前的内容,我把新增的功能代码贴出来,给大家参考学习。数据库droptableifexistsan_user;createtablean_user( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnulluniquecomment'姓名', `password`varchar(255)notnu......
  • springboot+vue小白升级之路13-AOP实现登录、增删改查操作日志管理
    还是接着上一个的内容,我把这个新增的关于日志的功能代码都贴出来,供大家学习参考。数据库数据库droptableifexistsan_log;createtablean_log( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnullcomment'操作内容', log_dateda......
  • springboot+vue小白升级之路06-实现文件上传和下载
    接着上一个的内容,代码我就不全部贴了,有变化的部分发一下springboot后端pojobook.javapackagecom.shrimpking.pojo;importjava.math.BigDecimal;importcom.baomidou.mybatisplus.annotation.TableName;importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomid......
  • springboot+vue小白升级之路07-快速实现批量删除、小白升级之路08-实现批量导入导出ex
    我们接着之前的内容,全部代码我贴一下,大家参考使用。数据库droptableifexistsan_user;createtablean_user( idintnotnullauto_incrementprimarykeycomment'主键id', namevarchar(255)notnulluniquecomment'姓名', `password`varchar(255)notnullcomment......
  • springboot+vue小白升级之路04-实现登录注册功能和springboot+vue小白升级之路05-实现
    我们接着上一课的内容继续我还是尽量把全部代码都贴出来,方便大家学习。项目结构截图springboot后端pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>......
  • springboot+vue小白升级之路11-请假申请,请假审核功能
    这部分代码,我们接着上一个的,就不全部贴出来了。把与这个功能有关的代码贴出来,大家参考。pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></de......
  • springboot+vue小白升级之路03-实现增删改查、分页查询、模糊查询功能
    我们接着上一课的内容继续springboot后端pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>......
  • SpringBoot3
    入门创建项目<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.1</version></parent>导入场景,选择对应的场景启动器<dependencies><d......
  • SpringBoot2
    概述SpringBoot是整合Spring技术栈的一站式框架。SpringBoot是简化Spring技术栈的快速开发脚手架。优点创建独立Spring应用内嵌web服务器自动starter依赖,简化构建配置自动配置Spring以及第三方功能提供生产级别的监控、健康检查及外部化配置无代码生成、无需编写XML入......
  • Springboot项目通过redis实现接口的幂等性
    在SpringBoot项目中,通过Redis实现接口的幂等性通常是通过在Redis中存储唯一标识符(token、UUID等)的方式来实现。当接口第一次被调用时,生成并存储一个唯一标识符到Redis,然后将该标识符返回给客户端。客户端在后续的请求中携带该标识符,服务端在处理请求之前检查Redis中是否存在该标识......