Django 如何调试gunicorn[6383][临界]工作线程超时?

Django 如何调试gunicorn[6383][临界]工作线程超时?,django,gunicorn,Django,Gunicorn,在繁忙的Django 1.8站点中,由于gunicorn worker超时,我收到了502个错误: [2019-06-11 04:56:29 +0000] [6383] [CRITICAL] WORKER TIMEOUT (pid:6550) [2019-06-11 04:56:31 +0000] [6383] [CRITICAL] WORKER TIMEOUT (pid:6439) [2019-06-11 04:56:31 +0000] [6383] [CRITICAL] WORKER TIM

在繁忙的Django 1.8站点中,由于gunicorn worker超时,我收到了502个错误:

[2019-06-11 04:56:29 +0000] [6383] [CRITICAL] WORKER TIMEOUT (pid:6550)
[2019-06-11 04:56:31 +0000] [6383] [CRITICAL] WORKER TIMEOUT (pid:6439)
[2019-06-11 04:56:31 +0000] [6383] [CRITICAL] WORKER TIMEOUT (pid:7210)
[2019-06-11 04:56:33 +0000] [6383] [CRITICAL] WORKER TIMEOUT (pid:6429)
[2019-06-11 04:56:46 +0000] [6383] [CRITICAL] WORKER TIMEOUT (pid:6562)
[2019-06-11 04:59:41 +0000] [6383] [CRITICAL] WORKER TIMEOUT (pid:6560)
gunicorn.版本19.9.0

这是我的guniconrn.sh配置

#!/bin/bash

NAME="myapp"                                  
SOCKFILE=/tmp/gunicorn.sock   
USER=myuser                                       
GROUP=www-data                                   
NUM_WORKERS=48                                    
DJANGO_SETTINGS_MODULE=myapp.settings             
DJANGO_WSGI_MODULE=myapp.wsgi                     
MAX_REQ=20000
REQ_TIMEOUT=10
LOG_FILE=/var/log/gunicorn/error.log

echo "Starting $NAME as `whoami`"


cd $DJANGODIR
source /home/myuser/.myappenv/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR


exec /home/myuser/.myappenv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name $NAME \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=error \
  --log-file $LOG_FILE \
   --max-requests=$MAX_REQ \
  --timeout=$REQ_TIMEOUT 
  --worker-class="egg:meinheld
#  --worker-class=eventlet
   --threads=2000`
该服务器有128GB的RAM和一个24核CPU

该错误通常发生在负载为+20时


我对
NUM\u WORKERS
REQ\u TIMEOUT
worker class
threads
中的许多参数进行了调整。但似乎都没有多大效果。所以我已经没有主意了,非常感谢你的提示。

我的问题不是gunicorn,而是redis,它被大量用于缓存数据

由于缓存增长了数百MB,并且
appendfsync everysec
处于活动状态,写入磁盘的时间超过了1秒,因此阻止了gunicorn进程。
因此,在对其进行注释并使用
appendfsync no
保存策略后,问题就消失了

如果适用,您可能需要检查应用程序是否可以连接到其数据库。对我来说,我在云中运行Django REST API,必须检查数据库服务器上的安全组以允许连接,但Django+Gunicorn部署实际上没有问题。

您的应用程序可能没有及时响应请求。你看过你的django日志了吗?@Stargazer哪个django日志?你的应用程序日志。您将请求时间定义为10秒,这取决于您的视图。之前我尝试过
REQ\u TIMEOUT=120
,但仍然有大量超时。这就是为什么您需要检查您的视图,为什么请求需要花费如此长的时间才能完成。这并不是gunicorn的错我刚刚发现我的错是由伐木引起的。总是值得一看。