我有一个 PHP 8.3 应用程序在 Apache2 的虚拟主机上运行,该应用程序在 Linux V1 的 Windows 子系统上运行。它非常慢,有时一个页面刷新可能需要一两分钟。
当我处理它时(在浏览器中打开它),整个 Apache2 服务器冻结了两分钟。
在此期间,我无法访问其他虚拟主机或检索不使用 PHP 的目录列表。
我尝试了 FPM 和 libapache2-mod-php 方法,但仍然面临问题。
我设置了loglevel warn
,但我什么也没看到。
我也尝试过这些设置,但仍然一无所获。
StartServers 100
MinSpareServers 100
MaxSpareServers 1024
ServerLimit 16000
MaxRequestWorkers 16000
MaxConnectionsPerChild 10000
#Timeout 300
KeepAlive On
MaxKeepAliveRequests 0
#KeepAliveTimeout 5
输出apachectl -S
VirtualHost configuration:
*:80 Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:4)
*:443 is a NameVirtualHost
default server Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:10)
port 443 namevhost Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:10)
alias win
port 443 namevhost Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:22)
alias trading.win
port 443 namevhost Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:31)
alias trading_secret.win
port 443 namevhost Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:54)
alias pma.win
port 443 namevhost Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:66)
wild alias *.*.*.win
port 443 namevhost Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:78)
wild alias *.*.win
port 443 namevhost Varun-PC. (/etc/apache2/sites-enabled/vhosts.conf:88)
wild alias *.win
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
Mutex mpm-accept: using_defaults
Mutex watchdog-callback: using_defaults
Mutex rewrite-map: using_defaults
Mutex ssl-stapling-refresh: using_defaults
Mutex ssl-stapling: using_defaults
Mutex proxy: using_defaults
Mutex ssl-cache: using_defaults
Mutex default: dir="/var/run/apache2/" mechanism=default
PidFile: "/var/run/apache2/apache2.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="www-data" id=33
Group: name="www-data" id=33
我该如何解决?
这应该是一条评论,但有点长。
你所描述的情况非常奇怪。虽然我同意 WSL 通常表现得不像 Linux VM 或本机主机,但这并不能解释问题 - 尽管如果 Apache 或 PHP 尝试访问 MS-Windows 主机上的任何资源 - 这可能就是问题所在。MS-Windows 的独占文件锁非常严格。
那么请不要使用该应用程序来测试网络服务器。如果您还没有尝试运行此命令:
要创建第一个进程,然后...
如果您可以让第二个脚本同时运行,那么问题出在您的代码中,而不是网络服务器/PHP 配置中。
如果第二个脚本被阻止,则尝试比较 2 个进程的 lsof 并检查输出
top
我运行symcbean 的脚本,同时慢慢尝试禁用不同的 PHP 扩展和 Apache 模块,以查看导致问题的原因。
事实证明,在我的案例中,是 Apache2 SSL 模块导致了问题。一旦我禁用它,问题就完全停止了。