系统资源查看方法

系统配置查看

uname  -a   ---查看系统内核版本

cat  /etc/redhat-release    ---查看centos系统版本

    

 

cat  /proc/cpuinfo   ---查看CPU信息

lscpu    ---查看cpu信息

 

 

free  -h   ---查看内存,total表示总量,used表示进程的占用量,buff/cache 缓冲区、缓存占有量

 

 

df  -h    ---查看磁盘

fdisk  -l    

lsblk

 

 

 

 

cd /proc/

ls

mount   ---可见到/proc的挂载

注意  系统开机时,所有的硬件设备信息、状态,都记录在/proc/目录下  实质是在内存中的,

/proc 目录是在内存中开辟了一块空间,制作文件系统使用的,称为伪文件系统

 

 

 

cpu性能查看

sar  1  3   ---查看CPU使用率,1秒显示一次,共显示三次,重点显示6项信息

 

注意 注释

%user     用户进程占cpu的比例,可代表服务进程

%nice    被更改优先级的进程占CPU的比例

%system   系统进程占cpu的比例

%iowait   等待读写的进程占cpu的比例

%steal   被偷盗的CPU资源比例,被虚拟机占用的cpu资源,成为偷盗资源

%idle     CPU空闲率

 

公式:%idle=100%  -  其他五项

 

分析:

%user高,表示用户进程占用较高,说明是服务进程增多,应该是访问、业务量增长造成

%iowait高表示读写压力较大,可能有磁盘故障

 

%system    %user   %iowait   %idle

正常  <10%      30%+-   <10%     60%+-

警告  50%+-  或 30%+-   <40%

故障  70%+-  或 50%+-   <20%

 

 

iostat   ---查看读写速率

uptime ---查看CPU各核的平均负载(load average),显示的是:最近1min  5min  15min 时间内的平均负载

平均负载:cpu每个core上平均承载的线程数,

公式:当前要运行的线程数 / core 数 = 平均负载值

 

进阶解释: 

cpu的工作原理:

1.一颗cpu内可以有多个处理芯片,称为core。每个core若开启了cpu虚拟化技术(vtd),一个core可以虚拟成两个core的工作状态,称为一核双线程,即可以同时运行两个任务

cpu虚拟后双线程也可以视为core。如:双核四线程的cpu,可视为是4core状态

 

cpu的每个core运行线程时,会把线程放入运行队列中,若队列中有多个线程待运行,则core就会给队列中的每个线程分配时间片,依次运行。

 

具体原理:

一个core会把要运行的多个线程放入队列中,称为运行队列或就绪队列

core会从队列中提取出第一个线程,运行一个固定的时间,称为一个时间片

时间片到期后,若该线程未能运行完毕,也要暂停放入队列尾

提取队列中第二个线程入core执行,同样运行一个时间片的时间后,放入队列尾,再提取下一个。

以此类推。

线程在运行过程中,若有读写需求,在读写完毕前是不会继续执行的,此线程将被暂停,放入等待队列

待条件满足后再转回运行队列。

 

core中正在运行的线程,若当前有一个优先级更高的线程需要紧急运行,即便正在运行的线程的时间片未到也会被打断,放入队列尾core转去运行高优先级的线程若两个线程优先级对等,则放入队列首位。

 

平均负载值:正常 0.7-1   警告 1.2-1.5 压力略大     压力较大 >2    

解决方案:说明单机上开启的业务、服务较多,需要做业务、服务转移

 

sar  -q  1  2  ---查看CPU队列信息,会显示运行队列中的任务数,总进程数等

 

内存查看

free  -h

 

sar  -q   1  2 

sar  -r   1  3   ---查看内存使用率

sar  -W  1  3   ---查看swap空间的读写速度

 

   正常     警告    故障

内存     40%+-   70%+-   90%+-

swap    10%+-   30%+-   50%+-

 

进程基本管理

ps   ---查看当前终端下的进程

ps  -aux    ---查看本机所有进程,显示11列信息

 

第一列   用户名,即该进程由哪个用户启用

第二列   PID,进程ID号,

第三列   CPU的比例

第四列   占内存的比例

第五列   swap空间的大小

第六列   占内存空间的大小

第十一列  进程名

 

 

ps  -aux  |  grep  httpd    ---抓取所有web服务进程

