You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归调用Flask API时IIS服务器偶发卡顿问题排查

问题:递归Ajax调用Flask API启动一分钟后出现卡顿

我用递归函数通过Ajax调用Flask API,多数时候运行正常,但启动约一分钟后会出现卡顿。大部分API请求耗时仅60-70毫秒,但偶尔会有请求耗时长达10.24秒,直接导致相机应用卡顿。

我一开始以为是代码问题,但在代码内部做了计时测试后,发现所有API的处理耗时稳定在60-70毫秒,所以推测卡顿出现在IIS服务器把请求转发到Flask API之前。

IIS服务器配置

配置文件路径:C:\Windows\System32\inetsrv\config\applicationHost.config

</fastCgi>
...

<application fullPath="D:\aiml_python_code\yolov7-main\venv37\Scripts\python.exe" arguments="D:\aiml_python_code\yolov7-main\venv37\Lib\site-packages\wfastcgi.py" monitorChangesTo="" stderrMode="ReturnStdErrIn500" maxInstances="400" idleTimeout="2592000" activityTimeout="3000" requestTimeout="900000" instanceMaxRequests="200000" signalBeforeTerminateSeconds="0" protocol="NamedPipe" queueLength="100000" flushNamedPipe="false" rapidFailsPerMinute="1000" />
 </fastCgi>

JavaScript递归函数代码

function api_Call() {

    cameraSensor.width = cameraView.videoWidth;
    cameraSensor.height = cameraView.videoHeight;
    cameraSensor.getContext("2d").drawImage(cameraView, 0, 0);

    let c = document.getElementById("cam_frame");
    c.width = cameraView.videoWidth;
    c.height = cameraView.videoHeight;

    $.ajax({
        type: "POST",
        headers: { 'Content-Type': 'application/json' },
        dataType: "json",
        <!-- timeout: 1000, -->
        data: JSON.stringify({'image':cameraSensor.toDataURL("image/webp")}),
        url: "/flaskapi3/imagepred",
        success: function (response) {
            data = response['data'];
            c.src = "data:image/png;base64, "+data;
            api_Call();
      },
        error: function (err) {
            setTimeout(function () {
                api_Call();
            }, 1000);
        }
    });

    };

排查与解决建议

1. 调整IIS FastCGI配置参数

  • 把activityTimeout="3000"(3秒)改为10000(10秒):当前值过短,可能导致正常处理的请求被强制终止,引发后续队列阻塞
  • 降低idleTimeout="2592000"(30天)为300(5分钟):避免闲置过久的Python实例占用资源却无法高效响应新请求
  • 启用IIS的FastCGI监视功能,实时查看实例数量、队列长度变化,确认是否有请求堆积

2. 优化JS请求逻辑

  • 在成功回调中添加固定间隔,比如setTimeout(api_Call, 30):避免无间隔发送请求,短时间内压垮IIS队列
  • 取消注释并设置timeout: 5000:防止长时间挂起的请求阻塞后续调用
  • 修复未声明的全局变量:将data = response['data']改为let data = response['data'],避免内存泄漏

3. 验证IIS与Flask的通信效率

  • 尝试将FastCGI协议从NamedPipe改为TCP:NamedPipe在高并发场景下容易出现管道阻塞问题,TCP可能更稳定
  • 用工具抓取IIS和Flask之间的通信包,确认转发环节是否存在延迟

4. 检查系统资源状态

  • 监控Python进程(Flask实例)的CPU、内存占用:排查是否有内存泄漏导致的性能下降
  • 查看IIS工作进程的资源使用情况:确认是否存在CPU过载或内存不足的情况

内容的提问来源于stack exchange,提问作者Mogli141

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:40:38