泄漏的信号量正在破坏uWSGI的性能,如何确保对其进行跟踪和正确处理?

时间:2019-02-11 17:13:08

标签: nginx flask uwsgi

我正在运行Flask + uWSGI + NGINX服务器。当服务器第一次运行时,它很敏捷,并在大约3秒钟内返回了一组相当健壮的脚本的响应。但是,如果我让应用程序运行,它将变得越来越慢。重新启动应用程序时,此问题已修复,但我希望使用的解决方案不太粗。

在尝试诊断问题时,我意识到,如果让应用程序长时间运行,则调用将占用100%的可用CPU。然后,我开始阅读日志并发现此警告

 unable to load configuration from from multiprocessing.semaphore_tracker import main;main(36)

我现在正在考虑存在某种信号量泄漏,那里的工作人员正在催生子进程,而不是对其进行跟踪,并最终吞噬了服务器上的所有可用资源。

不幸的是,我不知道如何解决它。我不知道应用程序的哪个部分无法导入semaphore_tracker,并且由于多处理是基准Python 3的一部分,所以我不确定如何对其进行故障排除。

在此期间,我添加了harakiri和max_requests配置选项,以尝试“消除”内存泄漏,但是我不知道这是否有助于解决我认为是潜在的问题(未跟踪的信号量)

下面是我的uWSGI配置文件:

module = wsgi:app

master = true
processes = 16

socket = api.sock
chmod-socket = 660
vacuum = true

harakiri = 30
die-on-term = true
max-requests = 3

这是我使用的系统代码。

[Start]
After=network.target

[Service]
User=ubuntu
Group=www-data
Environment=/home/ubuntu/api/env/bin
WorkingDirectory=/home/ubuntu/api
ExecStart=/home/ubuntu/api/env/bin/uwsgi --ini api.ini --master --enable-threads

[Install]
WantedBy=multi-user.target

我觉得我必须从根本上误解配置/部署过程的某个阶段-但是由于其他所有事情似乎都起作用,所以我不确定在哪里。如果有人遇到类似问题或对如何最好地解决这种泄漏提出建议,我将非常感谢,谢谢!

0 个答案:

没有答案