系统性能监控(1)

系统性能监控(1)

抛出几个问题

系统性能监控是什么?

monitor监控
系统性能监控是一种技术,它通过监视计算机系统中的各种指标(如CPU利用率、内存使用情况、磁盘I/O等)来评估系统的性能。这种监控可以帮助管理员和开发人员识别系统中的瓶颈和问题,并采取相应的措施来改进系统的性能。系统性能监控通常涉及使用各种工具和技术来收集、分析和可视化系统指标。

怎么看系统忙还是不忙呢?看哪些指标?

1.cup —》top

2.memory 内存 ----》top

3.磁盘 (容量,IO速度(就是读写速度))

4.网络 (流量带宽) --》100Mb/s ,1000Mb/s

5.服务 (进程,端口) --> ps aux|grep sshd 看进程, ss -anplut|grep sshd 看端口号

监控的意义是什么呢?

1.保障维持业务的正常运行

2.防范事故于未然

TOP(重头戏)

基本了解

top 命令是一个实时的进程监视器,它能够显示系统中各个进程的资源占用情况,包括CPU占用率、内存占用率、进程数、用户数、负载等信息。在 Linux 系统中,top 命令是一个非常常用的工具之一。

** top命令的基本语法**
top [options]
top命令的使用

1.按q是退出 quit

2.按数字 1 查看cpu每个核的使用率

M:根据驻留内存大小进行排序; memory

P:根据CPU使用百分比大小进行排序; processer

[root@sc-mysql-master ~]# top -p 33638 指定监控某个进程

shift + <或> 根据其他的列来排序

h 查看帮助

[root@gaohui shell] top -d 3 指定每次延迟间隔的时间为1.5s

[root@gaohui shell] top -p 1 只看一行进程
** top命令的常用参数**
  • -d seconds:指定 top 命令的更新时间间隔,也就是多久更新一次,默认是 3 秒。
  • -u username:只显示指定用户名的进程信息。
  • -p pid1,pid2,…:只显示指定进程 ID 的进程信息。
  • -c:显示完整的命令行。
  • -H:显示进程的线程信息。
  • -i:不显示闲置的进程。
  • -n number:设置 top 命令要显示的进程数量。
  • -o field:按指定字段进行排序,可以使用多个 -o 参数来进行多级排序。
  • -b:以批处理模式运行 top 命令,只输出一次,适用于写入文件或脚本使用。
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 是什么意思?

这是一段系统性能监控的输出,表示系统在某个时间点(通常是1秒钟)内CPU的使用情况。具体地,%Cpu0表示CPU0的使用情况,而us、sy、ni、id、wa、hi、si和st则分别表示CPU时间的使用情况占比,具体含义如下:

  • us:表示CPU花费在用户程序上的时间占比。也就是说,us表示用户态程序运行所占用的CPU时间百分比。
  • sy:表示CPU花费在内核程序上的时间占比。也就是说,sy表示内核态程序运行所占用的CPU时间百分比。
  • ni:表示CPU花费在用户进程的优先级较低的执行队列上的程序上的时间占比。也就是说,ni表示nice值较高的进程所占用的CPU时间百分比。
  • id:表示CPU空闲时间占比。也就是说,id表示CPU空闲所占用的CPU时间百分比。
  • wa:表示CPU花费在等待I/O完成上的时间占比。也就是说,wa表示CPU等待I/O操作完成所占用的CPU时间百分比。
  • hi:表示CPU花费在处理硬件中断上的时间占比。也就是说,hi表示处理硬件中断所占用的CPU时间百分比。
  • si:表示CPU花费在处理软件中断上的时间占比。也就是说,si表示处理软件中断所占用的CPU时间百分比。
  • st:表示CPU花费在处理由于虚拟化而导致的调度延迟上的时间占比。也就是说,st表示处理由于虚拟化而导致的调度延迟所占用的CPU时间百分比。 在上述输出中,%Cpu0: 0.0 us, 0.0 sy, 0.0 ni, 100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st表示CPU0在这1秒钟内没有执行任何用户程序、内核程序、nice值较高的进程、硬件中断、软件中断和虚拟化调度延迟,而是空闲状态。因此,id的值为100.0。

注意,简单来说:
sy+id 就是cpu的使用率

top命令统计cpu使用率的时候,

us表示user 用户态的进程所消耗的cpu的资源

sy表示system 内核态的进程锁消耗的cpu的资源

当mysqld进程进行读写操作的时候,调用系统调用,例如:read()、write()、fork()等 系统调用就是操作系统给其他应用程序的接口,也是实现某个功能的程序。

按数字1可以看到有几颗核心

1.按q是退出 quit