ps  -aux   |  grep  httpd  | wc  -l   ---统计进程数

ps   -aux |  sort  -rn  -k  3  |  head  -n  10     ---显示占CPU最高的前10个进程

ps   -aux |  sort  -rn  -k  3  |  tail

Head 默认为前十个

Tail为后十个

 

 

 

ps -ef   ---查看本机所有进程,可见到父进程ID,即PPID

pstree   ---查看进程树,即完整的父子进程调用关系表

yum -y install psmisc--安装进程树的数据包

 

 

 

kill  -9   PID   ---杀死进程

killall  -9   进程名    ---同时杀死多个同名进程

注:pstree 和 killall命令 要提前安装psmisc 软件包才可使用

 

总结分析

系统运行慢 

1.查看对象cpu、内存、进程

2.cpu命令sar  

3.看空闲率 =>%user   

%iowait=>若%user高,

业务相关=>查看内存高、业务进程数高  

 

ps -aux | grep  httpd=>考虑集群扩建

cpu正常,查内存:高,查进程,看有无泄漏或僵尸

 

查看系统综合性能参数

top   ---实时显示系统性能,3s刷新一次 

 

uptime命令的 第一行相同

第二行显示僵尸进程

 

C键  按占CPU比例排序显示进程

M键  按占内存比例排序显示进程

k键  杀死进程,点击后,输入PID

q键  退出

 

vmstat   ---查看综合性能参数

vmstat 1  3

 

僵尸进程

一个进程,卡死在内存中,不执行,但也不退出

父子进程调用,一方异常关闭,造成另一个方无法正常完成,从而成为僵尸进程

 

查看僵尸进程

方式一:

ps  -aux   ---显示的第八列,进程状态列,显示有Z字母的,表示为僵尸进程

ps  -aux  |  awk  '$8 ~ /[Zz]/  {print  $1,$2,$4,$8,$11}'    ---抓取显示僵尸进程

 

方式二:

ps  -ef  |  grep  defunct    ---抓取显示僵尸进程

说明: -ef 查看时,僵尸进程会在进程名后面加 <defunct> 标记

 

kill  -9   PID  抓取到后杀死僵尸进程

 

内存故障

内存溢出

原因:在内存中开辟的空间,存入了超出最大值的数据;定义了一组变量,提取变量值时,超出了这一组的个数范围

现象:软件进程卡死,甚至造成死机

解决:多次观察软件卡死的位置,同一个位置或同一个操作都会发生卡死,即发现bug点,可能是由于溢出造成的 上报开发,调试bug

内存泄漏

原因:进程运行完毕,不释放内存,下次运行,占据新的内存,造成进程持续增长内存占有率。

现象:系统慢CPU使用率正常,进程数、连接数正常,内存使用率虚高

确定:ps | sort 查看占内存最高的进程,查找占内存接近20%的进程,为怀疑对象

写脚本,每10min记录占内存最多的前10个进程,持续2-3个小时,然后查看记录日志,查看哪个进程每隔几次,内存占有量递增

解决:上报,反馈甲方,通知开发调试bug,申请卸载、降级,或者建立服务集群,轮流重启,直到开发部门解决完毕

 

内存抖动

原因:

由于物理内存空间不足内存使用率较高,则暂停、挂起、等待进程会被转存入swap空间

进程从内存转入swap的过程,称为“换出

等待进程条件满足,需要执行,则从swap中转回物理内存,该过程被称为“换入”

进程频繁的换入换出,称为抖动

现象:系统慢,内存使用率高70%+,swap空间使用率高30%+

解决:上报,可能是由于甲方新增软件或软件升级造成,申请卸载、降级;或者申请增加物理内存,扩容swap

 

僵尸进程

原因:父子进程调用,一方异常关闭,另一方无法正常完成,造成卡死状态

现象:内存使用率略高60%+,发现有进程长期占据内存,且占有量、占有率不变

解决:ps  -ef  |  grep  defunct  抓取后做记录,再杀死。若发现有软件经常会产生僵尸进程,应该反馈给开发

 

IPC进程间通信

原因:运行一个进程,将在内存中开辟一块空间,作为本进程的专用。进程和进程所占的内存空间之间不可以做数据传输的

进程之间也不可以相互访问对方的内存空间。所以说进程的内存空间是独占的

