精华内容
下载资源
问答
  • Java 统计接口消耗时间
    2021-10-22 14:31:36

    最近测试反应接口响应很慢,所以赶紧给接口加个时间日志,看一下接口的响应时间是多少,找一找原因。
    ps : 打印出的时间都是以ms为单位的。
    方法一:

            long beginTime = System.currentTimeMillis();
            System.out.println("======开始时间======="+beginTime);
            long endTime = System.currentTimeMillis();
            System.out.println("==消耗时间=="+(endTime-beginTime)+"ms");
    

    方法二::

            Long beginTime = new Date().getTime();
            System.out.println("======开始时间======="+beginTime);
            Long totalTime=new Date().getTime()-beginTime;
            System.out.println("======消耗时间======="+totalTime+"ms");
    

    ps : 可以在需要的地方多打印写时间日志,看下消耗的时间就能定位到代码的那一块儿,消耗的时间长啦~

    更多相关内容
  • 一、访问量与响应时间统计工具。 1、能让你知道当前服务上的接口单位时间内访问量是多少,总的响应时间是多少 2、通过1里的数据,你能知道哪个接口反应慢,如果服务假死,能根据它来快速判断哪些接口搞死了服务...
  • springboot利用拦截器打印各个接口响应时间,快速统计接口执行速度,方便接口优化。springboot利用拦截器打印各个接口响应时间,快速统计接口执行速度,方便接口优化。springboot利用拦截器打印各个接口响应...
  • 以spring boot为例,注意拦截器是单利 ,因此不要使用成员变量记录时间,而是通过setAttribute,getAttribute来传送时间。 @Configuration public class BootWebAppConfigurer extends WebMvcConfigurerAdapter { @...

    以spring boot为例,注意拦截器是单例 ,因此不要使用成员变量记录时间,而是通过setAttribute,getAttribute来传送时间。

    @Configuration
    public class BootWebAppConfigurer extends WebMvcConfigurerAdapter {
    	@Override
    	public void addInterceptors(InterceptorRegistry registry) {
    		registry.addInterceptor(new BootInterceptor()).addPathPatterns("/**");
    		super.addInterceptors(registry);
    	}
    }

    /***
     * 拦截器,单例
     */
    public class BootInterceptor implements HandlerInterceptor {
    	public final AtomicLong _count = new AtomicLong();// 计数器
    
    	// 1
    	public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) {
    		long begin_nao_time = System.nanoTime();
    		String realIp = HttpHeadTool.getRealIpAddr(req);
    		req.setAttribute("p_real_ip", realIp);
    		req.setAttribute("begin_nao_time", begin_nao_time);
    		return true;
    	}
    
    	/*3*/
    	public void afterCompletion(HttpServletRequest req, HttpServletResponse resp, Object arg2, Exception arg3)
    			throws Exception {
    		long begin_nao_time = (Long) req.getAttribute("begin_nao_time");
    		String real_ip = (String) req.getAttribute("p_real_ip");
    		long interval = System.nanoTime() - begin_nao_time;
    		String uri = req.getRequestURI();
    		StatsManager.inst().statsUri(uri, interval);//统计费时
    	}
    
    	/* 2 */
    	public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2, ModelAndView arg3)throws Exception {}
    }

    这个方法得到的结果与阿里巴巴的druid统计的时间略少10%多一点儿

    统计结果如图:


    今天根据URI费时分析看出访问微信接口获取openid和token,以及头像,昵称这俩接口比较耗时,因此在前端改为获取过信息后放在本地存储,提高了约0.2秒的加载时间

    展开全文
  • 1 viakiba 325 天前 Sleuth + Zipkin 2 ayonel 325 天前 这些是监控系统干的活,国内比较好的是 CAT,但是系统比较庞大。或者 metrics,比较轻量。... java 平台 spri...
      

        1

    viakiba   325 天前

    Sleuth + Zipkin

    ayonel 

        2

    ayonel   325 天前

    这些是监控系统干的活,国内比较好的是 CAT,但是系统比较庞大。或者 metrics,比较轻量。https://github.com/dropwizard/metrics

    msaionyc 

        3

    msaionyc   325 天前

    java 平台 spring aop 做这种事情很容易了吧

    hihipp 

        4

    hihipp   325 天前

    https://skywalking.apache.org/zh/

    lihongjie0209 

        5

    lihongjie0209   325 天前

    自己写一个拦截器不就好了

    w292614191 

        6

    w292614191   325 天前

    druid 可以监控以下内容:
    SQL 监控
    SQL 防火墙
    Web 应用
    URI 监控
    Session 监控
    Spring 监控
    JSON API

      

        7

    xiaoyaojc   325 天前

    如果只是这些需求,自己做个 aop 就得了,打个 log,自己统计下就完事了

    Varobjs 

        8

    Varobjs   325 天前 via Android

    日志做好,分析日志就可以吧

    whp1473 

        9

    whp1473   325 天前

    普罗米修斯

    aitaii 

        10

    aitaii   325 天前 via iPhone

    prometheus

    gz911122 

        11

    gz911122   325 天前

    普罗米修斯 + 1

    seanxx 

        12

    seanxx   325 天前

    aop + metric
    我们项目就在用

      

        13

    quadrapop   325 天前

    一般用日志就能实现,不过有框架的-_-

    yannanfei 

        14

    yannanfei   325 天前

    per4j 可以统计调用量,平均耗时等

      

        15

    Aresxue   325 天前

    简单点就 aop,还想要高性能和扩展性就用 JVMTI, 比如 Instrumentation (编码复杂度要高很多)

    luozic 

        16

    luozic   324 天前

    前面搞个 api gateway 啥都齐了,不要在一个里面搞太多东西。

    phantomzz 

        17

    phantomzz   324 天前 via Android

    Metrics:Prometheus actuator micrometer
    Tracing:jaeger zipkin pinpoint

    conn4575 

        18

    conn4575   324 天前 via Android

    java 的话就用 cat 吧,其他语言用 prometheus

    ohyeahhh 

        19

    ohyeahhh   324 天前

    谢谢各位,我搞了个拦截器,嘿嘿

      

        20

    jiaozongguan   321 天前 via Android

    apache 日志了解下

    展开全文
  • Java记录接口调用记录、请求参数、响应结果、执行时长简介实现思路代码实现 简介 在Web应用当中记录接口调用记录、请求参数、响应结果、执行时长是再常见不过的事情了,记录的方式有很多。最近阅读之前的历史代码...

    Java记录接口调用记录、请求参数、响应结果、执行时长

    简介

    在Web应用当中记录接口调用记录、请求参数、响应结果、执行时长是再常见不过的事情了,记录的方式有很多。最近阅读之前的历史代码发现以前一些接口的统计时长、记录调用记录、请求参数都是合代码逻辑并存,严重影响了代码可读性。而记录接口调用记录、请求参数、响应结果、执行时长这些操作完全可以抽象出来,用AOP横向拦截去处理,实现解耦、提高代码可读可维护性。这篇文章将介绍如何实现。

    实现思路

    思路

    代码实现

    废话不多说,直接上代码。

    定义@AroundLog注解,用于标识需要记录的接口。

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    @Documented
    public @interface AroundLog {
        String flag() default "";
    }
    

    切面实现

    @Aspect
    @Slf4j
    @Component
    public class AroundLogAspect {
    
        @Around("@annotation(aroundLog)")
        public Object aroundLog(ProceedingJoinPoint point, AroundLog aroundLog) {
    
            StringBuilder sb = new StringBuilder();
            StopWatch started = new StopWatch();
    
            try {
                MethodSignature signature = (MethodSignature) point.getSignature();
                Method method = signature.getMethod();
    
                sb.append("\n<===================================START===================================>\n");
                sb.append("call time:>").append(LocalDateTime.now()).append("\n");
                ObjectMapper mapper = new ObjectMapper();
    
                String methodName = method.getName();
                sb.append("method name:> ").append(methodName).append("\n");
    
                sb.append("log flag:> ").append(aroundLog.flag()).append("\n");
    
                Parameter[] parameters = method.getParameters();
                Object[] args = point.getArgs();
                sb.append("request:>\n");
                if (args != null) {
                    for (int i = 0; i < args.length; i++) {
                        String paramName = parameters[i].getName();
                        String argStr= null;
                        try {
                            argStr  = mapper.writeValueAsString(args[i]);
                        } catch (Exception e) {
                            argStr = "无法解析";
                        }
                        sb.append(paramName).append(":").append(argStr).append("\n");
                    }
                }
    
                started.start();
                Object proceed = point.proceed();
    
                sb.append("response:>\n").append(mapper.writeValueAsString(proceed)).append("\n");
    
                return proceed;
            } catch (RuntimeException e) {
                sb.append("RuntimeException:>").append(e.getMessage()).append("\n");
                throw e;
            } catch (Throwable throwable) {
                sb.append("Throwable:>").append(throwable.getMessage()).append("\n");
                throw new RuntimeException("系统异常!");
            }finally {
                started.stop();
                sb.append("call total time(ms) :> ").append(started.getTime()).append("\n");
                sb.append("<====================================END====================================>\n");
                log.info(sb.toString());
            }
        }
    }
    

    调用接口测试,日志输出如下

    <===================================START===================================>
    call time:>2021-08-30T19:34:47.062
    methodName:>pay
    log flag:> 
    request:>
    response:>
    {"status":true,"code":null,"message":"success","errorMsg":null,"data":null}
    call total time(ms) :>21
    <====================================END====================================>
    
    

    这样一来就实现了记录接口调用记录、请求参数、响应结果、执行时长与逻辑解耦。

    展开全文
  • java接口限流及调用统计

    千次阅读 2021-03-29 17:01:10
    项目中有许多接口,现在我们需要实现一个功能对接口调用情况进行统计,主要功能如下: 需求一:实现对每个接口,每天的调用次数做记录; 需求二:如果某次调用抛出了异常信息,则记录下异常信息; 需求三:限流,...
  • 前言:最近线上环境某个接口服务响应时间偏长,导致用户体验超差,那平时该怎么快速的排查这类问题呢? ①、为代码添加上详细的打印日志; 不建议 ,一是线上环境,没法随便的重新部署更换了详细日志的代码,二是 ...
  • 最近换了一家新公司,面试领导告诉我说接口响应很慢,然分配任务给我去优化接口,然后就有了下面的一些遭遇。 在不了解业务的情况下,需要先找测试定位接口,找到接口之后,开始品味代码了。我个人优化的方式是在每...
  • java统计网站访问量

    千次阅读 2021-03-12 19:59:38
    我的理解,人数统计好说,因为,可已设置...我先给出统计人数的代码,我想统计在线人数可以定时调用程序来统计,但是不是实时的,所以最大的障碍就是怎么在关闭浏览器的时候,就关闭sessionimport java.io.FileNotF...
  • SpringBoot(审计) 统计接口调用次数及成功率 介绍:  很多时候会需要提供一些统计记录的,比如某个服务一个月的被调用量、接口的调用次数、成功调用次数等等。 优点:  使用AOP+Hendler对业务逻辑代码无侵入...
  • Spring获取Http响应时间和状态原理

    千次阅读 2017-07-31 11:55:41
    spring-actuate是spring的监控模块,默认开启很监控下,其中就有个http的响应时间和状态。 在maven的pom中引入 <groupId>org.springframework.boot <artifactId>spring-boot-starter-actuator</artifactI
  • Java接口自动化测试框架

    千次阅读 2019-11-21 12:07:20
    3.1.1 放置登录接口的数据配置文件LoginCase.java package com . tester . model ; import lombok . Data ; @Data public class LoginCase { private int id ; private String userName...
  • 统计接口平均耗时

    千次阅读 2020-07-17 11:22:39
    先看下结论,然后再说背景吧~~ 目录 结论 背景 命令分析 ...统计pv : ...cat /home/homework/clog/webservice/access.log | grep '接口' | wc ...统计单个接口平均耗时 cat /home/homework/clog/webserver/access.log
  • 并发数 = QPS*平均响应时间 转:https://blog.csdn.net/luman1991/article/details/70919279 并发数 = QPS*平均响应时间 QPS(TPS):每秒钟request 每秒查询 ... 查看修改Linux时区和时间 查看/修改Linux时区和时间 一...
  • JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个目标文件 摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很...
  • Java程序运行一段时间后越来越慢

    千次阅读 2021-02-12 17:54:45
    我有一个java程序,它是典型的机器学习算法,通过一些方程来更新某些参数的值:for (int iter=0; iter<1000; iter++) {// 1. Create many temporary variables and do some computations// 2. Update the value ...
  • 根据日志文件上统计某个接口一天内调用次数、平均响应时间(前提是在日志文件输出单次访问接口的耗时) 使用awk来完成接口统计: awk -F "#" '{split($4,array,"?");c[array[1]]++;t[array[1]]+=$3;avg...
  • 此服务接口中调用了 其它的服务接口 ,由于内部调用的其它服务接口出现问题等,导致此其它服务接口执行耗时比较长,进而导致服务接口响应时间偏长; 服务接口代码如下: test1、test2方法如下: 第二步 JMeter 模拟...
  • Spring AOP日志记录接口请求参数,执行时间

    万次阅读 热门讨论 2018-07-19 17:53:48
    本文用spring aop方式对请求拦截,获取请求参数以及计算接口执行时间。注意:所需的环境以及依赖有:spring各包, jdk1.8,org.slf4j.Logger (请执行导入) 前言 在前后端分离的项目中,常因为不知道是前端还是...
  • java接口自动化接口测试

    千次阅读 2019-08-27 10:24:09
    这里测试的接口为spring boot开发接口文章中开发好的接口。 测试用例
  • 通过AOP拦截接口请求,计算接口访问时间,并存入数据库从而统计程序所有接口的访问效率,从而达到针对性优化策略,下面我直接通过代码进行讲解。 package com.wk.zh.admin.constants; import ...
  • java控制api请求接口的次数(附代码)

    千次阅读 2019-08-07 11:07:12
    本功能的基本思想就是全局增加一个过滤器filter,,如果在指定设置时间内超过请求次数,就进行拦截。目的是为了防止有人恶意侵占资源,导致正常的请求无法响应。以下只是最简单的实现方式,需要的话可以自行拓展。 1...
  • 最近项目出现了部分接口响应时间过长的情况,作为一名开发(che)多年的老司机,显然是打开浏览器看看是哪个接口作妖,然后顺着网线找到Controller层,找到Service层,找到dao层…一层的一层的看,一圈一圈的调试,...
  • 在学习了plotly的Time Series 时间序列图标之后,绘制了一张接口响应耗时的图标,分享代码,供大家参考。 下面是从数据库读取数据的java代码: 本人在做工作中,要对某一个接口的响应耗时进行一个长期的统计,...
  • java aop做一个接口耗时的计算

    千次阅读 2018-04-27 15:13:00
    看代码: @Aspect @Component public class TimeCostAspect { private static Logger logger = LoggerFactory.getLogger(TimeCostAspect.class);... private static final String POINT = "...
  • 经过一天的开发调试终于搞懂了接口调用耗时并保存到数据库,并且保存到另外一个数据库,相当于双数据源 本功能共两个文件,一个java文件和一个数据库配置文件(HuTool jdbc读取数据库配置,相当轻量级的) 直接上...
  • 1. 响应时间(RT)  响应时间是指系统对请求作出响应的时间。直观上看,这个指标与人对软件性能的主观感受是非常一致的,因为它完整地记录了整个计算机系统处理请求的时间。由于一个系统通常会提供许多功能,而不同...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,146
精华内容 22,458
关键字:

java统计接口响应时间

java 订阅
友情链接: CIMRDC08_001_216217.rar