我之前问过这个问题堆栈溢出,但这似乎是提出这个问题的更好的地方。
我有一个使用 PHPhttpd
运行的进程(仅此而已apache2
)。在index.php
我的文件中,有以下代码:
echo shell_exec("sudo -u apache python3 /root/folder/script.py 2>&1");
它应该执行一个程序(它做得很好)。该程序需要大约 40 秒才能返回一些内容,所以需要一点时间。我创建了另一个多线程的 Python 程序。它同时向 URL 发出 400 次请求,这应该会启动 400 个进程。
当我运行命令时top -c
,我发现 CPU 仅为 9%,而实际上应该更高。我尝试了下一个命令ps xa | grep apache | wc -l
。它返回 101 个进程,我多次执行该命令,它始终为 101。
在执行命令之前ps xa | grep apache | wc -l
,我首先犯了一个错误并尝试ps xa | grep apache2 | wc -l
,我没有运行 apache2,但它仍然给了我数字 1。所以我的理论是 101 - 1 = 100。这是一个太漂亮的数字了。
因此这应该是某种类型的最大值/限制/上限。我可以在哪里配置它?
谢谢你的时间
===== 编辑 =====
我认为它正在对请求进行排队,而当我登录服务器并手动运行 python 脚本时,该脚本正常工作,没有任何减速等。
===== 编辑 2 =====
/etc/httpd/conf.mudles.d/00-mpm.conf 的内容:
# Select the MPM module which should be used by uncommenting exactly
# one of the following LoadModule lines. See the httpd.conf(5) man
# page for more information on changing the MPM.
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
#
# NOTE: If enabling prefork, the httpd_graceful_shutdown SELinux
# boolean should be enabled, to allow graceful stop/shutdown.
#
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# worker MPM: Multi-Processing Module implementing a hybrid
# multi-threaded multi-process web server
# See: http://httpd.apache.org/docs/2.4/mod/worker.html
#
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
# event MPM: A variant of the worker MPM with the goal of consuming
# threads only for connections with active processing
# See: http://httpd.apache.org/docs/2.4/mod/event.html
#
LoadModule mpm_event_module modules/mod_mpm_event.so
配置基本还是默认的,我根本没改过