Linux 性能分析工具大全

news2025/1/11 9:50:35

出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能分析和优化是一个长期的系列。

文章目录

  • 前言
  • 一、vmstat--虚拟内存统计
  • 二、iostat--用于报告中央处理器统计信息
  • 三、dstat--系统监控工具
    • 2.读入数据
  • 总结

前言

  1. 背景知识:具备背景知识是分析性能问题时需要了解的。比如硬件 cache;再比如操作系统内核。应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程序无法充分利用 cache,从而导致性能下降。比如不必要地调用过多的系统调用,造成频繁的内核 / 用户切换等。
  2. 性能分析工具
    首先来看一张图:
    在这里插入图片描述

一、vmstat–虚拟内存统计

  1. vmstat(VirtualMeomoryStatistics,虚拟内存统计):是 Linux 中监控内存的常用工具,可对操作系统的虚拟内存、进程、CPU 等的整体情况进行监视。
  2. vmstat 的常规用法:
    vmstat interval times 即每隔 interval 秒采样一次,共采样 times 次,如果省略 times,则一直采集数据,直到用户手动停止为止。
    简单举个例子:
[root@matrix01 ~]# vmstat 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
30  0      0 17375844   1820 79094832    0    0     0    54    0    0 15  6 79  0  0
 6  0      0 17693352   1820 79095664    0    0     0  2309 90280 109807 13  6 80  0  0
 8  0      0 16006636   1820 79099904    0    0     0  2848 82054 105837 15  7 78  0  0

可以使用 ctrl+c 停止 vmstat 采集数据。

  1. 第一行显示了系统自启动以来的平均值,第二行开始显示现在正在发生的情况,接下来的行会显示每5秒间隔发生了什么,每一列的含义在头部,如下所示:
    • ① procs:r 这一列显示了多少进程在等待cpu,b列显示多少进程正在不可中断的休眠(等待IO)。
    • ② memory:swapd 列显示了多少块被换出了磁盘(页面交换),剩下的列显示了多少块是空闲的(未被使用),多少块正在被用作缓冲区,以及多少正在被用作操作系统的缓存。
    • ③ swap:显示交换活动:每秒有多少块正在被换入(从磁盘)和换出(到磁盘)。
    • ④ io:显示了多少块从块设备读取(bi)和写出(bo),通常反映了硬盘I/O。
    • ⑤ system:显示每秒中断(in)和上下文切换(cs)的数量。
    • ⑥ cpu:显示所有的cpu时间花费在各类操作的百分比,包括执行用户代码(非内核),执行系统代码(内核),空闲以及等待IO。
  2. 内存不足的表现:free memory 急剧减少,回收 buffer 和 cache 也无济于事,大量使用交换分区(swpd),页面交换(swap)频繁,读写磁盘数量(io)增多,缺页中断(in)增多,上下文切换(cs)次数增多,等待IO的进程数(b)增多,大量CPU时间用于等待IO(wa)

二、iostat–用于报告中央处理器统计信息

iostat 用于报告中央处理器(CPU)统计信息和整个系统、适配器、tty 设备、磁盘和 CD-ROM 的输入/输出统计信息,默认显示了与vmstat 相同的 cpu 使用信息,使用以下命令显示扩展的设备统计:

