2023-2024-1 20232825《Linux内核原理与分析》第十三周作业

目录

Linux系统监控实战

一、Linux系统监控常用命令

二、Linux系统监控工具——Nagios

三、Linux监控的python脚本

四、结果

附、ChatGPT辅助问答


Linux系统监控实战

一、Linux系统监控常用命令

(1)CPU 监控 top

Linux 下的 top 命令是一个性能监控程序,许多系统管理员常常用它来监控 Linux 性能,在许多 Linux 或者类 Unix 操作系统里都有这个命令。top 命令用于按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果。这条命令显示了 CPU 的使用率、内存使用率、交换内存使用大小、高速缓存使用大小、缓冲区使用大小,进程 PID、所使用命令以及其他。它还可以显示正在运行进程的内存和 CPU 占用多的情况。

top

在图中依次可以看到进程 PID,进程用户,CPU 使用率,内存使用率、交换内存使用大小等等信息。top 命令提供了实时的对系统处理器的状态监视,它将显示系统中 CPU 最“敏感”的任务列表。

通过man top可以查看到详细的 top 命令使用方式。

man top

(2)虚拟内存监控 vmstat

Linux 的 vmstat 命令用于显示虚拟内存、内核线程、磁盘、系统进程、I/O 块、中断、CPU 活动等的统计信息。

一般 vmstat 工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。

vmstat 2 1

vmstat 2 2

测试参数讲解:

参数描述
r表示运行队列,如果运行队列过大,表示你的 CPU 很繁忙,一般会造成 CPU 使用率很高
b表示阻塞的进程数
swpd虚拟内存已使用的大小,如果大于 0,表示机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器
free空闲的物理内存的大小
buff系统占用的缓存大小
cache直接用来记忆我们打开的文件,给文件做缓冲
si每秒从磁盘读入虚拟内存的大小,如果这个值大于 0,表示物理内存不够用或者内存泄露了
cs每秒上下文切换数
us用户 CPU 时间
so每秒虚拟内存写入磁盘的大小,如果这个值大于 0,同上
sy系统 CPU 时间,如果太高,表示系统调用时间长,例如是 IO 操作频繁
id空闲 CPU 时间,一般来说,id + us + sy = 100
waIO 等待时间百分比 wa 的值高时,说明 IO 等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)
st来自于一个虚拟机偷取的 CPU 时间的百分比

(3)列出打开的文件:lsof

它常用于以列表的形式显示所有打开的文件和进程。打开的文件包括磁盘文件、网络套接字、管道、设备和进程。使用这条命令的主要情形之一就是在无法挂载磁盘和显示正在使用或者打开某个文件的错误信息的时候,使用这条命令,你可以很容易地看到正在使用哪个文件。

lsof

(4)网络包分析器:tcpdump

tcpdump 是最广泛使用的网络包分析器或者包监控程序之一,它用于捕捉或者过滤网络上指定接口上接收或者传输的 TCP/IP 包。它还有一个选项用于把捕捉到的包保存到文件里,以便以后进行分析。

参数描述
-h查看命令帮助
-i网络接口
-c需要输出包数量
tcpdump -h
sudo tcpdump -i eth0 -c 3

 

 

(5)网络状态统计:netstat

netstat 是一个用于监控进出网络的包和网络接口统计的命令行工具。它是一个非常有用的工具,系统管理员可以用来监控网络性能,定位并解决网络相关问题。

参数描述
-h查看帮助
-r查看 IP 路由表
-i查看网络接口

 

(6)进程监控:htop

htop 是一个非常高级的交互式的实时 Linux 进程监控工具。它和 top 命令十分相似,但是它具有更丰富的特性,例如用户可以友好地管理进程,快捷键,垂直和水平方式显示进程等等。htop 是一个第三方工具,它不包含在 Linux 系统中,你需要使用管理工具去安装它。

(7)输入/输出统计:iostat

