Uwsgi在与nginx通信时被阻止

时间:2013-01-29 04:28:43

标签: tcp nginx uwsgi

大家,最近几天我遇到了一个让我疯狂的奇怪问题。

我正在使用nginx + uwsgi + django在生产中部署一个网站。该网站每天有大约3亿个请求,最大并发度是每秒4000个,我有4个nginx在前面,6个uwsgi在后端,nignx communicat with uwsgi通过tcp。

它在几个月内表现良好。但有一天uwsgi突然不起作用。它会抛出以下信息:

HARAKIRI:--- uWSGI工作人员72(pid:23094)WAS管理请求/2/article/v2/stream/?detail=1&image=1&count=20&max_behot_time=1358697136&latitude=39.914651254102&经度= 116.45855261839& city =& device_platform = android& channel = hiapk& version_code = 220& app_name = news_article& openudid = 474604a56e33a44f& uuid = 353769056450763& os_api = 16& device_type = GT-N7100& os_version = 4.1.1 since Mon 1月21日23:07:51 --- ---

从上面的消息看来,由于django应用程序中有一个很长的请求,uwsgi似乎自杀了。但我检查我的应用程序查看时间和调试, 我确信我的应用程序非常快(约100毫秒处理请求)。

令我惊讶的是,我发现nginx会向uwsgi投入大量的连接时间,因为uwsgi会反复查杀并且队列已满。

所以我对uwsgi进程进行了分析,我发现uwsgi在写入系统调用时被阻止,直到它杀死了itseslf:

writev(8,[{“HTTP / 1.1”,8},{“”,1},{“200 OK”,6},{“\ r \ n”,2},{“Vary”, 4},{“:”,2},{“Cookie”,6},{“\ r \ n”,2},{“Content-Type”,12},{“:”,2},{“ text / html; charset = utf-8“,24},{”\ r \ n“,2},{”\ r \ n“,2}],13)= 73

写(8,“{\”has_more \“:true,\”message \“:\”s“......,24005

根据我的理解,uwsgi在tcp中使用非阻塞模式,它永远不会被阻止。我谷歌很长一段时间,有很多尝试,但它没有帮助。

最后,我改变了我的部署模式,我在前面使用4个nginx listen 80端口并使用http_proxy到6个nginx端口81,nginx 81端口用uwsgi与unix文件sock进行通信。在此尝试之后,uwsgi从不阻止,一切都好。

谁能告诉我为什么uwsgi在写入系统调用时被阻止了我认为应该永远不会发生?或者在什么情况下,当通过tcp与nginx进行通信时,uwsgi将被阻止?

非常感谢

0 个答案:

没有答案