我为什么看不到mod_wsgi的进程
我有一个wsgi应用程序,配置如下:
WSGIApplicationGroup %{GLOBAL}
WSGIDaemonProcess myapp user=myuser threads=10 maximum-requests=10000
WSGIScriptAlias / /usr/local/myapp/wsgi.py
WSGIProcessGroup myapp
我本来期待能看到我的应用程序正在运行的进程……但是用ps aux
或者pstree
命令时,我却没有看到任何子进程:
init─┬─apache2─┬─apache2
│ ├─2*[apache2───26*[{apache2}]]
│ ├─apache2───14*[{apache2}]
│ ├─apache2───12*[{apache2}]
│ └─apache2───16*[{apache2}]
我的wsgi是在守护进程模式下运行吗?我该如何检查我的python进程的健康状况?
我正在尝试调试我的wsgi python应用程序,当同时请求很多连接时(比如:从同一个网页发起30个连续的ajax请求),它有时会卡住(有时还会出现内存错误)。
1 个回答
2
为了更全面地解释,我来补充一下Mikko Ohtamaa的评论。
mod_wsgi进程的名称确实是根据它的父进程来命名的,比如说会显示类似于/usr/sbin/apache2 -k start
这样的内容,这个名字会根据不同的操作系统有所不同。
使用display-name
选项可以让我们设置一个不同的进程名称:
这个选项定义了在使用
ps
命令查看进程时显示的不同名称。如果设置的值是%{GROUP}
,那么显示的名称会是(wsgi:group)
,其中"group"会被替换为守护进程组的名称。需要注意的是,显示的字符数不能超过执行进程最开始占用的字符数。如果超过了这个限制,多出来的部分会被截断。
这个功能在所有平台上可能并不都能按预期工作。通常,它还需要一个有BSD背景的ps程序。因此,在某些版本的Solaris UNIX上,
/usr/bin/ps
程序可能无法使用,但/usr/ucb/ps
可以。其他可以显示这个值的程序包括htop
。
参考链接。
示例:
WSGIDaemonProcess myapp user=myuser threads=10 maximum-requests=10000 display-name=django-myapp
WSGIScriptAlias / /usr/local/myapp/wsgi.py
WSGIProcessGroup myapp
然后:
ps aux | grep django-myapp