当前位置: 首页 > news >正文

linux-系统性能监控

linux-系统性能监控

  • 一、cpu
    • 1.1 查看cpu的信息
    • 1.2 cpu性能指标
    • 1.3 编写监控cpu使用率的脚本
    • 1.4 查找出使用cpu最高的10个进程
  • 二、内存
    • 2.1 查看内存信息
    • 2.2 交换(swap)分区
      • 2.2.1 查看交换分区的积极程度
      • 2.2.2 查看交换分区的大小
      • 2.2.3 管理交换分区
    • 2.3 编写获取内存使用率的脚本
    • 2.4 查找出使用内存最高的10个进程
  • 三、磁盘
    • 3.1 查看磁盘信息
    • 3.2 测试磁盘性能
  • 四、网络流量
  • 五、进程
    • 5.1 查看进程
    • 5.2 杀死进程
    • 5.3 让进程在后台运行
  • 全能命令
  • 总结


一、cpu

中央处理器 central processing unit --》cpu

1.1 查看cpu的信息

  1. top --> 输入1 (默认按cpu使用率排序 -> P)
  2. htop
  3. lscpu
  4. cat /proc/cpuinfo
  5. dmidecode -t 4
    dmidecode 是 Linux 系统下用于读取 DMI(Desktop Management Interface,桌面管理接口) 信息的工具,可以获取 BIOS、主板、CPU、内存、系统序列号等硬件信息。它直接从 SMBIOS(System Management BIOS) 读取数据,适用于服务器、PC 等 x86/x86_64 架构的设备

查看服务器型号:dmidecode | grep ‘Product Name’
查看主板的序列号:dmidecode |grep ‘Serial Number’
查看系统序列号:dmidecode -s system-serial-number
查看内存信息:dmidecode -t memory
查看OEM信息:dmidecode -t 11


1.2 cpu性能指标

  1. 核心数量
  2. 主频率
    纳秒
    秒–》毫秒–》微妙–》纳秒
  3. 缓存(Cache)—》加速
    CPU 缓存(L1/L2/L3)用于临时存储高频数据,减少访问内存的延迟:
    Level 1
    Level 2
    Level 3
top - 15:00:30 up  5:39,  2 users,  load average: 0.30, 0.29, 0.27
Tasks: 185 total,   1 running, 184 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.3 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.2 hi,  0.2 si,  0.0 st
MiB Mem :   7553.1 total,   6521.6 free,    507.4 used,    776.3 buff/cache
MiB Swap:   7940.0 total,   7940.0 free,      0.0 used.   7045.7 avail Mem PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                    31350 root      20   0       0      0      0 I   1.0   0.0   0:01.23 kworker/3:1-events                                                                                         571 root      20   0       0      0      0 S   0.3   0.0   0:12.67 xfsaild/dm-0                                                                                               31423 root      20   0       0      0      0 I   0.3   0.0   0:00.24 kworker/u512:1-events_unbound                                                                              31997 root      20   0   10816   4096   3328 R   0.3   0.1   0:00.34 top                                                                                                        1 root      20   0  170536  12928   9856 S   0.0   0.2   0:22.26 systemd                                                                                                    2 root      20   0       0      0      0 S   0.0   0.0   0:00.07 kthreadd         

系统平均负载是在过去的1分钟,5分钟,15分钟内,处于可运行或不可中断状态的进程的平均数量。
1 cup 核心 --》1
4 cpu 核心 --》4

%Cpu0 : 0.3 us, 0.7 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.3 hi, 0.3 si, 0.0 st

文档解释

us, user : time running un-niced user processes
sy, system : time running kernel processes
ni, nice : time running niced user processes
id, idle : time spent in the kernel idle handler
wa, IO-wait : time waiting for I/O completion
hi : time spent servicing hardware interrupts
si : time spent servicing software interrupts
st : time stolen from this vm by the hypervisor

