我为什么看不到mod_wsgi的进程

2 投票
1 回答
2390 浏览
提问于 2025-04-18 12:54

我有一个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

撰写回答