环境
项目使用的是django+gunicorn+supervisor+nginx,具体可以查看这篇文章
问题
经测试发现有时页面会出现502错误,随后计时统计发现当响应时间超过30秒时则会出现502错误,如下:
502错误
猜测
因为使用了nginx,一开始以为是它出现了问题,后来发现nginx的默认配置超时时间都是超过30s的,而且修改了也不起作用。后来就猜测应该是gunicorn出了问题,在google上找了gunicorn的官网:http://docs.gunicorn.org/en/19.3/settings.html ,找到settings中timeout的默认时间真的是30s:
--timeout INT
官网是这么写的,后面的INT为需要你手工修改的实际值。于是按照着官方修改了,因为使用的是supervisor控制shell脚本启动gunicorn,所以我只要修改shell脚本就好,具体的脚本可以看以往的文章。
但是!
修改好后,使用supervisor重启项目,发现项目都跑不起来了!,这是为什么呢?明明是按照官网的来修改的呀!
真相
仔细观察发现,原来使用supervisor控制shell脚本启动,每行配置 后面都需要跟一个反斜杠"",具体在远程连接会显示成如下,类似于w的字符:
shell脚本
结果
重启后发现,当任何任务超过30s时,项目不会报502错误了!!!
网友评论