us user 进程消耗的cpu资源 --》普通的应用程序消耗的资源
sy system 进程消耗的cpu资源 —》内核进程

  • 网络IO 磁盘IO 大量产生进程—》内核
    内核的作用:
    1.对cpu进行管理(上下文切换、进程的调度到cpu)
    2.对磁盘进行管理–》文件的存取—》磁盘IO
    3.对进程进行管理(创建、销毁、杀死等)
    4.对内存进行分配管理
    5.对其他硬件进行管理(网卡、GPU等)

id —》空闲的cpu资源 idle
ni nice 友好的

进程是有优先级,默认情况下所有的进程优先级一样
cfs --》完全公平调度算法 --》rr +timeslice + priority +中断

PR = 20 + nice值

nice值
作用:调整进程的静态优先级,范围从 -20(最高优先级)到 19(最低优先级)。
默认值:新进程继承父进程的nice值(通常为 0)。
进程的默认优先级是20

PR 列:动态优先级(数值越小优先级越高)

renice 调整进程的nice值
如:调整进程为797 nice值

[root@rocky-2 shell]# renice -n -10 797


1.3 编写监控cpu使用率的脚本

monitor_cpu.sh
当cpu使用率超过70%给与提醒,记录到日志文件/var/log/monitor_cpu.log里,记录日期 机器名 + 当前的使用率

截取cpu使用率
top -bn1|grep "Cpu"|awk -F '[ ,]+' '{print $8}'

top命令
-b 批处理模式,适合脚本里使用,一次性输出所有的进程的信息和cpu、内存的信息
-n 1 迭代1次
-d 2 每次延迟2秒更新数据

awk 是截取命令
-F 指定分隔符号 ,默认是空白–》包含空格和tab

正则表达式: 将字符串,数字,特殊符号按照某个正确规则组合在一起,用来表达某个意思的公式
[ ,]+ 表示空格和逗号都是分隔符 + 表示前面的字符可以出现1或者n次 -> 多个空格或者多个,都是只能是一个分隔符
print 是awk里的输出命令
$8 代表第8个字段

[root@rocky-2 shell]# cat monitor_cpu.sh 
#!/bin/bash#cpu空闲率
cpu_idle_num=$(top -bn 1|grep "^%Cpu"|awk -F '[ ,]+' '{print $8}')#100 - 空闲率=使用率
cpu_used_num=$( echo "100 - $cpu_idle_num"|bc)#判断cpu的使用率是否超过70%
flag=$(echo "$cpu_used_num >= 70"|bc)
if  (( $flag == 1 ));thenecho "$(date +%Y%m%d%H%M%S) $(hostname) cpu使用率是 ${cpu_used_num}%" |tee -a /var/log/monitor_cpu.log
elseecho "$(date +%Y%m%d%H%M%S) $(hostname) cpu使用率是 ${cpu_used_num}%"
fi

1.4 查找出使用cpu最高的10个进程

ps -aux --sort -%cpu|head
ps -A -o pid,%cpu,command --sort -%cpu|head

-A 显示所有的进程
-o 指定输出字段 output option 选项字段
–sort 根据那列进行排序,默认是升序 + 升序 - 降序


二、内存

2.1 查看内存信息

  1. cat /proc/meminfo —>内存的使用信息–》整体信息

  2. free --》/proc/meminfo 获得,计算出来的

proc文件系统 --》/proc文件夹 --》对/proc文件进行管理的一套系统
/proc 文件夹消耗的空间是内存的空间,存放的是内核进程工作的信息和数据
/proc 是 Linux 系统中一个特殊的虚拟文件系统,它不占用磁盘空间,而是由内核动态生成,用于内核与用户空间交互

tmpfs 临时文件系统,消耗的是内存的空间,给应用程序临时存放数据 temporary file system

[root@rocky-2 proc]# df -a
文件系统               1K-块         已用     可用 已用% 挂载点
proc                       0        0        0     - /proc
sysfs                      0        0        0     - /sys
devtmpfs                4096        0     4096    0% /dev
securityfs                 0        0        0     - /sys/kernel/security
tmpfs                3867204        0  3867204    0% /dev/shm

free命令详解

