zoukankan      html  css  js  c++  java
  • stress 使用

    介绍

    stress 是一个 Linux 系统压力测试工具,可以给系统进行压力测试,包括cpu 使用率、内存、磁盘io、网络等性能指标都可以进行测试。
     

    高负载/cpu使用的压力测试(模拟一个cpu 密集型的进程)

    $ stress --cpu 1 --timeout 600      #模拟启动一个cpu 线程在不停的使用cpu ,持续时间600s

    查看负载和cpu使用情况


    uptime
    09:28:51 up 25 min, 4 users, load average: 0.88, 0.48, 0.52
    #大概一分钟左右之后,过去1分钟的负载就会达到1

    top - 09:29:59 up 26 min, 4 users, load average: 1.01, 0.60, 0.56
    Tasks: 136 total, 2 running, 134 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 99.0 us, 1.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

    cpu 使用率接近100%

    模拟I/O 密集型进程

    $ stress -i 1 --timeout 600    #

    查看负载和cpu 情况

    $ watch -d uptime
    ...,  load average: 1.06, 0.58, 0.37


    # 显示所有CPU的指标,并在间隔5秒输出一组数据
    $ mpstat -P ALL 5 1
    Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
    13:41:28 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
    13:41:33 all 0.21 0.00 12.07 32.67 0.00 0.21 0.00 0.00 0.00 54.84
    13:41:33 0 0.43 0.00 23.87 67.53 0.00 0.43 0.00 0.00 0.00 7.74
    13:41:33 1 0.00 0.00 0.81 0.20 0.00 0.00 0.00 0.00 0.00 98.99

    # 可以看到,1 分钟的平均负载会慢慢增加到 1.06,其中一个 CPU 的系统 CPU 使用率升高到了 23.87,而 iowait 高达 67.53%。这说明,平均负载的升高是由于 iowait 的升高。

    查看哪个进程导致的

    # 间隔5秒后输出一组数据,-u表示CPU指标
    $ pidstat -u 5 1
    Linux 4.15.0 (ubuntu)     09/22/18     _x86_64_    (2 CPU)
    13:42:08      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
    13:42:13        0       104    0.00    3.39    0.00    0.00    3.39     1  kworker/1:1H
    13:42:13        0       109    0.00    0.40    0.00    0.00    0.40     0  kworker/0:1H
    13:42:13        0      2997    2.00   35.53    0.00    3.99   37.52     1  stress
    13:42:13        0      3057    0.00    0.40    0.00    0.00    0.40     0  pidstat

    注意: iowait无法升高的问题,是因为案例中stress使用的是 sync() 系统调用,它的作用是刷新缓冲区内存到磁盘中。对于新安装的虚拟机,缓冲区可能比较小,无法产生大的IO压力,这样大部分就都是系统调用的消耗了。所以,你会看到只有系统CPU使用率升高。解决方法是使用stress的下一代stress-ng,它支持更丰富的选项,比如 stress-ng -i 1 --hdd 1 --timeout 600(--hdd表示读写临时文件)。

    模拟大量进程的场景

    $ stress -c 8 --timeout 600   #8个进程使用cpu 的场景持续1h

    查看负载等情况

    $ uptime
    ...,  load average: 7.97, 5.93, 3.02

    查看进程情况

    # 间隔5秒后输出一组数据,一共输出一组
    $ pidstat -u 5 1
    14:23:25      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
    14:23:30        0      3190   25.00    0.00    0.00   74.80   25.00     0  stress
    14:23:30        0      3191   25.00    0.00    0.00   75.20   25.00     0  stress
    14:23:30        0      3192   25.00    0.00    0.00   74.80   25.00     1  stress
    14:23:30        0      3193   25.00    0.00    0.00   75.00   25.00     1  stress
    14:23:30        0      3194   24.80    0.00    0.00   74.60   24.80     0  stress
    14:23:30        0      3195   24.80    0.00    0.00   75.00   24.80     0  stress
    14:23:30        0      3196   24.80    0.00    0.00   74.60   24.80     1  stress
    14:23:30        0      3197   24.80    0.00    0.00   74.80   24.80     1  stress
    14:23:30        0      3200    0.00    0.20    0.00    0.20    0.20     0  pidstat

    假设测试服务器cpu 为2核,可以看出,8 个进程在争抢 2 个 CPU,每个进程等待 CPU 的时间(也就是代码块中的 %wait 列)高达 75%。这些超出 CPU 计算能力的进程,最终导致 CPU 过载。

    注意:1、pidstat 里面的%wait 与top 心事的%wait不一样,前者表示进程等待cpu时间百分比后者表示cpu等待io 时间百分比。

    2、pidstat输出中没有%wait的问题,可能是默认的sysstat稍微有点老,源码或者RPM升级到11.5.5版本以后就可以看到了。Ubuntu的包一般都比较新,没有这个问题。

  • 相关阅读:
    Linux Virtual Server技术
    log4j+slf4j迁移到log4j2+slf4j (Servlet3.0)
    Android控件ToggleButton的使用方法
    Redis学习手冊(事务)
    游戏server之server优化思路
    Codeforces 474D Flowers (线性dp 找规律)
    【C语言】编写函数实现库函数atof
    unity3D游戏开发实战原创视频讲座系列7之消消乐游戏开发
    [WebGL入门]二十一,从平行光源发出的光
    TwoSum leetcode
  • 原文地址:https://www.cnblogs.com/fanggege/p/14223483.html
Copyright © 2011-2022 走看看