Linux服务器卡死排查:谈谈BPS超限

野溜小子 4月前  服务器   347

昨天我在阿里云上的网站突然在15:10分时打不开了,此时想通过ssh连接服务器也连接不上。这样的情况近期已经第三次出现了,每次都是强制重启服务器后解决,但这并没有找出问题本质,没有从根本上解决问题,于是这次我在阿里云后台发起了工单,请求协助排查问题。后来阿里云人的技术人员确实也给了我反馈:
您好,这边查看您的实例磁盘BPS超过您的云盘规格性能的BPS,系统无法响应您的正常操作。

然后他还给了我两个建议:
1. 建议您考虑重启服务器恢复,请您自行评估重启对您业务的影响。
2. 建议您在您的实例系统中安装atop工具记录日志,后续通过日志排查CPU、内存、磁盘读写、带宽(监测网络使用率要安装网络监控模块netato)使用较高的进程。
使用atop监控工具:https://help.aliyun.com/zh/ecs/how-to-use-the-linux-system-atop-monitoring-tools
提示:为避免atop长时间运行占用太多磁盘空间,建议将默认的日志保留时间28天修改为7天。

此外,他还建议如果您的磁盘现在读写很高,可以参考文档查看Linux系统I/O负载:https://help.aliyun.com/zh/ecs/support/query-and-case-analysis-linux-io-load

我对"BPS超标"(每秒字节数)比较疑惑,于是自行做了搜索学习,发现有人遇到同样的问题,也给出了解决方法。于是我也同样作了检查:

根据时间轴检查系统日志:
 cat /var/log/messages

发现在15:09分的时候确实有过异常,看下图:

15:09分的时候确实有状况,注意到这一句:
Jul  9 15:09:49 hqwaliyun2024 kernel: Out of memory: Killed process 22842 (dnf) total-vm:830168kB, anon-rss:467376kB, file-rss:0kB, shmem-rss:0kB, 

杀死了ID为 22842 的 dnf 进程(后面的total-vm、anon-rss和file-rss还不太清楚,需进一步读取)

猜测是dnf后台更新缓存导致磁盘IO高导致,并且看到这里应该更新导致内存不足,然后后面系统陆续杀死了各种进程。

解决方案,卸载dnf或者关闭make-cache的动作:
systemctl stop dnf-makecache.timer
systemctl disable dnf-makecache.timer

问题暂时是解决了,后续情况需进一步观察。

2 个回答
  • 小何同志 4月前
    2

    查看哪个进程被杀死
    grep -i 'killed process' /var/log/messages 
    或者
    dmesg | grep -i 'killed process' dmesg vs /var/log/messages

    两者都是用于记录系统消息的,dmesg是内存缓存的消息,超过大小会丢弃,所以要及时查看;messages里是syslog-ng写进去的,写的内容依赖于其配置/etc/syslog-ng/conf.d,持久化到文件。total-vm、anon-rss和file-rss含义:
    total-vm:进程总共使用的虚拟内存;
    anon-rss:虚拟内存实际占用的物理内存;
    file-rss:虚拟内存实际占用的磁盘空间

    1 回复引用 引用
  • 孤城浪人 4月前
    3
    据我了解,进程使用的虚拟内存的大小列为" total-vm"。 它的一部分实际上已映射到RAM本身(已分配和使用)。 这是" RSS"。

    RSS的一部分分配在实内存块中(而不是映射到文件或设备中)。 这是匿名内存(" anon-rss"),并且还有RSS内存块被映射到设备和文件(" file-rss")中。

    因此,如果您在vim中打开一个巨大的文件,则文件rss会很高,另一方面,如果您malloc()大量内存并真正使用它,那么您的anon-rss也会很高。

    另一方面,如果您分配了大量空间(使用malloc()),但从未使用过,则total-vm会更高,但不会使用实际内存(由于内存过量使用),因此, rss值会很低。
    1 回复引用 引用
    • 探知网
      4
        立即登录 立即注册
返回
发新帖