total Total installed memory (MemTotal and SwapTotal in /proc/meminfo)
 
used Used memory (calculated as total - free - buffers - cache)
 
free Unused memory (MemFree and SwapFree in /proc/meminfo)
 
shared Memory used (mostly) by tmpfs (Shmem in /proc/meminfo)
 
buffers Memory used by kernel buffers (Buffers in /proc/meminfo)
 
cache Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)
 
buff/cache
Sum of buffers and cache
 
available
Estimation of how much memory is available for starting new applications, without swapping. Unlike the data provided by the cache or free
fields, this field takes into account page cache and also that not all reclaimable memory slabs will be reclaimed due to items being in use
(MemAvailable in /proc/meminfo, available on kernels 3.14, emulated on kernels 2.6.27+, otherwise the same as free)

buffer 是缓存数据的空间 (data memory --》disk )内存当中的数据写入到磁盘的时候,临时存放数据的地方
data --》memory write to disk
cache 是缓存数据的空间 (data disk --》memory ) 应用程序需要从磁盘读取数据到内存里,临时存放数据的地方
data --》disk read to memory
buffer和cache 可以理解为内核消耗的内存空间 --》可以提供给应用程序使用
used是应用程序消耗的内存空间

available 可以使用的空间,当我们创建一个新的进程的时候,可以给这个进程分配的最大的内存空间

available = free + 可回收的buffer/cache
total = used + free + buffers + cache

建议只是看free剩余的内存空间

如何清除buffer和cache里的内容?
echo 3 >/proc/sys/vm/drop_caches


2.2 交换(swap)分区

物理内存+swap分区的大小 = 虚拟内存
8G + 8G = 16G

swap分区 :磁盘空间,将物理内存里的不活跃的进程交换到swap分区,当需要调用的时候再从交换分区里交换到物理内存里
临时存放数据的作用
如果交换分区开始使用,说明物理内存不足

OOM(Out Of Memory) --》 内存溢出

sync命令可以把linux缓存(buffer)写进磁盘

2.2.1 查看交换分区的积极程度

[root@rocky-2 ~]# cat /proc/sys/vm/swappiness
60
# 当物理内存使用率超过40%的时候,就开始使用swap分区

临时修改

root@sanchuang:~# echo 0 > /proc/sys/vm/swappiness
root@sanchuang:~# cat /proc/sys/vm/swappiness
0
# 0 表示当物理内存剩余0的时候开始使用,使用率100%的时候,开始使用交换分区

对内核参数的调优,优化了什么时候开始使用交换分区的空间

永久修改

[root@rocky-2 proc]# vim /etc/sysctl.conf
vm.swappiness = 0

让内核重新读取配置文件,加载新的参数

[root@rocky-2 proc]# sysctl -p
vm.swappiness = 0


2.2.2 查看交换分区的大小

