在计算机的日常使用和运维中,了解系统资源的使用情况至关重要。特别是 CPU 和内存的使用状态,它们就像是计算机的“心脏”和“大脑”,直接影响着系统的性能和稳定性。在这篇博客里,咱们就来聊聊如何用 Shell 脚本实现系统资源的实时监控,也就是实时检测 CPU 和内存的使用情况。

一、Shell 脚本简介

Shell 脚本可以理解成是一系列命令的集合,就好比你把每天早上起床后要做的事情列成一个清单,然后按照这个清单依次去做。在 Linux 或者 macOS 系统里,Shell 脚本可是个非常实用的工具,它能帮助我们自动化完成很多任务。比如说,你可以写一个 Shell 脚本来定期备份文件,或者监控系统的某些状态。下面是一个简单的 Shell 脚本示例,它的作用是输出一句问候语:

# 技术栈:Shell
#!/bin/bash
# 这是一个简单的 Shell 脚本示例
echo "Hello, World!"

在这个示例里,#!/bin/bash 这一行告诉系统,这个脚本要用 Bash Shell 来执行。echo 命令的作用就是把后面的内容输出到屏幕上。

二、获取 CPU 使用信息

要监控 CPU 的使用情况,我们可以借助系统自带的工具,比如 top 或者 vmstat。这里我们用 vmstat 来获取 CPU 的使用信息。vmstat 能提供系统的各种状态信息,包括 CPU、内存、磁盘等。下面是一个获取 CPU 使用信息的 Shell 脚本示例:

# 技术栈:Shell
#!/bin/bash
# 获取 CPU 使用信息
vmstat 1 2 | tail -1 | awk '{print "CPU 空闲率: " $15 "%"}'

在这个脚本里,vmstat 1 2 表示每隔 1 秒采集一次数据,总共采集 2 次。tail -1 是取最后一行的数据,因为我们只关心最新的信息。awk 命令用来处理文本,这里它把 CPU 空闲率提取出来并输出。

三、获取内存使用信息

同样地,我们可以用 free 命令来获取内存的使用信息。free 命令会显示系统的物理内存、交换内存等使用情况。下面是一个获取内存使用信息的 Shell 脚本示例:

# 技术栈:Shell
#!/bin/bash
# 获取内存使用信息
free -m | awk 'NR==2{printf "内存使用率: %.2f%%\n", ($3/$2)*100 }'

在这个脚本里,free -m 表示以兆字节(MB)为单位显示内存信息。awk 命令的 NR==2 表示只处理第二行的数据,因为第二行包含了我们需要的内存使用信息。然后通过计算得出内存的使用率并输出。

四、实时监控脚本示例

现在,我们把获取 CPU 和内存使用信息的功能整合到一个脚本里,实现实时监控。下面是一个完整的实时监控脚本示例:

# 技术栈:Shell
#!/bin/bash
while true
do
    # 获取 CPU 使用信息
    cpu_idle=$(vmstat 1 2 | tail -1 | awk '{print $15}')
    cpu_usage=$(echo "scale=2; 100 - $cpu_idle" | bc)
    echo "CPU 使用率: $cpu_usage%"

    # 获取内存使用信息
    mem_used=$(free -m | awk 'NR==2{print $3}')
    mem_total=$(free -m | awk 'NR==2{print $2}')
    mem_usage=$(echo "scale=2; ($mem_used/$mem_total)*100" | bc)
    echo "内存使用率: $mem_usage%"

    # 每隔 5 秒监控一次
    sleep 5
done

在这个脚本里,我们用了一个 while true 循环,让脚本一直运行下去。在每次循环里,先获取 CPU 的使用率,再获取内存的使用率,然后把这些信息输出到屏幕上。最后,用 sleep 5 让脚本暂停 5 秒,这样就实现了每隔 5 秒监控一次的功能。

五、应用场景

服务器运维

在服务器运维工作中,实时监控 CPU 和内存的使用情况是非常重要的。比如说,当服务器的 CPU 使用率持续过高时,可能会导致服务器响应变慢,甚至出现崩溃的情况。通过实时监控,运维人员可以及时发现问题,并采取相应的措施,比如优化程序或者增加服务器资源。

程序性能测试

在开发新的程序或者对现有程序进行优化时,我们需要了解程序在运行过程中对 CPU 和内存的消耗情况。通过 Shell 脚本实时监控系统资源,我们可以分析程序的性能瓶颈,从而有针对性地进行优化。

六、技术优缺点

优点

  • 简单易用:Shell 脚本的语法比较简单,对于有一定 Linux 基础的开发者来说,很容易上手。而且不需要安装额外的软件,系统自带的工具就能满足需求。
  • 灵活性高:我们可以根据自己的需求,灵活地调整监控的频率和输出的信息。比如说,我们可以把监控信息保存到文件里,或者通过邮件发送给相关人员。

缺点

  • 功能有限:Shell 脚本主要是对系统自带工具的调用,对于一些复杂的监控需求,可能就无法满足了。比如说,它不能进行图形化的展示,也不能对监控数据进行深入的分析。
  • 性能开销:如果监控的频率过高,会增加系统的负担,影响系统的性能。

七、注意事项

权限问题

在运行 Shell 脚本时,要确保脚本文件有执行权限。可以用 chmod +x 命令来给脚本文件添加执行权限,例如:

chmod +x monitor.sh

资源消耗

前面也提到过,监控频率过高会增加系统的负担。所以在设置监控频率时,要根据实际情况进行调整,避免对系统性能造成太大的影响。

八、文章总结

通过这篇博客,我们了解了如何用 Shell 脚本来实现系统资源的实时监控,也就是实时检测 CPU 和内存的使用情况。我们学习了如何获取 CPU 和内存的使用信息,以及如何把这些信息整合到一个脚本里。同时,我们也探讨了这种监控方式的应用场景、优缺点和注意事项。总的来说,Shell 脚本是一种简单易用、灵活性高的监控方法,适合一些基本的系统资源监控需求。