【发布时间】:2021-06-02 09:16:47
【问题描述】:
我有一个在 VirtualBox 中运行的 Ubuntu 虚拟机,它使用 Apache 托管服务器。服务器的概念是接受 HTTP POST 请求,将它们存储在 MySQL 数据库中,然后执行 Python 脚本,将相关的 POST 数据显示在 Discord 频道中。
进程本身正在运行,但每次 PHP 脚本调用 Python 脚本时,都会创建一个从未真正结束的新进程。在接收实时数据几个小时后,由于延迟进程的数量,服务器耗尽了可用内存。 PHP 脚本的最后一行代码有以下 exec 调用;
exec("python3 main.py $DATA");
我想想出一种方法来实际杀死从这个 exec 命令创建的进程(使用用户 www-data),或者在脚本执行后的 Python 文件中,或者使用我可能只是的 Apache 设置自动杀死不知道。
在终端中运行以下命令时,我可以看到不同的进程;
ps -o pid,user,%mem,command ax | sort -b -k3 -r
显示了 3 个单独的进程,其中 1 个引用了 PHP 中标记的实际 python3 exec 命令;
9903 www-data 0.4 python3 main.py DATADATADATADATADATADATA
然后另一个进程显示更常见的 -k start 命令;
9907 www-data 0.1 /usr/sbin/apache2 -k start
最后还有一个与 PHP exec 命令非常相似的进程;
9902 www-data 0.0 sh -c python3 main.py DATADATADATADATADATADATA
我如何确保 Apache 清理这些进程 - 或者我需要在我的 Python 或 PHP 代码中添加什么以适当地执行 Python 脚本而不留下进程?
【问题讨论】:
标签: php apache ubuntu memory process