iostat 是一个计算机系统监视工具,用于收集和显示操作系统存储的输入和输出统计数据。这个工具常常用来追踪存储设备的性能问题,其中存储设备包括本地磁盘以及诸如用 NFS 等的远端磁盘。

avg-cpu 段:

参数含义
%user在用户级别运行所使用的 CPU 的百分比
%nice优先进程消耗的 CPU 时间,占所有 CPU 的百分比
%system在系统级别(kernel)运行所使用 CPU 的百分比
%iowaitCPU 等待硬件 I/O 时,所占用 CPU 百分比
%steal管理程序维护另一个虚拟处理器时,虚拟 CPU 的无意识等待时间百分比
%idleCPU 空闲时间的百分比

Device 段:

参数含义
tps每秒钟发送到的 I/O 请求数
KB_read/s每秒读取的 block 数
KB_wrtn/s每秒写入的 block 数
KB_read启动到现在 读入的 block 总数
KB_wrtn启动到现在写入的 block 总数

(8)实时局域网 IP 监控:IPTraf

IPTraf 是一个在 Linux 控制台运行的、开放源代码的实时网络(局域网)监控应用。它采集了大量信息,比如通过网络的 IP 流量监控,包括 TCP 标记、ICMP 详细信息、TCP/UDP 流量分离、TCP 连接包和字节数。同时还采集有关接口状态的常见信息和详细信息:TCP、UDP、IP、ICMP、非 IP,IP 校验和错误,接口活动等。

(9)服务管理程序:sysv-rc-conf

Linux 系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作。sysv-rc-conf 是一个强大的服务管理程序,用于查看程序和服务的运行级别。

Ubuntu 的系统运行级别:

参数描述
0系统停机状态
1单用户或系统维护状态
2~5多用户状态
6重新启动

操作界面十分简洁,你可以用鼠标点击,也可以用键盘方向键定位,用空格键选择在启动级中开启或关闭程序,用 Ctrl+N 翻下一页,用 Ctrl+P 翻上一页,用 Q 退出。 

(10)监视每个进程使用的网络带宽:NetHogs

NetHogs 是一个开放源源代码的很小程序(与 Linux 下的 top 命令很相似),它密切监视着系统上每个进程的网络活动。同时还追踪着每个程序或者应用所使用的实时网络带宽。

(11)监视网络带宽:iftop

iftop 是另一个在控制台运行的开放源代码系统监控应用,它显示了系统上通过网络接口的应用网络带宽使用(源主机或者目的主机)的列表,这个列表定期更新。iftop 用于监视网络的使用情况,而 top 用于监视 CPU 的使用情况。iftop 也是 top 工具系列中的一员,它用于监视所选接口,并显示两个主机间当前网络带宽的使用情况。

界面相关说明:

参数描述
<= =>表示流量的方向
TX发送流量
RX接收流量
TOTAL总流量
cum运行 iftop 到目前时间的总流量
peak流量峰值
rates分别表示过去 2s 10s 40s 的平均流量

界面操作:

参数描述
按 H 键是否显示帮助
按 N 键显示本机的 IP 或主机名
按 S 键是否显示本机的 host 信息
按 D 键是否显示远端目标主机的 host 信息
按 T 键切换显示格式为 2 行/ 1 行/只显示发送流量/只显示接收流量

(12)System Monitor(图形化监视)

gnome-system-monitor 是 GNOME 系统监视器,能够监听 CPU,内存,进程,硬盘的信息。分为进程监控,资源监控,文件监控:

进程监控:包括进程名,用户,CPU 占用率,进程 PID,内存占用,优先级:

资源监控是对历史资源使用的统计,将其绘制成图展现,从图中可以看出 CPU 使用率的变化,存储占用率变化,带宽占用率变化。 

二、Linux系统监控工具——Nagios

(1)安装

sudo apt-get update
sudo apt-get install nagios3 apache2 libapache2-mod-php postfix

 

(2)查看配置文件分布

sudo apt-get install tree

cd /etc/nagios3

tree

(3)访问测试

启动 apache2 与 nagios:

sudo service apache2 start

