当前位置:首页 > Java

java接口如何看超时

2026-03-18 22:02:41Java

监控接口超时的常用方法

使用Spring Boot的Actuator和Micrometer 在Spring Boot应用中,可以通过Actuator暴露的/actuator/metrics/http.server.requests端点获取请求耗时统计。配置Micrometer对接Prometheus或Grafana可实现可视化监控。

代码示例配置

# application.yml
management:
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    distribution:
      percentiles:
        http.server.requests: 0.5,0.9,0.99

手动埋点计时

AOP切面实现 通过Spring AOP在接口方法前后记录时间差:

@Aspect
@Component
public class TimeoutAspect {
    @Around("@annotation(org.springframework.web.bind.annotation.GetMapping)")
    public Object logTimeout(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long duration = System.currentTimeMillis() - start;
        if (duration > 1000) { // 自定义阈值
            log.warn("Slow API: {} took {}ms", joinPoint.getSignature(), duration);
        }
        return result;
    }
}

HTTP客户端超时配置

RestTemplate设置

@Bean
public RestTemplate restTemplate() {
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setConnectTimeout(3000);  // 连接超时
    factory.setReadTimeout(5000);     // 读取超时
    return new RestTemplate(factory);
}

Feign客户端配置

feign:
  client:
    config:
      default:
        connectTimeout: 2000
        readTimeout: 4000

日志分析方案

在logback-spring.xml中配置MDC记录耗时:

<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %X{requestTime}ms %msg%n</pattern>

配合过滤器记录时间:

public class TimeLogFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        long start = System.currentTimeMillis();
        chain.doFilter(request, response);
        MDC.put("requestTime", String.valueOf(System.currentTimeMillis() - start));
    }
}

分布式链路追踪

集成SkyWalking或Zipkin等工具,在application.yml中添加:

spring:
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1.0

JVM线程分析

通过jstack检测阻塞线程:

jstack -l <pid> > thread_dump.txt

查找处于TIMED_WAITING状态的线程及堆栈信息,定位耗时操作。

数据库查询监控

启用HikariCP的慢查询日志:

spring.datasource.hikari.leak-detection-threshold=3000
logging.level.net.ttddyy.dsproxy.listener=DEBUG

MyBatis Plus配置SQL执行时间阈值:

java接口如何看超时

@Bean
public PerformanceInterceptor performanceInterceptor() {
    PerformanceInterceptor interceptor = new PerformanceInterceptor();
    interceptor.setMaxTime(1000); // 毫秒
    interceptor.setFormat(true);
    return interceptor;
}

标签: 如何看接口
分享给朋友:

相关文章

vue实现接口分页

vue实现接口分页

Vue 实现接口分页的方法 在 Vue 中实现接口分页通常需要结合后端 API 和前端分页组件。以下是常见的实现方式: 使用 Element UI 的分页组件 安装 Element UI 后,可以使…

vue接口实现导出

vue接口实现导出

Vue 接口实现导出功能 在 Vue 项目中实现导出功能通常涉及前端调用后端接口获取数据,并以文件形式下载。以下是几种常见的实现方式: 通过 Blob 对象下载文件 当后端返回文件流时,前端可通过…

如何看react源码

如何看react源码

阅读React源码的方法 克隆React仓库 从GitHub克隆React的官方仓库,切换到稳定版本分支。React采用Monorepo结构,核心代码在packages/react和packages/…

react如何访问本地接口

react如何访问本地接口

访问本地接口的方法 在React中访问本地接口通常涉及开发环境配置和跨域问题处理。本地接口可能运行在本地开发服务器(如localhost:3000)或其他端口(如后端服务的localhost:8080…

react如何预加载接口数据

react如何预加载接口数据

预加载接口数据的常见方法 在React中预加载接口数据可以通过多种方式实现,核心目标是提前获取数据并存储,避免组件渲染时的延迟。以下是几种常用方案: 使用useEffect与状态管理 在父组件或高阶…

拿到一个react项目如何看

拿到一个react项目如何看

理解项目结构 检查项目根目录下的文件和文件夹,重点关注src目录,通常包含核心代码。查看package.json了解项目依赖和脚本命令。注意配置文件如webpack.config.js或vite.co…