麒麟操作系统内存异常占满问题解决(audit异常占用内存过高)

一、现象

  通过监控系统看到项目上使用的多台虚拟机内存过多,导致部分业务运行中断。同时部分虚拟机无法通过22端口远程登录。

二、排查过程

  其他虚拟机都有相同的现象,那就找目前内存较高且还能通过22端口登录的虚拟机,通过执行top命令后以内存大小进行排序查看,发现auditd的进程占用27GB,然后在其他虚拟机上也发现auditd进程占用内存大。问题定位后,对无反映的虚拟机进行重启,并利用脚本指标重启。

三、编码脚本

   思路:利用sshpass远程依次登录所有虚拟机执行关闭auditd进程。

   要求:所有虚拟机安装sshpass命令,若没有需要自行安装。

   执行:1)按标黄的内容依次修改为实际值;2)将脚本保存至任意一台虚拟机,并命名为”shutdown_auditd.sh“文件,后执行"dos2unix shutdown_auditd.sh"对行结束符进行转义;3)执行命令批量执行指令,即可完成auditd进程关闭。

   注意:要看一下是否有执行失败的ip,若有的话可以手动连接ip后,将systemctl stop auditd && systemctl disable auditd再执行一次,或是将脚本中ConnectTimeout=10值调大,以增加连接等待时间。

#!/bin/bash
# 远程服务器的用户名和密码 (!!! 非常不安全 !!!)
REMOTE_USER="root"
REMOTE_PASSWORD="rootxxxx"
# 要在远程服务器上执行的命令
REMOTE_COMMANDS="systemctl stop auditd && systemctl disable auditd"
# 目标服务器IP列表 (请根据您的实际IP地址修改)
# 请将下面的示例IP替换为您实际需要操作的10台服务器的IP
SERVERS=(
    "172.30.5.192"
    "172.30.5.195"
)
echo "开始远程执行命令..."
echo "--------------------"
# 循环遍历服务器列表
for server_ip in "${SERVERS[@]}"; do
    echo "正在连接服务器: $server_ip"
    # 使用 sshpass 通过密码进行SSH连接并执行命令
    # -o StrictHostKeyChecking=no 禁用主机密钥检查 (不安全,但方便自动化)
    # -o ConnectTimeout=10 设置连接超时时间为10秒
    sshpass -p "$REMOTE_PASSWORD" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 "$REMOTE_USER@$server_ip" "$REMOTE_COMMANDS"
    # 检查SSH命令的退出状态
    if [ $? -eq 0 ]; then
        echo "在 $server_ip 上成功执行命令."
    else
        echo "在 $server_ip 上执行命令失败 或 SSH连接失败."
    fi
    echo "--------------------"
done
echo "所有服务器处理完成."

  

posted @ 2025-05-08 16:12  Runner_Jack  阅读(829)  评论(0)    收藏  举报