但是,程序再运行过程中,是有进程之间数据交互的需求的,所以使用IPC技术实现进程之间的数据传递

进程内的线程,是公用进程所占的内存空间,允许线程间相互访问,并动态调度、调整

方式:

管道   |

在内存中开辟一块临时空间,做管道使用,前进程把运行结果放入管道中,后进程从管道中获取数据,传递完毕后,管道撤销

功能:前进程的运行结果传递给后进程作为输入使用

特点仅传递结果数据传递一次,数据只能被读取一次

如:ll  /etc/   |  less

 

共享内存

功能:进程运行过程中的数据传输给其他进程

在内存中开辟一块空间,前进程把数据存入该空间,后进程从空间中读取,存入的数据允许被多次读取使用

共享内存的空间也是长期存在的,直到两个进程都运行结束才撤销

通过调用系统提供的API(应用接口,即函数)完成内存空间的申请和数据存取。

 

信号sign             

功能:一个进程控制另一个进程的状态,靠信号

原理:一个进程给另一个进程增加一个状态信号,CPU根据信号的值,对进程做出相应的处理

命令:

kill  -l  ---查看所有的可用信号值

kill   -9   PID    ---杀死进程

kill   -3   PID    ---退出运行,会携带内存数据返回,

一般开发人员使用 -3信号,获取进程运行数据,调试bug

kill   -19  PID    ---停止挂起,相当于 ctrl+z

kill   -18  PID    ---继续运行,相当于 fg、bg

 

消息队列

功能:用于记录进程的运行状态

原理:当多个进程要同时访问同一个文件或设备时,尤其是在要同时做写操作时,会产生排他性。

即不允许多个进程对同一文件或设备同时做写操作,就会产生写操作的排队。后进程必须等前进程写操作完毕,才能写入

前进程会把自己的状态记录到消息队列中,后进程通过消息队列发现前进程执行完毕,即可开始写操作

 

socket套接字

功能:网络主机之间的进程传输、访问,用socket套接字

组成ip+port

原理:一台主机上的进程通过对方主机上的ip和port,识别、寻址到对方主机上的进程

系统配置查看

uname  -a   ---查看系统内核版本

cat  /etc/redhat-release    ---查看centos系统版本

    

 

cat  /proc/cpuinfo   ---查看CPU信息

lscpu    ---查看cpu信息

 

 

free  -h   ---查看内存,total表示总量,used表示进程的占用量,buff/cache 缓冲区、缓存占有量

 

 

df  -h    ---查看磁盘

fdisk  -l    

lsblk

 

 

 

 

cd /proc/

ls

mount   ---可见到/proc的挂载

注意  系统开机时,所有的硬件设备信息、状态,都记录在/proc/目录下  实质是在内存中的,

/proc 目录是在内存中开辟了一块空间,制作文件系统使用的,称为伪文件系统

 

 

 

cpu性能查看

sar  1  3   ---查看CPU使用率,1秒显示一次,共显示三次,重点显示6项信息

 

注意 注释

%user     用户进程占cpu的比例,可代表服务进程

%nice    被更改优先级的进程占CPU的比例

%system   系统进程占cpu的比例

%iowait   等待读写的进程占cpu的比例

%steal   被偷盗的CPU资源比例,被虚拟机占用的cpu资源,成为偷盗资源

%idle     CPU空闲率

 

公式:%idle=100%  -  其他五项

 

分析:

%user高,表示用户进程占用较高,说明是服务进程增多,应该是访问、业务量增长造成

%iowait高表示读写压力较大,可能有磁盘故障

 

%system    %user   %iowait   %idle

正常  <10%      30%+-   <10%     60%+-

警告  50%+-  或 30%+-   <40%

故障  70%+-  或 50%+-   <20%

 

 

iostat   ---查看读写速率

uptime ---查看CPU各核的平均负载(load average),显示的是:最近1min  5min  15min 时间内的平均负载

平均负载:cpu每个core上平均承载的线程数,

公式:当前要运行的线程数 / core 数 = 平均负载值

 

进阶解释: 

cpu的工作原理:

1.一颗cpu内可以有多个处理芯片,称为core。每个core若开启了cpu虚拟化技术(vtd),一个core可以虚拟成两个core的工作状态,称为一核双线程,即可以同时运行两个任务