[root@rocky-2 ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 8130556 0 -2

因为交换分区使用的是磁盘的空间,速度不及内存的速度,性能较差,在某些应用场景不推荐使用


2.2.3 管理交换分区

禁用交换分区

[root@rocky-2 ~]# swapoff -a
选项:
-a, --all 禁用 /proc/swaps 中的所有交换区

[root@rocky-2 ~]# cat /proc/swaps
Filename				Type		Size		Used		Priority
[root@rocky-2 ~]# 
[root@rocky-2 ~]# top
top - 11:29:37 up  2:10,  2 users,  load average: 0.15, 0.17, 0.19
Tasks: 188 total,   1 running, 187 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.4 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.1 hi,  0.2 si,  0.0 st
MiB Mem :   7553.1 total,   6810.4 free,    498.1 used,    487.0 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   7055.0 avail Mem PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                     11720 root      20   0       0      0      0 I   1.0   0.0   0:03.73 kworker/3:3-events                          17 root      20   0       0      0      0 I   0.3   0.0   0:03.26 rcu_preempt                                 800 root      10 -10  168836   8960   7680 S   0.3   0.1   0:15.22 vmtoolsd   

RES - anything occupying physical memory 物理内存的使用空间
share 共享内存使用的大小

共享内存是实现进程和进程之间通信的一种方式

S – Process Status

  • The status of the task which can be one of:
    • D = uninterruptible sleep
    • I = idle
    • R = running
    • S = sleeping
    • T = stopped by job control signal
    • t = stopped by debugger during trace
    • Z = zombie

打开交换分区

[root@rocky-2 ~]# swapon -a
[root@rocky-2 ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 8130556 0 -2


2.3 编写获取内存使用率的脚本

monitor_mem.sh
使用的内存空间百分比=100-(free/total)*100

[root@rocky-2 ~]# free -m
total used free shared buff/cache available
Mem: 7553 512 6410 17 881 7040
Swap: 7939 0 7939

[root@rocky-2 shell]# vim monitor_mem.sh
#!/bin/bash#获取total值
total_num=$(free -m|grep "^Mem"|awk '{print $2}')
#获取free值
free_num=$(free -m|grep "^Mem"|awk '{print $4}')#使用内存的百分比
used_percent=$(echo "scale=2;100 - $free_num * 100 / $total_num"|bc)
echo "总的内存是 ${total_num}MB 目前系统已经使用了 ${used_percent}%"#判断使用率是否超过70%
flag=$(echo "$used_percent >= 70"|bc)if  (( $flag == 1 ));thenecho "$(date +%Y%m%d%H%M%S) $(hostname) 内存使用率超过70% 目前的值是 $used_percent" |tee -a /var/log/mem.log
elseecho "$(date +%Y%m%d%H%M%S) $(hostname) 内存使用率没有超过70% 目前的值是 $used_percent" 
fi
[root@rocky-2 shell]# bash monitor_mem.sh 
总的内存是 7553MB 目前系统已经使用了 7.13%
20250708171540 rocky-2 内存使用率没有超过70% 目前的值是 7.13

使用awk进行内存使用率的计算

[root@rocky-2 shell]# free -m|awk 'NR==2{printf "%.2f%%\n",$3/$2*100}'
6.65%


2.4 查找出使用内存最高的10个进程

ps -aux --sort -%mem|head
ps -A -o pid,%mem,command --sort -%mem|head


三、磁盘

3.1 查看磁盘信息

df -Th 查看磁盘里已经挂载的分区的使用的情况

iostat 查看磁盘读写的速度

iostat -x 2 5
-x 显示扩展统计信息
2表示间隔时间
5表示迭代显示5次
在这里插入图片描述
%util :繁忙度

sar -d 监控磁盘 I/O 性能

fdisk -l 查看磁盘分区


3.2 测试磁盘性能

dd 是一个数据备份的命令

dd if=/dev/zero of=sc.dd bs=1M count=1000

if input file 输入文件
/dev/zero 会产生零 0
of output file 输出文件
bs=1M 数据单元
count=1000 数量


四、网络流量

dstat 实时监控

在这里插入图片描述

glances 以交互式仪表盘的形式实时展示系统的 CPU、内存、磁盘、网络、进程等全方位性能指标

在这里插入图片描述

nethogs 查看某个进程消耗了多少流量


五、进程

5.1 查看进程

ps aux
top/htop
pstree
sar
lsof -i:22
lsof -p 25889

查看进程内存映射关系

[root@rocky-2 ~]# pmap 25889
25889: nginx: master process nginx
000055b7b1bce000 140K r---- nginx
000055b7b1bf1000 816K r-x-- nginx
000055b7b1cbd000 228K r---- nginx
000055b7b1cf6000 8K r---- nginx
000055b7b1cf8000 96K rw— nginx
000055b7b1d10000 124K rw— [ anon ]
000055b7b3810000 376K rw— [ anon ]
00007fb473a00000 160K r---- libc.so.6
00007fb473a28000 1492K r-x-- libc.so.6
00007fb473b9d000 352K r---- libc.so.6
00007fb473bf5000 16K r---- libc.so.6


5.2 杀死进程

kill

-15 默认的信号
15) SIGTERM 让进程自我终结

-9 告诉内核去强制杀死某个进程
9) SIGKILL

