接口响应慢怎么查
你有没有遇到过这种情况:点个按钮,页面转圈老半天才出结果,或者App卡在那儿不动?很多时候,问题就出在接口响应太慢。别急着骂前端或网络,先一步步排查清楚。
先看是不是网络问题
打开浏览器的开发者工具(F12),切换到 Network 标签页,刷新页面,找那个耗时长的请求。看它的 Timing 信息,如果 Waiting (TTFB) 时间特别长,说明服务器回得慢;如果是 Stalled 或 Download 耗时高,可能是网络拥堵或带宽不够。
可以试着用 curl 测试一下接口响应时间:
curl -o /dev/null -s -w '总时间: %{time_total}s\n连接时间: %{time_connect}s\n开始传输: %{time_starttransfer}s\n' https://api.example.com/data如果 starttransfer 时间超过1秒,那基本就是服务端处理慢了。
检查服务器性能
登录服务器,用 top 或 htop 看 CPU 和内存使用情况。如果 CPU 长期跑满,可能是代码逻辑太重,比如循环查数据库没加索引。用 df -h 看磁盘空间,万一根分区满了,日志写不进,服务也会抽风。
数据库也得盯紧。执行一条简单查询试试:
mysql -u root -p -e "SELECT NOW(), SLEEP(2), NOW()";如果连数据库都响应迟钝,八成是慢查询堆积了。可以用 show processlist 看当前有哪些SQL在跑,有没有卡住的。
查看应用日志
Java 项目看 catalina.out 或 logback 输出,Python 的 Flask 或 Django 一般有 access.log 和 error.log。重点找超时记录、异常堆栈,比如某个 SQL 执行了5秒还没完,那就是瓶颈点。
有时候是第三方接口拖后腿。比如你调支付网关,它那边慢,你这边也只能干等。这种可以在日志里加个耗时打点:
start = time.time()\nrequests.get('https://third-party-api.com')\nduration = time.time() - start\nprint(f'调用第三方耗时: {duration:.2f}s')用工具抓包分析
本地开发时可以用 Postman 测接口,设个超时时间,比如3秒,看看是否经常超。线上环境建议上 APM 工具,像 SkyWalking、Pinpoint 这类,能直接看到每个接口的调用链,哪一步耗时一目了然。
如果是内网服务之间调用慢,可能是 DNS 解析问题。试试把常用服务IP写进 /etc/hosts,绕过域名查找,有时能立竿见影。
别忽视代码本身
有个同事之前写了个接口,每次请求都要读一个50MB的配置文件到内存,结果每来一个用户就卡一下。后来改成只加载一次,响应速度从800ms降到20ms。所以代码里有没有重复初始化、大文件读取、同步阻塞操作,都得仔细过一遍。
还有种常见情况是连接池不够用。比如数据库连接池最大10个,但并发请求20个,后面的就得排队等连接释放。查下配置文件里的 max_connections、pool_size 这些参数,该扩就扩。