2.按数字 1 查看cpu每个核的使用率

M:根据驻留内存大小进行排序; memory

P:根据CPU使用百分比大小进行排序; processer

[root@sc-mysql-master ~]# top -p 33638 指定监控某个进程

shift + <或> 根据其他的列来排序

h 查看帮助

IOPS: number of input output per second 每秒钟对磁盘进行读写的次数

涉及到一个概念,进程

进程由:pcb+代码+data数据组成

PCB是操作系统中用于管理进程的数据结构。

PCB是进程控制块

pcb是进程号

一个进程(Process)通常由以下几部分组成:

  1. 程序代码:指进程需要执行的指令和代码,通常存储在二进制可执行文件中。
  2. 数据区域:指进程需要使用的全局变量、静态变量、常量以及动态分配的内存等数据。
  3. 栈区域:指进程中的函数调用所需要的内存空间,主要用于保存函数的参数、局部变量以及函数返回值等信息。
  4. 堆区域:指进程中需要动态分配的内存空间,用于存储进程运行时动态申请的内存。
  5. 进程上下文:指进程中的一些基本信息,如进程ID、进程状态、进程优先级、CPU时间片、打开的文件描述符、环境变量、信号和信号处理方式等。
  6. 资源:指进程使用的硬件和软件资源,如CPU、内存、磁盘、网络等。 进程是计算机系统中最基本的执行单位,通过进程的多任务处理能力,计算机可以同时执行多个程序,提高系统的效率和资源利用率。

穿插点其他知识

怎么看内存?

[root@gaohui ~] free -m
              total        used        free      shared  buff/cache   available
Mem:           3770         232        3404          11         134        3348
Swap:          2047           0        2047
[root@gaohui ~]# 
看网络流量
[root@gaohui ~] yum install dstat -y   //安装这个
[root@gaohui ~] dstat -anm  //cpu的使用率  磁盘的读写  内存的读写
Terminal width too small, trimming output.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system-- -net/total->
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw | recv  send>
  0   0 100   0   0   0|  97k   78k|   0     0 |   0     0 |  91   167 |   0     0 >
  0   0 100   0   0   0|   0     0 |  60B  994B|   0     0 |  54    85 |  60B  994B>
  0   0 100   0   0   0|   0     0 |  60B  394B|   0     0 |  55    90 |  60B  394B>
glances
[root@gaohui ~] yum install glances -y
[root@gaohui ~] yum install epel-release -y  //安装了epel源才能用 glances
[root@gaohui ~] glances //输入这个就能看了 全能的命令
查看进程
top
ps aux
ps aux |grep sshd  //例子
查看端口号
[root@gaohui ~] netstat -anplut
查看cup的信息
[root@gaohui ~] lscpu
[root@gaohui ~] cat /proc/cpuinfo
怎么看当前有多少个用户登陆

按 w

深入讲解TOP命令

top - 13:46:54 up  1:17,  3 users,  load average: 0.00, 0.01, 0.05
  1. 时间13:46:54 表示当前机器的时间

  2. up 表示开机多久了 1:17 ---->一个小时 17分钟了

  3. 3 users 表示目前有三个用户在登陆

  4. load average 平均负载


Tasks: 113 total,   1 running, 112 sleeping,   0 stopped,   0 zombie

Tasks表示进程

分析上边那句话,总共有113个进程 1个在跑 112个在睡觉 0个停止 0个僵尸进程
running-----》在cpu里运行

sleeping -----》就绪和阻塞

stoped —》暂停/挂起

zombie ----》僵死状态,僵尸进程

在top命令的输出中,running状态下的进程通常会显示它的CPU使用率和内存使用情况。如果一个进程长时间处于running状态,说明它正在执行复杂的计算任务或者IO操作,可能会导致系统的负载增加,需要关注和优化。

什么是僵尸进程和孤儿进程?

官方一点的解释是:

当一个进程完成了它的工作,但是它的父进程没有及时调用wait()等函数来回收该子进程的资源,那么这个子进程就会变成僵尸进程。僵尸进程不占用CPU资源,但是会占用系统的内存资源。如果一个系统中存在大量的僵尸进程,那么会导致系统的性能下降。

孤儿进程是指父进程意外终止或者被杀死,而它的子进程还在继续运行。此时,这个子进程就变成了孤儿进程。孤儿进程会被init进程接管,并成为init进程的子进程。init进程会周期性地检查是否有孤儿进程,如果有,则回收该进程的资源。

通俗点的说法:

子进程退出,父进程没有使用wait()系统调用去回收子进程的pcb,导致子进程的信息仍然在内核空间里消耗了内存空间,死而不化像僵尸一样存在。