1) SIGHUP 父进程退出,会给子进程发HUP信号,内核去杀死所有 的收到hup信号的进程

屏蔽hup信号 nohup

nohup bash while.sh &
[1] 125508

根据名字杀死所有进程
pkill -9 vim
killall -9 vim

根据终端号来杀死进程
pkill -9 -t pts/0


5.3 让进程在后台运行

vim feng.txt &

在命令后使用 & 让程序在后台运行

查看当前终端有多少个进程在后台执行

[root@rocky-2 shell]# jobs
[1]+ 已停止 vim feng.txt

将后台运行的第1个进程调入前台运行
[root@rocky-2 shell]# fg 1 # foreground
vim feng.txt


全能命令

sar -u -r -d 1 5 -n DEV
sar:系统活动报告工具,用于收集和展示系统性能数据

  • -u:监控 CPU 使用率
  • -r:监控 内存和交换分区 使用情况
  • -d:监控 磁盘 I/O 性能(
  • 1 5:每 1 秒输出一次统计数据,共输出 5 次(
  • -n DEV:监控 网络接口流量

glances 跨平台的高级系统监控工具,它以交互式仪表盘的形式实时展示系统的 CPU、内存、磁盘、网络、进程等全方位性能指标,相比 top、htop 等工具更直观、功能更全面,支持本地和远程监控

dstat 是一款功能强大的系统性能监控工具,它整合了 vmstat、iostat、netstat 等传统工具的功能,支持实时监控 CPU、内存、磁盘 I/O、网络等多项系统指标,且输出格式更直观、灵活


总结

监控的核心价值是 “通过数据驱动,实现对被监控对象的可控性”—— 从实时状态感知到故障快速解决,从风险提前预警到资源优化配置,最终保障业务稳定运行、降低损失、提升效率,是现代 IT 系统和业务运营中不可或缺的一环

http://www.dtcms.com/a/317895.html

相关文章:

  • 如何测试一个机器是大端还是小端
  • cocos Uncaught TypeError: Cannot read properties of null (reading ‘SetActive‘)
  • 达梦数据库日常运维命令
  • Node.js从入门到精通完整指南
  • 查看ubuntu server 的基本信息
  • 【DeepID】《Deep Learning Face Representation from Predicting 10,000 Classes》
  • 项目中使用的设计模式
  • GPT-OSS 与 Ollama 完整安装使用教程
  • 如何自动生成 API 接口文档 - 一份详细指南
  • 强强联合:OpenAI正式登陆AWS!
  • 基于AI的自动驾驶汽车(AI-AV)网络安全威胁缓解框架
  • Windows 如何上架 iOS 应用?签名上传全流程 + 工具推荐
  • 跨过BI,企业能直接用AI实现数据分析吗?
  • Template 显式实例化 隐式实例化
  • Ethereum: 用Python链上查询 Uniswap V3 ETH/USDC 资金池资产
  • 云手机的应用场景较为广泛,主要包括以下几个方面:
  • C++ - 仿 RabbitMQ 实现消息队列--服务器模块实现
  • NAT转化
  • 单变量单步时序预测:CNN-BiGRU卷积神经网络结合双向门控循环单元
  • 从 “认知优势” 到现实赋能:DPVR AI Glasses 重构智能穿戴价值
  • 飞算JavaAI开发平台:重构开发全流程——从需求到工程的智能化跃迁
  • coze1-podman容器化部署coze
  • Kafka-exporter采集参数调整方案
  • npm scripts 使用指南
  • 快手AI团队开源 KAT (Kwaipilot-AutoThink) 思考模型
  • 【ROS1】13-元功能包
  • electron:vue3+vite打包案例
  • 从零搭建React框架--第一章:create-react-app、antd、less
  • LAS平台Vibe Data Processing:AI驱动的数据处理新范式
  • Chrontel昆泰-【CH7036A-BF】CH7036 LVDS to HDMI/VGA/LVDS Converter