系统性能监控(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)通常由以下几部分组成:
- 程序代码:指进程需要执行的指令和代码,通常存储在二进制可执行文件中。
- 数据区域:指进程需要使用的全局变量、静态变量、常量以及动态分配的内存等数据。
- 栈区域:指进程中的函数调用所需要的内存空间,主要用于保存函数的参数、局部变量以及函数返回值等信息。
- 堆区域:指进程中需要动态分配的内存空间,用于存储进程运行时动态申请的内存。
- 进程上下文:指进程中的一些基本信息,如进程ID、进程状态、进程优先级、CPU时间片、打开的文件描述符、环境变量、信号和信号处理方式等。
- 资源:指进程使用的硬件和软件资源,如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
时间13:46:54 表示当前机器的时间
up 表示开机多久了 1:17 ---->一个小时 17分钟了
3 users 表示目前有三个用户在登陆
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