孤儿进程是指其父进程已经退出或者异常终止,而该进程却还在运行的进程。孤儿进程没有父进程来管理它,通常由init进程来接管它。孤儿进程的存在可能会占用系统资源,因此需要及时处理,以保证系统的稳定性和安全性。

怎么知道机器里有哪些信号类型?

kill -l

signal 信号

信号:进程和进程之间通信的方式

hup信号的作用:告诉内核杀死session相关的子进程

进程: 查看/杀死

pstree -p

ps aux

echo $$

kill -9

怎么清除僵尸进程

如果该父进程没有及时处理僵尸进程,可以使用kill命令强制结束该父进程,命令格式如下:

kill -9 <父进程ID>

使用kill命令向该父进程ID发送SIGCHLD信号,命令格式如下:

kill -s SIGCHLD <父进程ID>

函数,系统调用

fork()

wait()

exit()

gitpid()

fork(): 在Linux中,fork()函数用于创建一个新的进程,新进程称为子进程,原有进程称为父进程。子进程是原有进程的副本,包括进程内存、上下文等,但是有自己的独立进程ID(PID)和内存空间。fork()函数返回两次,一次在父进程中返回子进程的PID,一次在子进程中返回0。

wait(): 在Linux中,wait()函数用于等待子进程结束并获取子进程的退出状态。当一个子进程结束时,它会向父进程发送一个信号,父进程可以通过wait()函数捕获该信号,并获取子进程的退出状态。如果父进程在子进程结束前调用wait()函数,则父进程会被阻塞,直到子进程结束并返回退出状态。

exit(): 在Linux中,exit()函数用于结束当前进程。调用exit()函数会导致当前进程的资源被释放,包括内存、文件描述符等。同时,会向父进程发送一个退出状态码,告诉父进程当前进程的执行结果。

getpid(): 在Linux中,getpid()函数用于获取当前进程的PID(进程ID)。每个进程都有一个唯一的PID,可以通过PID来区分不同的进程。在Linux中,PID从1开始,1号进程是init进程,是所有进程的祖先进程。

load average

load average(负载平均值)是用来衡量系统负载的指标,通常用于 Linux 和 Unix 系统中。它是指在一段时间内,系统的平均活跃进程数,也就是正在使用 CPU 或者等待 CPU 时间的进程数。

load average: 0.00, 0.01, 0.05 0.00, 0.01, 0.05

这三个表示 过去1分钟 5分钟 15分钟 的系统负载

1,5,15分钟的ready和running队列里的进程的平均数量

每时每刻超过1个进程,就说明cpu很忙了

过去的1,5,15系统的负载,进程在各个队列里的数量

load average 和 cpu 相关

interrupt 中断

平均负载:

​ 最标准的说法:

​ 超过1就很忙(1个cpu核心)

​ 4个cpu核心 4

​ 32个cpu核心 32

​ 非标准说法:

​ 1个cpu核心 <5说明系统很忙了,但还可以接收

​ 4个cpu核心 <4*5 <20 说明系统很忙,但还可以接收

进程会消耗cpu,内存,磁盘IO,网络IO

上下文切换---->context Switch 和中断配合(interrupt)

中断分软中断和硬中断

在cpu里切换

先出去才能进来

1个进程进去,一个出来。

上下文切换是指在操作系统中,当CPU从一个进程或线程切换到另一个进程或线程时,需要保存当前进程或线程的状态(也称为上下文),并加载下一个进程或线程的状态,以便能够继续执行该进程或线程。上下文包括寄存器、栈指针、程序计数器等,它们记录了进程或线程当前的执行状态。

当操作系统需要切换进程或线程时,它需要保存当前进程或线程的上下文,并加载下一个进程或线程的上下文。这个过程称为上下文切换。上下文切换是一项开销较大的操作,因为需要保存和恢复大量的状态信息,导致CPU的利用率降低。因此,减少上下文切换是优化操作系统性能的一个重要手段。

查看进程的工具总结:

[root@gaohui ~] ps -o ppid,user,pid,command
  PPID USER        PID COMMAND
  2746 root       2748 -bash
  2748 root       2896 ps -o ppid,user,pid,command
[root@gaohui ~]# 

top

ps aux

ps -ef

ps -o ppid,user,pid,command

pstree

kill

kill命令

kill只能根据信号+进程号才能杀死

killwall + 信号 + 名字 根据名字来杀

pkill 可以根据终端号来杀死

pkill -t pts/3 -9

查看哪个进程在哪个cpu里运行

top---->f---->P—>空格选择-q

ps -eo pid,%cpu,%mem,psr,command

猜你喜欢

转载自blog.csdn.net/investor_/article/details/130785600