当出现问题时请赐予我杀戮力量

当出现问题时请赐予我杀戮力量

我们已经遇到过几次了。突然间,我们的生产服务器因为进程陷入无限循环而无法响应,或者 MySQL 服务器停止处理新请求,因为一个查询阻塞了一切……

我们通过 SSH 连接到服务器并使用ps auxtop来查找罪魁祸首,或者在 MySQL 中使用mytopSHOW 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 资源管理器。

相关内容