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 -d  #显示磁盘相关统计信息

参数解释

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

参数解释

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

三、压力测试工具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软件包工具不成功

3.1、下载压力测试工具

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

实验:

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

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

查看系统负载情况 uptime

模拟cpu 负载:

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

压力测试前初始信息

使用stress工具进行压力测试

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

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

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

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

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

模拟I/O负载

使用stress工具进行压力测试

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

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

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

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

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

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

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

查询进程占用情况

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

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

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

这时的 %iowait数值恢复正常

总结

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

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些常见的Linux系统运维基础命令: 1. 查询日志文件大于100M的文件并按照大小排序: 使用命令`find /path/to/logs -size +100M -exec ls -lh {} \; | sort -k5 -h` 2. 查询当前端口进程是否运行: 使用命令`netstat -tuln | grep <port>` 3. 查看盘符信息: 使用命令`df -h` 4. 查看实例上的数据盘信息: 使用命令`lsblk` 5. 用于报告Linux进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息: 使用命令`ipcs` 6. 查询进程号: - 显示各个进程内存使用情况并按照rss排序: 使用命令`ps aux --sort -rss` - 显示所有的进程,并显示运行进程的命令: 使用命令`ps aux` - 列出CPU使用最高的5个进程: 使用命令`top -b -n 1 | head -n 12` - 列出内存使用最高的5个进程: 使用命令`top -b -n 1 | head -n 12` 7. 通过进程ID查询执行文件所在位置: 使用命令`readlink /proc/<pid>/exe` 8. 查看文件内存: 使用命令`pmap <pid>` 9. 查看内存使用量: 使用命令`free -m` 10. 查看内存映射文件: 使用命令`cat /proc/<pid>/maps` 11. Linux查看CPU物理核心数命令: - 使用命令`lscpu | grep "Core(s) per socket"` - 使用命令`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l` 12. Linux查看CPU逻辑核心数命令: 使用命令`lscpu | grep "CPU(s):" | awk '{print $2}'` 13. Linux查看CPU主频命令: 使用命令`lscpu | grep "MHz"` 14. Linux查看CPU型号命令: 使用命令`cat /proc/cpuinfo | grep "model name" | uniq` 15. Linux检查CPU是否支持64位运算命令(返回值大于0表示支持): 使用命令`grep -c " lm " /proc/cpuinfo` 16. 一个报告虚拟内存统计信息的小工具: 使用命令`vmstat` 17. 查询所有进程占用情况: - 使用命令`top` - 使用命令`htop` 18. 查询系统IO实时使用情况: 使用命令`iostat` 19. DMI表解码器,可以用来描述系统的构成(以及系统的演变): 使用命令`dmidecode` 20. 查看Linux系统的CPU更为详细的信息: 使用命令`lscpu` 21. 显示每个CPU处理器的统计: 使用命令`mpstat -P ALL` 22. 可连续对系统性能进行采样分析: 使用命令`perf` 23. 查看系统内核: 使用命令`uname -a` 24. 查看CPU负载: 使用命令`uptime` 25. 跟踪进程的系统调用或信号产生的情况: 使用命令`strace <command>` 26. 跟踪进程调用库函数的情况: 使用命令`ltrace <command>` 这些命令可以帮助你了解和监控Linux系统的运行状态,进行故障排查和性能调优。请根据实际需求选择适合的命令使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值