使用“FileSystemCache”的 Flask 到达第一个字节 (TTFB) 的时间较慢

问题描述 投票:0回答:1

更改我的 Linux 服务器后,我在 Flask 中的 Web 应用程序面临缓慢的 第一个字节时间 (TTFB)。该问题仅在第一次访问或缓存过期(5 分钟)后才会出现。有时 TTFB 达到 16 秒。

我通过以下方式确认了问题:

  1. Gunicorn 日志(在调试模式下运行,并指定所有日志)
  2. Nginx 日志(使用自定义日志记录
    upstream_response_time
    request_time
  3. 在开发模式下运行Flask

我验证了该问题在运行的同一服务器上不存在(TTFB,某些ms),例如:

  1. Python 单行 Web 服务器
  2. 'Hello world'
    Flask 应用程序

当服务器收到请求时,查看 htop,我发现有时 gunicorn 工作人员进入

Uninterruptible Sleep (D) State
然后又回来。

综合起来,我怀疑这与 Flask-Caching 包有关,特别是 FileSystemCache 选项。自从尝试“SimpleCache”缓存选项后,问题就消失了(但缓存实际上不适用于Gunicorn多个工作人员)

现在我的 app.config 如下所示(在其他 ubuntu 服务器上完美运行):

app.config['CACHE_DIR'] = 'cache' 
app.config['CACHE_TYPE'] = 'FileSystemCache' 
app.config['CACHE_THRESHOLD'] = 10000
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 300

我希望有人能指出我在这里缺少的东西。

python nginx flask gunicorn flask-caching
1个回答
0
投票

这是一个权限问题。该文件夹不知何故对我的用户有错误的权限,我解决了将缓存目录更改为

tmp
的问题,我的配置变成了:

app.config['CACHE_DIR'] = '/tmp/my_site_cache/' 
app.config['CACHE_TYPE'] = 'FileSystemCache' 
app.config['CACHE_THRESHOLD'] = 10000
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 300

不再需要 10 秒左右的第一个字节时间 (TTFB)。

© www.soinside.com 2019 - 2024. All rights reserved.