有时(不太经常)当我输入“netstat”时,它需要超过 5 秒才能返回。而其他时间是瞬时的。
我已经在我的服务器(CentOS 6.4)上观察了几个星期,但我不明白为什么!?
谁能给个解释?
我的 Apache 2.2(预制 MPM)在达到 MaxClients 时挂起,而不是在子进程空闲时排队请求并为它们提供服务。发生这种情况时,Web 服务器完全没有响应,直到手动重新启动。
服务器堆栈为 Ubuntu 8、MySQL 5、PHP 5。硬件为 Dual Xeons (2.8),具有 2GB 内存。它每天提供 30,000 - 50,000 次综合浏览量。静态图像、CSS 和 JS 被卸载到单独的服务器,而 PHP 使用 eAccelerator 进行缓存。许多页面的 HTML 输出被缓存到文件系统中。
相关的 Apache 指令:
KeepAlive On
MaxKeepAliveRequests 50
KeepAliveTimeout 2
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 2000
Run Code Online (Sandbox Code Playgroud)
我最近将我的网站移到了新服务器(Apache 2、PHP5、MySQL5)。该站点是一个基于 Invision 的论坛。每隔几个帖子/主题就会挂起。数据已写入,因为如果您停止并重新加载,帖子/线程就在那里。我最初认为这是一个写入问题,但不是。数据已写入,但页面加载从未完成。它不会离开输入数据的页面。
解决此问题的最佳方法是什么?我最近做的唯一一件事就是减少我的 MySQL 超时,但我看不出这是一个问题,因为值仍然足够大,而且 MySQL 日志中没有提到超时。作为记录,PHP 的错误日志中也没有任何内容。
编辑:我检查了我的服务器状态。看起来一切正常,但我怀疑我达到了 ServerLimit,所以我将其加倍。还启用了我的 Keepalive。会关注它。
编辑 2:现在已经几天了,这种情况仍在发生。不过我有更多信息;
更新 (05/04):我从源代码构建了最新版本的 Apache 和 PHP,不走运。然后我删除了那些并使用 remi repo 将我的所有软件包更新到最新的稳定版。段错误似乎已经停止,但挂起仍在继续。
ini
位于:
更新 - 解决了!- 问题是在 MySQL 中有一个巨大的查询缓存大小。它是 2GB,将其更改为 64M 进行排序。
我有一台运行 apache 的服务器,并且偶尔会看到 apache 进程达到 100% 并保持在那里。今天,在两个进程 100% 的情况下,我关闭了对服务器的外部访问(以防止对 apache 的进一步请求)。五分钟后,没有请求进入服务器,但两个进程仍处于 100%。
我已经运行lsof
了每个进程,他们给了我大约 9000 行输出(这对我来说也可能是希腊语)。没有其他进程似乎表现异常或等待等。
我的数据库在第二台服务器上。Usingmytop
显示来自 apache 服务器的两个处于活动状态的 MySQL 连接,均处于“睡眠”状态。我杀死了其中一个 MySQL 线程,Apache 服务器上的任一进程都没有变化。
这个 apache 服务器是简单负载均衡器背后的两个服务器之一。不知道有没有关系
如何确认 apache 问题与我在数据库服务器上看到的内容有关?这可能是狡猾的 SQL 调用的结果,还是其他原因?
编辑:发现问题。这是 Magento 的代码问题。图像大小调整功能无法打开图像,因为扩展名不正确(它是带有 jpg 扩展名的 BMP)。这个错误处理程序再次调用调整大小,等等 - 一个循环。通过strace
对行为不端的 apache 进程执行操作发现了这一点。
什么会导致“PowerShell.exe”在多个系统上打开时挂起?
我已经等了 60 多分钟,但它从未完全启动。它所做的只是显示带有典型 PowerShell 启动输出的蓝色 shell 窗口:
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Run Code Online (Sandbox Code Playgroud)
然后它就挂了。我怀疑这实际上不是 PowerShell 问题,而是其他原因,例如 .NET 或 McAfee,但我不知道。
我已经尝试以任何我知道的方式启动 PowerShell,但无论我尝试什么,到目前为止我找到的唯一解决方法是重新启动系统。如果不是在服务器上,重新启动可能是一个可以接受的修复,并且问题永远不会再出现,但是它最终会在一段时间后(可能几周后)返回。我在很多服务器上都看到过这个。超过 15 个,但我不确定到底有多少。我猜我们的服务器至少有一半,所以至少有 40 台左右的服务器。它发生在 Windows Server 2016 和 2019 上,但我不记得在我们的任何 2012 R2 服务器上看到它发生。
这导致我们的“早晨检查”脚本出现问题,该脚本尝试使用“New-PSSession”在 foreach 循环中检查多台服务器上的最后一个 Windows Server 备份,如下所示:
$rsession = New-PSSession -ComputerName $Server -ErrorAction Stop;
Invoke-Command -Session $rsession -ScriptBlock {...}
Run Code Online (Sandbox Code Playgroud)
脚本块非常小/简单(只有几个“Get-WBJob”命令)。一旦脚本到达遇到此问题的第一台服务器,它就会无限期挂起(同样,我已经等了 60 多分钟)。如果我重新启动该远程系统,它会继续运行,直到到达另一个遇到此问题的远程系统为止。如果不是脚本,我只是尝试这样的事情,我会遇到同样的结果(挂起):
Enter-PSSession -ComputerName Server2
Run Code Online (Sandbox Code Playgroud)
在遇到问题的系统上,我尝试通过以下方式从 cmd 启动 powershell 可执行文件,没有任何区别:
start PowerShell.exe -NoProfile
start PowerShell.exe -NoProfile -ExecutionPolicy Unrestricted
start PowerShell.exe -NoProfile -ExecutionPolicy Restricted …
Run Code Online (Sandbox Code Playgroud) 我运行了一个流量相当高的网络服务器(专用的 Apache/PHP),虽然它大部分时间都运行良好,但它大约每天一次死锁并拒绝任何新连接。重新启动 Apache 可以解决问题。在这次锁定之前,我已经抓住了几次,Apache 状态显示了每个请求的所有 W(发送回复)。http-errors.log 中的最后一个错误是 MaxClients 被命中(这是有道理的,因为没有请求返回)。
你们有什么想法为什么 Apache 请求可能决定永远不会返回,或者对这里可能发生的事情有任何想法?
谢谢!