![如何检查哪个进程正在阻塞本地 Linux 服务器(Slackware)](https://linux22.com/image/801496/%E5%A6%82%E4%BD%95%E6%A3%80%E6%9F%A5%E5%93%AA%E4%B8%AA%E8%BF%9B%E7%A8%8B%E6%AD%A3%E5%9C%A8%E9%98%BB%E5%A1%9E%E6%9C%AC%E5%9C%B0%20Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%88Slackware%EF%BC%89.png)
我工作的地方有一台 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 秒太快或太慢,请调整每次输出的秒数
如果它太慢以至于你甚至无法登录,我怀疑有两个问题:
- 大量使用交换。管理内存的内核优先于其他一切,因此在内存压力下一切都会等待交换 IO。增加内存并微调应用程序可能会有所帮助。
- 负载过重。如果您有许多客户端,那么 SQL 上的大量查询可能会使网站锁定几秒钟,从而延迟当前请求。然而,越来越多的请求到达,人们开始按重新加载,负载迅速增加。
你也可以让 putty 保持打开状态,并让 htop 保持运行(不是 top,因为它很重,htop 功能更多,而且更轻便)。当负载增加时,检查 htop 以查看当前机器状态