sudo service nagios3 start

 在火狐浏览器中输入下面的网址进入 nagios,用户名为 nagiosadmin 密码为安装时设定的密码效果如下图所示:

http://127.0.0.1/nagios3/

 

(4)使用 Nagios 

在 nagios 的 web 页面中,可以看到一些目录,点击左边目录中的“service”,可查看所有用户的服务状态详细信息。

三、Linux监控的python脚本

Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制,这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中改变设置(通过改变内核参数)。与其他文件系统不同,/proc 存在于内存而不是硬盘中。

proc 文件系统提供的信息如下:

  • 进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的进程 ID,可以找到 cmdline、mem、root、stat、statm 以及 status。某些信息只有超级用户可见,例如进程根目录。每一个单独含有现有进程信息的进程有一些可用的专门链接,系统中的任何一个进程都有一个单独的自链接指向进程信息,其用处就是从进程中获取命令行信息。

  • CPU 信息:/proc/CPUinfo 文件可以获得中央处理器的当前准确信息。

  • 负载信息:/proc/loadavg 文件包含系统负载信息。

  • 系统内存信息:/proc/meminfo 文件包含系统内存的详细信息,其中显示物理内存的数量、可用交换空间的数量,以及空闲内存的数量等。

(1)CPU 监测

touch cpu.py

gedit cpu.py

在 cpu.py 中写入以下代码: 

 运行此 python 文件:

程序简要解析:

读取/proc/CPUinfo中的信息,返回 list,每核心一个 dict

其中 list是一个使用方括号括起来的有序元素集合。list可以作为以 0 下标开始的数组。

dict是 Python 的内置数据类型之一,它定义了键和值之间一对一的关系。

OrderedDict 是一个字典子类,可以记住其内容增加的顺序。常规 dict 并不跟踪插入顺序,迭代处理时会根据键在散列表中存储的顺序来生成值。在 OrderedDict 中则相反,它会记住元素插入的顺序,并在创建迭代器时使用这个顺序。

(2)Python 实现系统负载监测

touch sys_load.py

gedit sys_load.py

写入如下代码:

操作截图:

程序简要解析:

/proc/loadavg中获取当前负载的信息

import os :Python 中 import 用于导入不同的模块,包括系统提供和自定义的模块。其基本形式为:import 模块名 [as 别名],如果只需要导入模块中的部分或全部内容可以用形式:from 模块名 import *来导入相应的模块。OS 模块 os 模块提供了一个统一的操作系统接口函数,os 模块能在不同操作系统平台如 ntposix 中的特定函数间自动切换,从而实现跨平台操作。

(3)Python 实现内存信息的获取

touch mem.py

gedit mem.py

代码如下:

操作截图:

 

代码简要解析:

读取proc/meminfo中的信息, Python 字符串的split方法是用的频率还是比较多的。比如我们需要存储一个很长的数据,并且按照有结构的方法存储,方便以后取数据进行处理。当然可以用json的形式,但是也可以把数据存储到一个字段里面,然后有某种标示符来分割。Python 中的strip用于去除字符串的首位字符,最后打印出内存总数和空闲数。

(4)Python 实现网络接口的监测

touch net.py

gedit net.py

代码如下: 

 操作截图:

代码简要解析:

读取/proc/net/dev 中的信息,Python 中文件操作可以通过 open 函数,这的确很像 C 语言中的 fopen。通过 open 函数获取一个 file object,然后调用 read()write()等方法对文件进行读写操作。

另外, Python 将文本文件的内容读入可以操作的字符串变量非常容易。文件对象提供了三个“读”方法: read()readline()readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。

.read()每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而.read()生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。

.readline().readlines()之间的差异是后者一次读取整个文件,像 .read() 一样。.readlines() 自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for … in … 结构进行处理。

另一方面,.readline() 每次只读取一行,通常比 .readlines() 慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用 .readline()

最后清单是打印出网络接口的输入和输出情况。

四、结果

附、ChatGPT辅助问答

1、

 

2、

 

3、

 

 

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值