Python Flask 超时?烧瓶 + NGINX + uWSGI
Python Flask time out? FLASK + NGINX + uWSGI
像往常一样,我有另一个非常奇怪的问题。我有一个可从 anywhere.It 访问的 NGINX 网络服务器,它在 uWSGI 的帮助下为我的 python 文件提供服务。在 python 文件中,我使用 mysql-连接器库从同一台机器上 运行 的 mysql 数据库获取信息。 (机器是raspberry pi运行raspbian)。我有一个索引页面,其中只有 returns 一个字符串和一个与数据库连接的 /resources 页面以及 returns json 中的一些信息。
15 分钟后,一切都坏了。服务器变得无响应并显示 'Bad gateway' 错误或 'a time out occured' 错误。我只重新启动了 uWSGI 以缩小原因范围,这样做使我的应用程序再次联机。这意味着它要么是那个,要么是我的烧瓶服务器。
我使用了以下 link:我使用了以下 link:http://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/
我发现很难找到这方面的信息。
会是什么呢?我该如何解决这个问题?有哪些可能的修复方法?
UWSGI 日志文件
时钟源:unix
检测到 CPU 个核心数:4
当前工作目录:/home/pi
检测到的二进制路径:/usr/local/bin/uwsgi
!!!没有内部路由支持,使用 pcre 支持重建!!!
* 警告:你是 运行 没有主进程管理器的 uWSGI
您的进程数限制为 7336
你的内存页大小是 4096 字节
检测到的最大文件描述符数:65536
锁引擎:pthread 健壮的互斥量
thunder lock:禁用(您可以使用--thunder-lock启用它)
uwsgi 套接字 0 绑定到 UNIX 地址 /var/www/demoapp/demoapp_uwsgi.sock fd 3
Python 版本:2.7.9(默认,2016 年 9 月 17 日,20:55:23)[GCC 4.9.2]
将 Python 主页设置为 /var/www/demoapp/venv
Python 线程支持已禁用。您可以使用 --enable-threads 启用它
Python 主解释器在 0x67b490 初始化
您的服务器套接字侦听积压限制为 100 个连接
你对工人优雅操作的怜悯是 60 秒
为 1 个内核映射 64256 字节 (62 KB)
运行模式:单进程
添加 /var/www/demoapp/ 到 python 路径。
WSGI app 0 (mountpoint='') 在解释器 0x67b490 pid 上 0 秒内准备就绪:32459(默认应用程序)
uWSGI 在多解释器模式下是 运行 *
产生了 uWSGI worker 1(也是唯一的)(pid:32459,核心:1)
这是一个工人阻塞问题。
一名工作人员会阻塞,因为通常情况下,您会有一名工作人员接受请求,一名工作人员执行 I/O 操作,即在您的案例中从数据库中读取。因为你只有一个工人,所以这就成了问题。
请参阅 docs 了解一些提示(您可以在此页面上搜索 processes
)。您可以使用命令行中的 -p num
选项或配置文件中的 processes = num
来增加工作人员的数量(num 是您想要的进程的整数)。
像往常一样,我有另一个非常奇怪的问题。我有一个可从 anywhere.It 访问的 NGINX 网络服务器,它在 uWSGI 的帮助下为我的 python 文件提供服务。在 python 文件中,我使用 mysql-连接器库从同一台机器上 运行 的 mysql 数据库获取信息。 (机器是raspberry pi运行raspbian)。我有一个索引页面,其中只有 returns 一个字符串和一个与数据库连接的 /resources 页面以及 returns json 中的一些信息。
15 分钟后,一切都坏了。服务器变得无响应并显示 'Bad gateway' 错误或 'a time out occured' 错误。我只重新启动了 uWSGI 以缩小原因范围,这样做使我的应用程序再次联机。这意味着它要么是那个,要么是我的烧瓶服务器。
我使用了以下 link:我使用了以下 link:http://vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/
我发现很难找到这方面的信息。 会是什么呢?我该如何解决这个问题?有哪些可能的修复方法?
UWSGI 日志文件
时钟源:unix 检测到 CPU 个核心数:4 当前工作目录:/home/pi 检测到的二进制路径:/usr/local/bin/uwsgi !!!没有内部路由支持,使用 pcre 支持重建!!! * 警告:你是 运行 没有主进程管理器的 uWSGI 您的进程数限制为 7336 你的内存页大小是 4096 字节 检测到的最大文件描述符数:65536 锁引擎:pthread 健壮的互斥量 thunder lock:禁用(您可以使用--thunder-lock启用它) uwsgi 套接字 0 绑定到 UNIX 地址 /var/www/demoapp/demoapp_uwsgi.sock fd 3 Python 版本:2.7.9(默认,2016 年 9 月 17 日,20:55:23)[GCC 4.9.2] 将 Python 主页设置为 /var/www/demoapp/venv Python 线程支持已禁用。您可以使用 --enable-threads 启用它 Python 主解释器在 0x67b490 初始化 您的服务器套接字侦听积压限制为 100 个连接 你对工人优雅操作的怜悯是 60 秒 为 1 个内核映射 64256 字节 (62 KB) 运行模式:单进程 添加 /var/www/demoapp/ 到 python 路径。 WSGI app 0 (mountpoint='') 在解释器 0x67b490 pid 上 0 秒内准备就绪:32459(默认应用程序) uWSGI 在多解释器模式下是 运行 * 产生了 uWSGI worker 1(也是唯一的)(pid:32459,核心:1)
这是一个工人阻塞问题。
一名工作人员会阻塞,因为通常情况下,您会有一名工作人员接受请求,一名工作人员执行 I/O 操作,即在您的案例中从数据库中读取。因为你只有一个工人,所以这就成了问题。
请参阅 docs 了解一些提示(您可以在此页面上搜索 processes
)。您可以使用命令行中的 -p num
选项或配置文件中的 processes = num
来增加工作人员的数量(num 是您想要的进程的整数)。