linux系统性能分析工具使用(1)

该文通过实战性能分析来学习工具的使用和总结的大致分析步骤以供参考。
系统ubuntu 18.04
首先需安装如下:
sudo apt-get install sysbench
sudo apt-get install sysstat

获取root;
sudo -i 快速切换到root,不加-i会以非登录模式切换,不会拿到root的环境的变量

开始前先查看当前系统的情况:

root@parallels-Parallels-Virtual-Platform:~# vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 2  0 740352 385040  12516 112232  141 1207  6645  3878 1202 2485 16  8 73  3  0

cs:每秒上下文切换的次数 (当前2485次)
in:每秒中断的次数 (当前1202次)
r:就绪队列的长度,即正在运行和等待CPU的进程数 (当前2个)
b:处于不可中断睡眠状态的进程数 (当前0个)

接下来开启三个终端:
1号终端(用来模拟多个线程):
运行如下:
sysbench –threads=5 –max-time=300 threads run (以5个线程运行5min,模拟多线程切换)

2号终端(用于显示虚拟内存状态、进程、内存、I/O等系统整体运行状态):
    运行:vmstat 1 (每隔1s输出一次数据)
        procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
         r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
         6  0 787456 210536  19800 284736   46  227  1203   681  381 2985  5  3 92  1  0
         5  0 787456 210140  19800 284800    0    0     0     0 2826 3074732 22 77  1  0  0
         5  0 787456 210120  19800 284800    0    0     0     0 1682 3034090 26 74  0  0  0
         5  0 785920 207784  19800 284800 1700    0  1700     0 3041 2965201 27 73  0  0  0
         5  0 785920 208668  19800 284800    0    0     0     0 2293 3067836 23 76  1  0  0
         5  0 785920 208480  19800 284800    4    0     4     0 1416 3196529 22 79  0  0  0
         5  0 785920 208400  19800 284800    0    0     0     0 1493 3103016 25 75  0  0  0
         5  0 785920 208492  19808 284792    4    0     4    24 2953 3141558 22 78  1  0  0
         5  0 785920 209724  19808 284800    0    0     0     0 2560 3178636 23 77  0  0  0

        cs:由2485骤然升到300万
        r:超过2(我的是双核),说明有大量的CPU竞争
        us和sy:这两项的CPU使用率加和基本接近甚至相等100%,其中sy高达80%,说明CPU主要被内核占用
        in:上升到2000多,暗示可能有大量中断处理

3号终端(分析进程和线程的切换情况):
    运行:pidstat -tw -u 1 (-t:输出线程切换指标 -w:输出进程切换指标 -u:输出CPU使用指标)
        19时53分49秒   UID      TGID       TID    %usr %system  %guest   %wait    %CPU   CPU  Command
        19时53分50秒     0     11329         -   39.42  100.00    0.00    0.00  100.00     1  sysbench

        19时53分53秒   UID      TGID       TID   cswch/s nvcswch/s  Command
        19时53分54秒     0         -     11330   2790.00 592087.00  |__sysbench
        19时53分54秒     0         -     11331    883.00 602458.00  |__sysbench
        19时53分54秒     0         -     11332   3152.00 669423.00  |__sysbench
        19时53分54秒     0         -     11333   1024.00 672398.00  |__sysbench
        19时53分54秒     0         -     11334   1471.00 623371.00  |__sysbench
        19时53分54秒  1000     11350         -      1.00    596.00  pidstat
        19时53分54秒  1000         -     11350      1.00    596.00  |__pidstat

    通过pidstat可以看出,CPU使用率达到100%的原因是sysbench的启动,但是sysbench的主线程上下文切换次数之和并不多,也就7000左右,而引起cs达到300万的是它的子线程上下文切换次数,那上下文切换次数增多的根源是什么呢?

中断次数?
查看中断次数,相比之前上升了1000多,查看/proc/interrupts文件(该文件中断使用情况,而/proc是linux的一个虚拟文件系统,用于内核空间和用户空间之间的通信)
运行:watch -d cat /proc/interrupts
       CPU0       CPU1     
RES:    1044941    1037576   Rescheduling interrupts

可以观察到RES的变化是最快的,RES代表重调度中断,该中断表示唤醒空闲状态的CPU来调度新的任务运行,这是SMP(多处理器系统)中用来分散任务到不同CPU的机制,也叫做处理期间中断(IPI)。这样中断的升高还是因为过多的任务调度,跟之前的上下文切换次数分析一致。

总结:
1,掌握linux系统性能分析的几个工具;
2,stress和sysbench区别:stress是基于多进程,会fork多个进程导致进程上文切换,导致us开销很大,sysbench是基于多线程,创建多个线程,单一进程基于内核线程切换,导致sy内核开销很大;
3,性能分析步骤:
1,通过uptime查看系统负载;
2,使用mpstat,pidstat判断是CPU计算量大还是进程争抢CPU;
3,使用vmstat分析上下文切换次数,查看中断情况,进一步分析是CPU竞争激烈还是IO操作频繁;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

影帝sunny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值