cpu虚拟后双线程也可以视为core。如:双核四线程的cpu,可视为是4core状态

 

cpu的每个core运行线程时,会把线程放入运行队列中,若队列中有多个线程待运行,则core就会给队列中的每个线程分配时间片,依次运行。

 

具体原理:

一个core会把要运行的多个线程放入队列中,称为运行队列或就绪队列

core会从队列中提取出第一个线程,运行一个固定的时间,称为一个时间片

时间片到期后,若该线程未能运行完毕,也要暂停放入队列尾

提取队列中第二个线程入core执行,同样运行一个时间片的时间后,放入队列尾,再提取下一个。

以此类推。

线程在运行过程中,若有读写需求,在读写完毕前是不会继续执行的,此线程将被暂停,放入等待队列

待条件满足后再转回运行队列。

 

core中正在运行的线程,若当前有一个优先级更高的线程需要紧急运行,即便正在运行的线程的时间片未到也会被打断,放入队列尾core转去运行高优先级的线程若两个线程优先级对等,则放入队列首位。

 

平均负载值:正常 0.7-1   警告 1.2-1.5 压力略大     压力较大 >2    

解决方案:说明单机上开启的业务、服务较多,需要做业务、服务转移

 

sar  -q  1  2  ---查看CPU队列信息,会显示运行队列中的任务数,总进程数等

 

内存查看

free  -h

 

sar  -q   1  2 

sar  -r   1  3   ---查看内存使用率

sar  -W  1  3   ---查看swap空间的读写速度

 

   正常     警告    故障

内存     40%+-   70%+-   90%+-

swap    10%+-   30%+-   50%+-

 

进程基本管理

ps   ---查看当前终端下的进程

ps  -aux    ---查看本机所有进程,显示11列信息

 

第一列   用户名,即该进程由哪个用户启用

第二列   PID,进程ID号,

第三列   CPU的比例

第四列   占内存的比例

第五列   swap空间的大小

第六列   占内存空间的大小

第十一列  进程名

 

 

ps  -aux  |  grep  httpd    ---抓取所有web服务进程

ps  -aux   |  grep  httpd  | wc  -l   ---统计进程数

ps   -aux |  sort  -rn  -k  3  |  head  -n  10     ---显示占CPU最高的前10个进程

ps   -aux |  sort  -rn  -k  3  |  tail

Head 默认为前十个

Tail为后十个

 

 

 

ps -ef   ---查看本机所有进程,可见到父进程ID,即PPID

pstree   ---查看进程树,即完整的父子进程调用关系表

yum -y install psmisc--安装进程树的数据包

 

 

 

kill  -9   PID   ---杀死进程

killall  -9   进程名    ---同时杀死多个同名进程

注:pstree 和 killall命令 要提前安装psmisc 软件包才可使用

 

总结分析

系统运行慢 

1.查看对象cpu、内存、进程

2.cpu命令sar  

3.看空闲率 =>%user   

%iowait=>若%user高,

业务相关=>查看内存高、业务进程数高  

 

ps -aux | grep  httpd=>考虑集群扩建

cpu正常,查内存:高,查进程,看有无泄漏或僵尸

 

查看系统综合性能参数

top   ---实时显示系统性能,3s刷新一次 

 

uptime命令的 第一行相同

第二行显示僵尸进程

 

C键  按占CPU比例排序显示进程

M键  按占内存比例排序显示进程

k键  杀死进程,点击后,输入PID

q键  退出

 

vmstat   ---查看综合性能参数

vmstat 1  3

 

僵尸进程

一个进程,卡死在内存中,不执行,但也不退出

父子进程调用,一方异常关闭,造成另一个方无法正常完成,从而成为僵尸进程

 

查看僵尸进程

方式一:

ps  -aux   ---显示的第八列,进程状态列,显示有Z字母的,表示为僵尸进程

ps  -aux  |  awk  '$8 ~ /[Zz]/  {print  $1,$2,$4,$8,$11}'    ---抓取显示僵尸进程

 

方式二:

ps  -ef  |  grep  defunct    ---抓取显示僵尸进程

说明: -ef 查看时,僵尸进程会在进程名后面加 <defunct> 标记

 

kill  -9   PID  抓取到后杀死僵尸进程

 

内存故障

内存溢出

