0

目前使用 django + uwsgi + nginx 设置来为 web 应用程序提供服务。如果由于 django 中糟糕的 python 代码而死,我目前在重生进程时遇到问题。

由于我是一个糟糕的程序员,这种情况经常发生。我认为 uwsgi 只会重生一个死进程。

我的配置文件如下:对于我的 UWSGI 文件:

[uwsgi]
# variables
projectname = testapp
base = /home/ubuntu/testapp
# config
protocol = uwsgi
pythonpath = %(base)/src/%(projectname)
module = %(projectname).wsgi
socket = /tmp/%(projectname).sock
logto = %(base)/logs/uwsgi.log 

chmod-socket = 777
processes = 2
master = 1
harakiri-verbose = true

和我的 nginx 文件:

server {
  listen 80;
  server_name mytestserver;
  location / {
    include uwsgi_params;
    uwsgi_read_timeout 300;
    uwsgi_pass unix:///tmp/testapp.sock;  

  }
  access_log /home/ubuntu/testapp/logs/access.log;
  error_log /home/ubuntu/testapp/logs/error.log;
}

我为 nginx 和 uwsgi 创建了 init.d 文件。我用皇帝模式管理我的 uwsgi。将它指向我保存 uwsgi.ini 文件的文件夹(其符号链接到 /etc/uwsgi/vassals)

我的 UWSGI 日志如下: 请注意 PID 编号:我从 12363 和 12365 开始,进程,得到我在 django 代码中执行的打印消息Why die here now,然后我只剩下进程 12363,然后它就死了。我的网络应用程序拒绝加载任何东西(这部分是有道理的)

[pid: 12365|app: 0|req: 85/174] 123.123.123.123 () {32 vars in 414 bytes} [Thu Oct 10 02:31:58 2013] POST /test1=> generated 9 bytes in 4 msecs (HTTP/1.1 200) 1 headers in 59 bytes (1 switches on core 0)

[pid: 12365|app: 0|req: 86/175] 123.123.123.123 () {32 vars in 414 bytes} [Thu Oct 10 02:31:58 2013] POST /test1 => generated 9 bytes in 3 msecs (HTTP/1.1 200) 1 headers in 59 bytes (1 switches on core 0)

[pid: 12363|app: 0|req: 87/176] 123.123.123.123 () {32 vars in 414 bytes} [Thu Oct 10 02:31:59 2013] POST /test1 => generated 9 bytes in 4 msecs (HTTP/1.1 200) 1 headers in 59 bytes (1 switches on core 0)
why break here now?

[pid: 12363|app: 0|req: 88/177] 123.123.123.123 () {32 vars in 414 bytes} [Thu Oct 10 02:32:02 2013] POST /test1 => generated 9 bytes in 5 msecs (HTTP/1.1 200) 1 headers in 59 bytes (1 switches on core 0)

[pid: 12363|app: 0|req: 89/178] 123.123.123.123 () {32 vars in 414 bytes} [Thu Oct 10 02:32:02 2013] POST /test1 => generated 9 bytes in 7 msecs (HTTP/1.1 200) 1 headers in 59 bytes (1 switches on core 0)

我虽然 uwsgi 皇帝会重生附庸,但附庸没有死?我可以重新启动一切,一切正常一点……然后死掉。

4

1 回答 1

1

如果一个进程死亡,您应该在日志中看到有关它死亡的消息。您确定您的流程不只是卡住了吗?您已启用 harakiri verbose,但未启用 harakiri,因此不会监控卡住的请求。

于 2013-10-10T03:13:09.410 回答