vmstat调优命令

目录

一、vmstat命令描述

二、vmstat的语法格式

三、压力测试工具stress

实验:

模拟I/O负载

查看是哪个进程I/O读写高:pidstat -d (-d参数查看各进程io情况)

总结


一、vmstat命令描述

vmstat命令:  用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。这些信息反映了系统的负载情况

1、vmstat命令

在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。

在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。

分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。

当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。

二、vmstat的语法格式

Vmstat的语法:

Vmstat  [秒数]  [次数]   指定多少秒显示一次,共显示几次

2.1、vmstat命令参数

参数解释

-a:显示活跃和非活跃内存

-f:显示从系统启动至今的fork数量 。

-m:显示slab信息

-n:只在开始时显示一次各字段名称。

-s:显示内存相关统计信息及多种系统活动数量。

delay:刷新时间间隔。如果不指定,只显示一条结果。

count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。

-d:显示磁盘相关统计信息。

-p:显示指定磁盘分区统计信息

-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)

-V:显示vmstat版本信息。

示例:

参数解释

Vmstat -a  #显示活跃和非活跃内存

字段说明:

前面的Procs(进程)

  r  运行队列中进程数量,这个值也可以判断是否需要增加CPU(长期大于1)

  b  等待IO的进程数量

在Memory(内存)的字段中

  Swpd  使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统的性能

  Free   空闲物理内存大小

  Buff   用作缓冲的内存大小

  Cache  用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache,那么磁盘的读IO bi会非常小。

这里vmstat -a中用inact/active(活跃与否) 来取代 buff/cache 的内存输出信息。

Swap字段中

  Si  每秒从交换区写到内存的大小,由磁盘调入内存

  So  每秒写入交换区的内存大小,由内存调入磁盘

在IO的字段当中(现在的Linux版本块的大小为1KB)

  Bi  每秒读取的块数

  Bo  每秒写入的块数

注意:随机磁盘读写的时候,这两个值越大(如果超出1024k)能看到CPU在IO等待的值也会越大

在system字段中

  In 每秒中断数,包括时钟中断

  Cs  每秒上下文切换数

这两个值越大,会看到由内核消耗的CPU时间会越大

接下来的CPU字段当中(以百分比显示)

  Us  用户进程执行时间百分比(user time)

  Sy  内核系统进程执行时间百分比(system time)

  Wa  IO等待时间百分比

  Id  空闲时间百分比

参数解释

Vmstat -f  #显示从系统启动至今的fork数量

显示系统启动后创建的进程数,linux下创建进程的系统调用是fork

参数解释

Vmstat -s  #显示内存相关统计信息以及多种系统活动数量

vmstat调优命令_第1张图片

参数解释

Vmstat -d  #显示磁盘相关统计信息

vmstat调优命令_第2张图片

参数解释

Vmstat -p [硬盘设备]  #查看指定硬盘分区的读写统计信息

参数解释

Vmstat -m   #查看系统的slab信息

vmstat调优命令_第3张图片

三、压力测试工具stress

1、工具简介:

stress是Linux下的一个压力测试工具,可以对cpu、memory(内存)、IO以及磁盘进行压力测试,可以指定负载的cpu个数

2、参数详解

-c : --cpu  产生n个进程,每个进程都反复不停的计算随机数的平方根

-i : --io  产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上

-m :-vm  产生n个进程,每个进程不断分配和释放内存

-t : --timout   在n秒后结束进程

-d : --hdd  产生n个不断执行 write 和unlink函数的进程(创建文件、写入内容、删除文件)

下载压力工具软件包

[root@ly ~]# yum install -y epel-release    

注:需要先下载所需要的依赖包否则直接下载stress软件包工具不成功

vmstat调优命令_第4张图片

3.1、下载压力测试工具

[root@ly ~]# yum install -y stress

vmstat调优命令_第5张图片

实验:

1、压力测试,查看CPU的使用率

采用stress压力测试工具,模拟CPU 负载的情况,高IO的情况,使用uptime查看平均负载,使用mvstat和pidstat工具,找出负载高的根源。

查看系统负载情况 uptime

模拟cpu 负载:

压力测试前,cpu的使用率及io的使用情况

压力测试前初始信息

vmstat调优命令_第6张图片

使用stress工具进行压力测试

进行压力测试 对2快cpu 进行增压 持续600s

pidstat -u 5  查看运行中的进程和任务,每5秒刷新一次

找到原因:是因为stress进程产生的压力过大

vmstat调优命令_第7张图片

用kill -9杀死指定占用率大的进程,再查看占用率

vmstat调优命令_第8张图片

这时的cpu释放出来,占用率降低,所有数据恢复正常状态

模拟I/O负载

使用stress工具进行压力测试

-i : --io  产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上

进行压力测试,产生10个进程,持续600秒

注:使用stress无法模拟iowait升高,但sys表示内核进程使用的 CPU 百分比。升高。stress -i参数表示通过系统调用sync来模拟IO问题,但sync是刷新内存缓冲区数据到磁盘中,以确保同步。如果内存缓冲区内没多少数据,读写到磁盘中的数据也就不多,没法产生IO压力。使用SSD(固态硬盘)磁盘的环境中尤为明显,iowait一直为0,但因为大量系统调用,导致系统CPU使用率sys升高。

vmstat调优命令_第9张图片

命令:stress --io 15 --hdd 15 --timeout 600s

-d : --hdd  产生n个不断执行 write 和unlink函数的进程(创建文件、写入内容、删除文件)

-i : --io  产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上

vmstat调优命令_第10张图片

使用 --hdd 产生函数的进程,就可以使bi和bo 的数值升高,读写性能负载

查询进程占用情况

查看是哪个进程I/O读写高:pidstat -d (-d参数查看各进程io情况

vmstat调优命令_第11张图片

查看进程找到指定进程杀死

Kill -9 杀掉指定进程后查看

这时的 %iowait数值恢复正常

总结

如果一个程序运行在一个处理器的机器上,并且占用所有的处理器情况下,从而导致CPU过载,就可以通过mvstat进行诊断排错,但是如果不占用所有的处理器,而只占用在一个多处理器的机器上,从而导致一个cpu过载,其他cpu处于空闲,mvstat就不如mpstat显示的信息详细

当%idle数字较低时,就是CPU不足的原因

当%iowait数字较高时,当前负载下的I/O子系统出现了某些问题

你可能感兴趣的:(数学建模,服务器,java)