原因:在内存中开辟的空间,存入了超出最大值的数据;定义了一组变量,提取变量值时,超出了这一组的个数范围

现象:软件进程卡死,甚至造成死机

解决:多次观察软件卡死的位置,同一个位置或同一个操作都会发生卡死,即发现bug点,可能是由于溢出造成的 上报开发,调试bug

内存泄漏

原因:进程运行完毕,不释放内存,下次运行,占据新的内存,造成进程持续增长内存占有率。

现象:系统慢CPU使用率正常,进程数、连接数正常,内存使用率虚高

确定:ps | sort 查看占内存最高的进程,查找占内存接近20%的进程,为怀疑对象

写脚本,每10min记录占内存最多的前10个进程,持续2-3个小时,然后查看记录日志,查看哪个进程每隔几次,内存占有量递增

解决:上报,反馈甲方,通知开发调试bug,申请卸载、降级,或者建立服务集群,轮流重启,直到开发部门解决完毕

 

内存抖动

原因:

由于物理内存空间不足内存使用率较高,则暂停、挂起、等待进程会被转存入swap空间

进程从内存转入swap的过程,称为“换出

等待进程条件满足,需要执行,则从swap中转回物理内存,该过程被称为“换入”

进程频繁的换入换出,称为抖动

现象:系统慢,内存使用率高70%+,swap空间使用率高30%+

解决:上报,可能是由于甲方新增软件或软件升级造成,申请卸载、降级;或者申请增加物理内存,扩容swap

 

僵尸进程

原因:父子进程调用,一方异常关闭,另一方无法正常完成,造成卡死状态

现象:内存使用率略高60%+,发现有进程长期占据内存,且占有量、占有率不变

解决:ps  -ef  |  grep  defunct  抓取后做记录,再杀死。若发现有软件经常会产生僵尸进程,应该反馈给开发

 

IPC进程间通信

原因:运行一个进程,将在内存中开辟一块空间,作为本进程的专用。进程和进程所占的内存空间之间不可以做数据传输的

进程之间也不可以相互访问对方的内存空间。所以说进程的内存空间是独占的

但是,程序再运行过程中,是有进程之间数据交互的需求的,所以使用IPC技术实现进程之间的数据传递

进程内的线程,是公用进程所占的内存空间,允许线程间相互访问,并动态调度、调整

方式:

管道   |

在内存中开辟一块临时空间,做管道使用,前进程把运行结果放入管道中,后进程从管道中获取数据,传递完毕后,管道撤销

功能:前进程的运行结果传递给后进程作为输入使用

特点仅传递结果数据传递一次,数据只能被读取一次

如:ll  /etc/   |  less

 

共享内存

功能:进程运行过程中的数据传输给其他进程

在内存中开辟一块空间,前进程把数据存入该空间,后进程从空间中读取,存入的数据允许被多次读取使用

共享内存的空间也是长期存在的,直到两个进程都运行结束才撤销

通过调用系统提供的API(应用接口,即函数)完成内存空间的申请和数据存取。

 

信号sign             

功能:一个进程控制另一个进程的状态,靠信号

原理:一个进程给另一个进程增加一个状态信号,CPU根据信号的值,对进程做出相应的处理

命令:

kill  -l  ---查看所有的可用信号值

kill   -9   PID    ---杀死进程

kill   -3   PID    ---退出运行,会携带内存数据返回,

一般开发人员使用 -3信号,获取进程运行数据,调试bug

kill   -19  PID    ---停止挂起,相当于 ctrl+z

kill   -18  PID    ---继续运行,相当于 fg、bg

 

消息队列

功能:用于记录进程的运行状态

原理:当多个进程要同时访问同一个文件或设备时,尤其是在要同时做写操作时,会产生排他性。

即不允许多个进程对同一文件或设备同时做写操作,就会产生写操作的排队。后进程必须等前进程写操作完毕,才能写入

前进程会把自己的状态记录到消息队列中,后进程通过消息队列发现前进程执行完毕,即可开始写操作

 

socket套接字

功能:网络主机之间的进程传输、访问,用socket套接字

组成ip+port

原理:一台主机上的进程通过对方主机上的ip和port,识别、寻址到对方主机上的进程

posted @ 2020-09-09 08:37  浅唱I  阅读(450)  评论(0编辑  收藏  举报