admin管理员组

文章数量:1568418

文章目录

  • 引言
  • 一、mpstat命令
    • 1.mpstat命令描述
    • 2、下载mpstat软件包
    • 3.mpstat的语法格式
    • 4.mpstat命令的各列含义
    • 5.平均负载信息
  • 二、压力测试工具stress
    • 1、工具简介
    • 2、参数详解
    • 3、下载压力测试工具
  • 三、查看运行中的进程/任务、CPU、内存等的统计信息------pidstat
    • 1、常用参数
  • 四:实验
    • 1.实验目的
    • 2、压力测试查看CPU的使用率
    • 2.模拟I/O负载
    • 3、模拟大量进程场景

引言

首先我们要知道什么是调优?调优就是对计算机硬件、操作系统和应用有相当深入的了解,调节三者之间的关系,实现整个系统(包括硬件、操作系统、应用)的性能最大化,并能不断的满足现有的业务需求。

一、mpstat命令

1.mpstat命令描述

mpstat (multiprocessor state) 可以查看所有CPU的平均负载,也可以查看指定CPU的负载。所以mpstat其实就是主要查看CPU负载的一个工具。是一款常用的多核CPU性能分析工具,用来实时查询每个CPU的性能指标,以及所有CPU的平均指标

2、下载mpstat软件包

它是Linux性能工具集sysstat中的一个工具,所以我们要装上sysstat,安装方法随不同的系统略有不同,sysstat是一个软件包,包含监测系统性能及效率的一组工具,这些工具对于我们收集系统性能数据,比如:CPU 使用率、硬盘和网络吞吐数据,这些数据的收集和分析,有利于我们判断系统是否正常运行

3.mpstat的语法格式

mpstat [-P {cpu|ALL}] [interval [count]]

mpstat命令参数

参数描述
-P {cpu l ALL}指定要监控哪个CPU ,范围是 [0~n-1] ,ALL表示监控所有CPU都监控
internval相邻两次采样的间隔时间
count采样的次数,count只能和internval一起使用


其中

  • 第一部分:输出首先显示了所有CPU的合计指标,然后显示了每个CPU各项的指标。
  • 第二部分:在结尾处显示所有CPU的平均值

4.mpstat命令的各列含义

显示参数描述
CPU显示的是某个CPU 还是全部CPU all=全部
%usr表示用户所有使用的CPU百分比
%nice表示使用 nice 值的 CPU 的百分比。
%sys表示内核进程使用的 CPU 百分比。
%iowait表示等待进行 I/O 所使用的 CPU 时间百分比。
%irq表示用于处理系统中断的CPU百分比
%soft表示用于软件中断的CPU百分比
%steal虚拟机强制CPU等待的时间百分比
%guest虚拟机占用CPU时间的百分比
%gniceCPU运行niced guest虚拟机所花费的时间百分比
%idleCPU的空闲时间的百分比

mpstat主要用在当系统变慢,平均负载增大时,我们想判断到底是CPU的使用率增大了,还是IO压力增大的情况。

5.平均负载信息

当系统变慢,用top或uptime来了解系统的负载情况。

系统平均负载是指在特定时间间隔内运行队列中的平均进程数

如果单个CPU内核的当前活动进程数不大于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函数的进程(创建文件、写入内容、删除文件)

3、下载压力测试工具

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


三、查看运行中的进程/任务、CPU、内存等的统计信息------pidstat

pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。

1、常用参数

-u默认的参数,显示各个进程的CPU使用统计
-r显示各个进程的内存使用统计
-d显示各个进程的IO使用情况
-p指定进程号
-w显示每个进程的上下文切换情况
-t显示选择任务的线程的统计信息外的额外信息
-V版本号
-h在一行上显示了所有活动,这样其他程序可以容易解析。
-I(i大写)在SMP环境,表示任务的CPU使用率/内核数量
-l显示命令名和所有参数

四:实验

1.实验目的

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

查看系统平均负载情况uptime

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

  • 模拟cpu 负载

压力测试前,cpu的使用率

  • 使用stress工具进行压力测试
stress --cpu 4 --timeout 600
 进行压力测试 对2快cpu 进行增压 持续600s


此时cpu占用率过高 cpu负载 显示用户进程 stress对cpu的使用率为100%

[root@chen ~]#: pidstat -u 5
查看运行中的进程和任务,每5秒刷新一次

  • 解决问题
[root@chen ~]#: kill -9 19760  杀死高占用进程

2.模拟I/O负载

使用stress工具进行压力测试

stress --io 40 --timeout 600
 
进行压力测试,产生40个进程,持续600-i : --io  产生n个进程,每个进程反复调用 将内存上的内容写到硬盘上

[root@chen ~]#: mpstat -P ALL 5 2
显示所有cpu统计的信息 每隔5秒 总共2.


使用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个进程,每个进程反复调用 将内存上的内容写到硬盘上

[root@chen ~]#: mpstat -P ALL 1 2    io读取占用百分比过高

  • 查看正在进行的进程pid号

  • 找到异常原因

  • 查看是哪个进程导致I/O读写过高

pidstat -d 1 3(-d参数查看各进程io情况)
 
Stress 占用进程导致io读写过高

  • 杀死占用的进程
  • 问题解决

3、模拟大量进程场景

当系统中运行进程超出 CPU 运行能力时,就会出现等待 CPU 的进程。比如,我们还是使用 stress,但这次模拟的是 20 个进程

[root@chen ~]#: stress -c 20 --timeout 600s

[root@chen ~]#: uptime    cpu严重过载 平均负载

[root@chen ~]#: pidstat -u 1 2

  • 可以通过平均负载知道cpu是处于负载的状况。

本文标签: 详细CPU调优