[root@matrix01 ~]# iostat -dx 5
Linux 3.10.0-957.27.2.el7.x86_64 (matrix01)     2022年12月16日  _x86_64_        (48 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     8.36     0.00    2.88    2.88    0.00   2.82   0.00
sdc               0.00     0.00    0.00   24.02     0.01   146.72    12.22     0.00    0.10    0.18    0.10   0.06   0.13
sdb               0.00     1.76    0.88  148.78    16.13  2393.49    32.20     0.04    0.28    0.49    0.28   0.05   0.69
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     5.07     0.00    0.53    0.53    0.00   0.53   0.00
dm-1              0.00     0.00    0.00    0.07     0.00     0.30     8.67     0.00    0.35    0.42    0.35   0.34   0.00
dm-2              0.00     0.00    0.00    0.07     0.00     0.30     8.67     0.00    0.35    0.58    0.35   0.35   0.00
dm-4              0.00     0.00    0.00    0.07     0.00     0.30     8.68     0.00    0.37    0.96    0.37   0.35   0.00
dm-5              0.00     0.00    0.00    0.00     0.01     0.00     7.87     0.00   47.96   59.07   20.55  13.98   0.00
dm-6              0.00     0.00    0.00    0.31     0.00    52.67   339.55     0.01   25.02    5.00   25.06   0.32   0.01
dm-7              0.00     0.00    0.00    0.31     0.00    52.67   339.65     0.01   25.03    5.98   25.06   0.32   0.01
dm-9              0.00     0.00    0.00    0.31     0.00    52.65   339.93     0.26  853.85   10.15  854.86   0.40   0.01
  1. 第一行显示的是自系统启动以来的平均值,然后显示增量的平均值,每个设备一行。
    常见 linux 的磁盘 IO 指标的缩写习惯:
rq 是 request,
r 是 read,
w 是 write,
qu 是 queue,
sz 是 size,
a 是verage,
tm 是 time,
svc 是 service。
  • ① rrqm/s 和 wrqm/s:每秒合并的读和写请求,“合并的”意味着操作系统从队列中拿出多个逻辑请求合并为一个请求到实际磁盘。
  • r/s和w/s:每秒发送到设备的读和写请求数。
  • rsec/s和wsec/s:每秒读和写的扇区数。
  • avgrq –sz:请求的扇区数。
  • avgqu –sz:在设备队列中等待的请求数。
  • await:每个IO请求花费的时间。
  • svctm:实际请求(服务)时间。
  • %util:至少有一个活跃请求所占时间的百分比。

三、dstat–系统监控工具

dstat 显示了 cpu 使用情况,磁盘 io 情况,网络发包情况和换页情况,输出是彩色的,可读性较强,相对于 vmstat
和iostat 的输入更加详细且较为直观。在使用时,直接输入命令即可,当然也可以使用特定参数。

代码如下(示例):dstat –cdlmnpsy

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/94815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12月编程语言排行榜公布!C+首超 Java

前言 日前,全球知名TIOBE编程语言社区发布了12月编程语言排行榜,有哪些新变化? C 首超 Java 和上个月相比,12 月榜单中最大的变化莫过于 C 以 0.12% 微弱的优势,凭借 11.94% 的市场份额首次超过了 11.82% 的 Java。…

重磅!阿里巴巴三入Java 全球管理组织执行委员会 龙蜥拥抱上游开源生态

近日,Java 全球管理组织 Java Community Process(以下简称 JCP)经过公平公正的投票,披露了入选最高执行委员会的成员名单,阿里巴巴作为唯一中国代表实现第三次连任。作为龙蜥社区理事长单位,阿里巴巴的此次…

“双重主要上市”潮流来袭,中通快递“赶时髦”意欲何为?

“双重主要上市”的风今年悄然在资本市场刮起。 7月26日,阿里巴巴申请将香港新增为主要上市地,7月27日,雷军的金山云递交了港股双重主要上市申请,据不完全统计,已有贝壳、小鹏、理想、知乎、B站等9家中概股公司&#…

20 个基础实用的 JavaScript 技巧

1.确定对象的数据类型 function myType(type) { return Object.prototype.toString.call(type).slice(8, -1); 使用Object.prototype.toString,通过传入不同类型的判断返回不同的判断函数,一行代码,简洁优雅灵活; 2.循环遍历数…

HylicOS --- 内存抽象

HylicOS已经完成了部分硬件抽象层的工作,包括MMU的初始化并对虚拟内存到物理内存做了映射,创建了页表目录。对串口进行了初始化,实现了printk格式化打印函数,方便了日志输出和程序调试。建立了异常向量表。 现在要做的是内存管理…

复方一枝蒿复合磷脂/IgG二性霉素B/阿糖胞苷修饰载甲氨喋呤/酶促合成半乳糖配体脂质体制备

小编今天为大家分享的科研知识是复方一枝蒿复合磷脂/IgG二性霉素B/阿糖胞苷修饰载甲氨喋呤/酶促合成半乳糖配体脂质体,一起来看! 点击输入图片描述(最多30字) 复方一枝蒿复合磷脂脂质体: 采用硫酸铵梯度法制备复方一枝…

gunicorn走私漏洞

gunicorn走私漏洞 源码:https://github.com/benoitc/gunicorn漏洞定位:https://github.com/benoitc/gunicorn/blob/20.x/gunicorn/http/message.py#142 漏洞分析 只要header里面存在Sec-Websocket-Key1 那么就将content_length强制赋值为8 比较简单直接…

【java】java JSR 269 自定义注解实战 Lombok @Data注解

1.概述 本节会演示一个实际的例子,使用JSR 269 API为类中的字段自动生成get、set 方法。首先定义一个自定义注解类Data,如下所示。 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import

智能工业之数据采集

现状 工业物联网飞速发展,但是相对于实时IT技术还是明显滞后的。个人理解,有两点原因:一是因为涉及的知识面也比较广,工业物联网开发成本比较高,不像做一个纯软件的管理系统,坐在电脑前借助开源框架就能完成…

你好,Ultrachess 里程碑更新了。

Cartesi Labs 资助的完全去中心化国际象棋项目即将来到你的面前。在10月,我们宣布了第一个由Cartesi Rollup 技术支持的完全链上国际象棋应用程序Ultrachess。Ultrachess允许用户将真正的价值放在赌注上,并在下棋时考虑的不仅仅是他们的隐藏分值。此外&…

Java中的StringBuilder类

目录 一、介绍 二、StringBuilder类的体系图 三、StringBuilder的常用方法 四、String、StringBuffer和StringBuilder比较 1、效率比较 2、如何选择? 一、介绍 StringBuilder也是lang包中的类,即java.lang.StringBuilder类。它也是一个可变的字符序…

设计模式原则-三-依赖倒转原则

设计模式原则---依赖倒转原则依赖倒转原则一 官方定义基本介绍二 案例演示普通方式实现**解决方案****案例分析****案例总结**依赖倒转原则方式实现**解决方案**案例分析**案例总结**注意事项&细节三 依赖关系传递方式一、通过接口传递二、通过构造方法传递三、通过set()方…

原来 Android 的 R 文件里还有这么多道道

前言 nonTransitiveRClass:非传递性 R 类的属性,在 gradle.properties 文件里使用。 不少开发者可能听过它,但了解可能仅限于是对 R 文件做了优化,甚至以为它可以解决资源冲突!但它到底做了什么优化、能否解决资源冲突…

Manacher算法

0、概括 Manacher算法用于求解字符串中最长回文子串问题。 Manacher算法的核心: 理解回文半径数组;理解所有中心的回文最右边界 R,和取得 R 时的中心点 C;理解 L...(i)...C...(i)...R 的结构,以及根据 i′ii′ 回文长…

C-RNN-GAN:具有对抗训练的连续循环神经网络2016--生成音乐

C-RNN-GAN: Continuous recurrent neural networks with adversarial training 2016 Abstract 生成对抗网络已被提出作为一种有效训练深度生成神经网络的方法。我们提出了一种生成对抗模型,它适用于连续的序列数据,并通过在古典音乐集合上训练它来应用它…

计算机毕设Python+Vue校园学生体温管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

相见恨晚,Git这些功能太好用了

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store 作为一名开发者,想必绝大多数同学都无法绕开Git。 作为一款工具,我认为它和word、powerpoint、Excel这些办公工具一样。 对于一部分同学,会一些基本的用法&#x…

【经验帖】项目经理的核心价值:以目标为导向做正确的事

项目经理小李的年终汇报心路历程(心情犹如坐过山车,起起落落最后一蹶不振。) 汇报前: 终于到年终汇报的日子了,毕竟我负责的项目任务从来没有延期过,都是按时完成,这次肯定得加薪了&#xff01…

[附源码]Node.js计算机毕业设计公租房管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

module命名空间

为什么要有namespaced命名空间? 默认情况下,模块内部的action、mutation和getter都是在全局命名空间。 假设两个modules内部有同名的action、mutation和getter,则vuex会报错。 namespaced作用:保证模块内部的高封闭性,…