我们已经遇到过几次了。突然间,我们的生产服务器因为进程陷入无限循环而无法响应,或者 MySQL 服务器停止处理新请求,因为一个查询阻塞了一切……
我们通过 SSH 连接到服务器并使用ps aux
或top
来查找罪魁祸首,或者在 MySQL 中使用mytop
或SHOW FULL PROCESSLIST
来查找有问题的进程 ID 并kill
修复它。然后我们当然会尝试在测试服务器上重现这种情况并修复错误。
但有时服务器挂得太厉害,你的ps aux
/ top
/ mytop
/SHOW FULL PROCESSLIST
无法通行 - 甚至管理员也被阻止了。
确保管理员始终可以访问服务器并终止有问题的进程或查询(在 Linux 和 MySQL 上)的最佳方法是什么?
- 我们可以为不同的用户分配优先级吗?
- 保留一部分资源给root?
我已经检查过了很好(1)但是,持续保持一个以 nice -20 为标准的开放连接似乎有点过度并且难以操作(更不用说作为 root 来说很危险了)。
答案1
pam_limits.so 模块是一个限制内存、打开文件等的实用工具,还可以设置很好的优先级针对用户和群组。
rpm -ql pam | grep limits
man limits.conf
less /etc/security/limits.conf
答案2
答案3
我们使用的戴尔服务器安装了远程访问网卡 (DRAC),这样我们就可以通过 ssh 或 Web 浏览器带外访问服务器。我们可以进入控制台屏幕,或关闭服务器电源。大多数主要服务器供应商都支持一些类似的设备。
如果你想登录一台没有可用资源允许登录的服务器,那么这种方法对你没有帮助。除了为登录保留资源外,这种方法是仅次于物理访问服务器的最佳方法。
听起来您遇到了与问题应用程序相关的问题。为什么您的应用程序会陷入无限循环,MySQL 查询会耗尽您的服务器资源?
答案4
或许斯拉普可能是答案。它是用于基于 Linux 的集群系统的 QoS 资源管理器。