如何检查哪个进程正在阻塞本地 Linux 服务器(Slackware)

如何检查哪个进程正在阻塞本地 Linux 服务器(Slackware)

我工作的地方有一台 Slackware Linux 服务器。这是网络、数据库和 Web 服务器。我们的主要 Web 应用程序用作后端应用程序,用于管理我们的公共网站(经常更新)和与客户(迷你 ERP)合作,大多数员工在工作时间内将其用作唯一的应用程序,因此当它不工作时,整个公司都会被阻塞。

最近,Web 服务器经常阻塞或非常缓慢地处理请求,因此简单而简短的任务会持续数十分钟甚至更长时间。我使用 putty 连接到服务器。当这种情况发生时,我无法通过 putty 连接到服务器,甚至难以直接在服务器机房登录服务器机器,所以我不知道当这种情况发生时如何检查服务器上发生了什么,以便我可以诊断和修复问题。我知道有时 mysql 会过载,但我可以登录服务器并看到(我已启用慢速查询日志记录)。

我的主要问题是如何检测发生了什么。

这是服务器信息:

  • 版本:Slackware 11.0.0(当我登录时我得到:Linux 2.4.33.3。)
  • 处理器:Intel(R) Xeon(R) CPU 3050 @ 2.13GHz
  • 内存:3.5GB(交换4GB)
  • 磁盘空间:1TB(3个分区)

谢谢。

答案1

您应该有某种监控来帮助调试,但您不需要它。

启动屏幕并运行 vmstat 30

vmstat 将每 30 秒输出一次 CPU、IO 和 RAM 使用情况,屏幕将允许您稍后检索正在运行的 vmstat 以进行分析。如果 30 秒太快或太慢,请调整每次输出的秒数

如果它太慢以至于你甚至无法登录,我怀疑有两个问题:

  1. 大量使用交换。管理内存的内核优先于其他一切,因此在内存压力下一切都会等待交换 IO。增加内存并微调应用程序可能会有所帮助。
  2. 负载过重。如果您有许多客户端,那么 SQL 上的大量查询可能会使网站锁定几秒钟,从而延迟当前请求。然而,越来越多的请求到达,人们开始按重新加载,负载迅速增加。

你也可以让 putty 保持打开状态,并让 htop 保持运行(不是 top,因为它很重,htop 功能更多,而且更轻便)。当负载增加时,检查 htop 以查看当前机器状态

相关内容