NutzCN Logo
问答 Nutz 接口 响应时间长,导致前端界面卡慢的问题 排查。
发布于 1820天前 作者 hui453694187 1775 次浏览 复制 上一个帖子 下一个帖子
标签:

线上服务运行,接口响应慢。
增加了入口方法的耗时 日志。发现很多接口响应超过20秒
下面是对应 的 入口方法 updateTerminalDeviceStatus , 看日志, deveiceCode 为 null 应该直接 返回了,为什么还会 耗时 20 秒 ?? Nutz 里面 过滤器有做些什么操作吗?

2019-11-13 12:31:10,491 [http-bio-8001-exec-4160] INFO  com.common.module.PCModule - 回调updateTerminalDeviceStatus事件,参数为:deviceCode:{null},status:{0},detail{null}
2019-11-13 12:31:10,491 [http-bio-8001-exec-4160] DEBUG com.LogTimeProcessor - [POST]URI=/pc/updateTerminalDeviceStatus 20015ms

    @At
    @Ok("json")
    public Map<String, Object> updateTerminalDeviceStatus(@Param("deviceCode") String deviceCode,
                                                          @Param("status") int status, @Param("detail") String detail) {
        Map<String, Object> result = new HashMap<String, Object>();

        log.info("回调updateTerminalDeviceStatus事件,参数为:deviceCode:{" + deviceCode + "},status:{"
                + status + "},detail{" + detail + "}");
	// deveiceCode 为null 直接 return 。
        if (deviceCode == null || deviceCode.trim().equals("")) {
            result.put(IConstants.RESULT_CODE_KEY, IConstants.RESULT_CODE_FAILURE);
            result.put(IConstants.RESULT_MESSAGE_KEY, "获取IP失败");
            return result;
        }

	......
        
        return result;
    }

类似的情况我发现挺多的, 接口里面的逻辑执行时间不长,但是 整个 接口, 响应时间却 很长....

14:30:16,345 528] [POST]URI=/pc/booking/getDeptRegInfo 20127ms
14:30:23,108 552][POST]URI=/pc/updateTerminalDeviceStatus 20007ms
14:30:24,294 570][POST]URI=/pc/updateTerminalDeviceStatus 20008ms
14:30:26,353 563][POST]URI=/pc/freshTime 20007ms
14:30:23,108 552][POST]URI=/pc/updateTerminalDeviceStatus 20007ms
14:30:24,294 570][POST]URI=/pc/updateTerminalDeviceStatus 20008ms
14:30:31,408 451][POST]URI=/pc/updateTerminalDeviceStatus 20008ms
14:30:28,334 339][POST]URI=/pc/freshTime 20007ms
14:30:28,787 547][POST]URI=/pc/freshTime 20008ms
14:30:29,068 499][POST]URI=/pc/freshTime 20008ms
14:31:06,788 565][POST]URI=/pc/updateTerminalDeviceStatus 20014ms
14:31:08,083 392][POST]URI=/pc/freshTime 20015ms
14:31:12,280 557][POST]URI=/pc/patient/hisLogin 20062ms
14:31:12,514 559][POST]URI=/pc/freshTime 20015ms
14:31:12,514 559][POST]URI=/pc/freshTime 20015ms
14:31:13,091 548][POST]URI=/pc/freshTime 16ms  // 有快有慢, 这次请求响应就很快
14:31:13,418 563][POST]URI=/pc/freshTime 20014ms //然后这个又很慢,
14:31:13,481 468][POST]URI=/pc/freshTime 16ms
14:31:13,574 451][POST]URI=/pc/freshTime 20014ms
14:31:46,366 543][POST]URI=/pc/freshTime 20015ms

freshTime 接口 其实只是 update 了 一张表的 时间字段而已 。
这个表的数据总量也就 100 条记录不到,但是偶尔会出现耗时 20秒的情况。

下面这个 接口, 基本没有什么耗时的操作, 也要20 秒才返回 ......

2019-11-13 12:31:08,244 [http-bio-8001-exec-4284] DEBUG com.LogTimeProcessor - [POST]URI=/pc/mzfee/saveRecordInSession 20015ms

    @At
    @Ok("json")
    public Map<String, Object> saveRecordInSession(
            @Param("..") Record record,
            @Param("canUseInsurance") String canUseInsurance,
            HttpSession session) {
        Map<String, Object> response = new HashMap<>();
        
        record.setIsInsurance(canUseInsurance);
        session.setAttribute(MainModule.CURRENT_RECORD, record);
        response.put(IConstants.RESULT_CODE_KEY, IConstants.RESULT_CODE_SUCCESS);
        response.put(IConstants.RESULT_MESSAGE_KEY, "保存成功");
        return response;
}
1 回复

通常是数据库/数据库链接卡住了

用jstack看堆栈,看看线程在wait什么内容

添加回复
请先登陆
回到顶部