linux-系统性能监控

linux-系统性能监控

  • 一、cpu
    • [1.1 查看cpu的信息](#1.1 查看cpu的信息)
    • [1.2 cpu性能指标](#1.2 cpu性能指标)
    • [1.3 编写监控cpu使用率的脚本](#1.3 编写监控cpu使用率的脚本)
    • [1.4 查找出使用cpu最高的10个进程](#1.4 查找出使用cpu最高的10个进程)
  • 二、内存
    • [2.1 查看内存信息](#2.1 查看内存信息)
    • [2.2 交换(swap)分区](#2.2 交换(swap)分区)
      • [2.2.1 查看交换分区的积极程度](#2.2.1 查看交换分区的积极程度)
      • [2.2.2 查看交换分区的大小](#2.2.2 查看交换分区的大小)
      • [2.2.3 管理交换分区](#2.2.3 管理交换分区)
    • [2.3 编写获取内存使用率的脚本](#2.3 编写获取内存使用率的脚本)
    • [2.4 查找出使用内存最高的10个进程](#2.4 查找出使用内存最高的10个进程)
  • 三、磁盘
    • [3.1 查看磁盘信息](#3.1 查看磁盘信息)
    • [3.2 测试磁盘性能](#3.2 测试磁盘性能)
  • 四、网络流量
  • 五、进程
    • [5.1 查看进程](#5.1 查看进程)
    • [5.2 杀死进程](#5.2 杀死进程)
    • [5.3 让进程在后台运行](#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
bash 复制代码
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个字段 ```shell [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 ));then echo "$(date +%Y%m%d%H%M%S) $(hostname) cpu使用率是 ${cpu_used_num}%" |tee -a /var/log/monitor_cpu.log else echo "$(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 ```bash [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 中的所有交换区 ```bash [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 ```shell [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 ));then echo "$(date +%Y%m%d%H%M%S) $(hostname) 内存使用率超过70% 目前的值是 $used_percent" |tee -a /var/log/mem.log else echo "$(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次 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f905af08cb214a509ab24ba88b98da08.png) %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` 实时监控 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dca93ceb799a4a709e935fd5ec245f2e.png) `glances` 以交互式仪表盘的形式实时展示系统的 CPU、内存、磁盘、网络、进程等全方位性能指标 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c58898b6d09c4c409f909b3b22b4c8b2.png) `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 默认的信号

  1. SIGTERM 让进程自我终结

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

  1. SIGKILL

  2. 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 系统和业务运营中不可或缺的一环

相关推荐
久念祈17 分钟前
C++ - 仿 RabbitMQ 实现消息队列--服务器模块实现
服务器·分布式·rabbitmq
孙克旭_24 分钟前
day068-DevOps基本知识与搭建远程仓库
linux·运维·devops
失因39 分钟前
Linux systemd 服务管理与 Firewall 防火墙配置
linux·运维·服务器·centos·apache
木尧大兄弟1 小时前
linux创建虚拟内存
java·linux·服务器
wanhengidc1 小时前
云手机的应用场景较为广泛,主要包括以下几个方面:
运维·服务器·安全·智能手机
会飞的灰大狼2 小时前
MySQL主从复制部署
linux·mysql·ubuntu·centos7
ZZZKKKRTSAE2 小时前
RHCE认证题解
linux·运维·服务器·ansible·rhce·rhel9·红帽
Lbwnb丶2 小时前
openssl创建公钥私钥 pem+ der
linux·运维·服务器
❀͜͡傀儡师2 小时前
达梦数据库日常运维命令
运维·数据库