当前位置: 首页 > news >正文

性能分析与调优: Linux 内存观测工具

目录

一、实验

1.环境

2.vmstat 

3.PSI 

4.swapon

5.sar

6.slabtop

7.numstat

8.ps

9.top

10.pmap

11.perf

12.bpftrace

二、问题

1.接口读写报错

2.slabtop如何安装

3.numactl如何安装

4.numad启动服务与关闭NUMA

5. perf如何安装

6. kernel-lt-doc与kernel-lt-tools-libs-devel如何安装

7.bpftrace如何安装

8. drsnoop如何使用


一、实验

1.环境

(1)主机

表1-1 主机

主机架构组件IP备注
prometheus

监测

系统

prometheus、node_exporter 192.168.204.18
grafana监测GUIgrafana192.168.204.19
agent 

监测

主机

node_exporter192.168.204.20

(2)内存观测工具

表1-2 内存观测工具

序号工具描述
1vmstat虚拟内存和物理内存统计信息
2PSI内存压力滞留信息
3swapon交换设备使用率
4sar历史统计信息
5slabtop内核slab分配器统计信息
6numastatNUMA分析
7ps进程状态
8top监测每个进程的内存使用率
9pmap进程地址空间统计信息
10perf内存PMC和跟踪点分析
11bpftrace用于内存分析的跟踪程序

2.vmstat 

(1) 每秒1次,共5次输出

[root@agent ~]# vmstat 1 5

(2)-S 选项将输出单位修改为MB(m表示1 000 000, M表示 1 048 576)

[root@agent ~]# vmstat -Sm 1 5

[root@agent ~]# vmstat -SM 1 5

(3) -a 选项可以输出非活动inactive和活动页active缓存的明细

[root@agent ~]# vmstat -a 1 5

3.PSI 

(1) 显示是否有内存压力,和过去5分钟内的变化情况

cat /proc/pressure/memory

some开头的一行显示了一些任务(线程)受到影响的时间,full开头的一行显示了所有可运行任务受到影响的时间

4.swapon

(1) 显示配置的交换设备以及使用率

[root@agent ~]# swapon

5.sar

(1) -B 换页统计信息

每秒1次,共5次

[root@agent ~]# sar -B 1 5

(2)-H 巨型页统计信息

 每秒1次,共5次

[root@agent ~]# sar -H 1 5

(3)-r 内存使用率

 每秒1次,共5次

[root@agent ~]# sar -r 1 5

(4)-S 交换空间统计信息

 每秒1次,共5次

[root@agent ~]# sar -S 1 5

(5)-W 交换统计信息

[root@agent ~]# sar -W 1 5

6.slabtop

(1) 输出内核slab缓存使用情况

每5s显示一次

[root@agent ~]# slabtop -d 5

7.numstat

(1)查询CPU插槽系数

为非统一内存访问(NUMA)系统提供统计数据

[root@agent ~]# numastat

8.ps

(1) 列出包括内存使用同统计信息在内的所有进程细节

[root@agent ~]# ps aux

(2)数据列用SVR4 方式的-o选择

[root@agent ~]# ps -eo pid,pmem,vsz,rss,comm

9.top

(1) 显示内存使用统计信息

[root@agent ~]# top -o %MEM

10.pmap

(1) 列出一个进程的内存映射,显示其大小、权限和映射对象

[root@agent ~]# pmap -x 755

(2)-X 显示更多的细节

[root@agent ~]# pmap -X $(pgrep mysqld) | head -2

(3)-XX 显示内核提供的“一切”

[root@agent ~]# pmap -XX $(pgrep mysqld) | head -2

11.perf

(1) 采样整个系统的缺页(RSS增长)机器栈踪迹,按下CTRL+C组合键结束

[root@agent ~]# perf record -e page-faults -a -g 

(2)记录pid为755的进程在60秒内发生的所有却也及其栈踪迹

[root@agent ~]# perf record -e page-faults -c 1 -p 755 -g -- sleep 60

(3)通过brk记录栈的增长,按下CTRL+C组合键结束

[root@agent ~]# perf record -e syscalls:sys_enter_brk -a -g

(4)记录NUMA系统上的页迁移情况

[root@agent ~]# perf record -e migrate:mm_migrate_pages -a

(5)使用栈踪迹来跟踪kswapd唤醒时间,按下CTRL+C组合键结束

[root@agent ~]# perf record -e vmscan:mm_vmscan_wakeup_kswapd -ag

12.bpftrace

(1)按代码路径对进程堆扩张情况(brk)计数

[root@agent ~]# bpftrace -e 'tracepoint:syscalls:sys_enter_brk { @[ustack,comm] = count(); }'

(2)按跟踪点对vmscan操作数量计数

[root@agent ~]# bpftrace -e 'tracepoint:vmscan:*  { @[probe] = count(); }'

(3)按进程对swapins操作数量计数

[root@agent ~]# bpftrace -e 'kprobe:swap_readpage { @[comm,pid] = count(); }'

(4) 对页迁移数量计数 

[root@agent ~]# bpftrace -e 'tracepoint:migrate:mm_migrate_pages  { @  = count(); }'

(5)跟踪内存压缩事件

[root@agent ~]# bpftrace -e 't:compaction:mm_compaction_begin  { time(); }'

(6)列出内核kmem的跟踪点

[root@agent ~]# bpftrace -l 't:mm_*'

(7)列出所有内存子系统(mm)的跟踪点

[root@agent ~]# bpftrace -l 't:mm_*'

二、问题

1.接口读写报错

(1)报错

提示“不支持的操作”或 "Operation not supported"

(2)原因分析

查看当前内核版本

 5.4 版本的内核在 "psi_proc_init" 函数中没有进行 "psi_enable" 的判断,就直接创建了 "/proc" 下的这些文件,导致可以看到而不能使用。

(3)解决方法

此问题已在 5.6 版本里修复了,如下面的commit。

sched/psi: create /proc/pressure and /proc/pressure/{io|memory|cpu} o… · torvalds/linux@3d81768 · GitHub

2.slabtop如何安装

(1)安装

yum install procps-ng

(2)使用

slabtop -d 5              #每5s显示一次

(3)参数

选项说明
-d n / --delay=n设置显示的时间间隔
-s S / --sort=S设置排序规则。a,以活动对象数目排序;b,以每个slab对象数目排序;c,以缓存大小排序;l,以slab数量排序;v,以多动的slab排序;n,以名字排序;o,以对象数目排序;p,以每slab的页数排序;u,以缓存利用率排序
-o /--once只显示一次,之后退出
-V / --version显示版本信息,并且退出
--help显示帮助信息,并且退出

设置排序规则

[root@agent ~]# slabtop -s S

只显示一次,之后退出

显示版本信息

[root@agent ~]# slabtop -V

显示帮助信息

[root@agent ~]# slabtop --help

3.numactl如何安装

(1)安装

yum -y install numactl

(2) 使用

numactl -H      #查看当前服务器的NUMA配置。

(3)参数

--show:可以查看当前的numa策略,-H:可以显示各Node中内存使用情况--membind:只从某节点分配内存,当某节点内存不足,则会分配失败,格式:numactl --membind=nodes program(nodes写你要分配的节点0或1或者其它节点数,后面是程序,可以写绝对路径,也可写服务启动脚本)--numactl:把进程绑定到某节点上,用法如下:numactl --cpunodebind=nodes program(nodes为Cpu节点,后面跟程序,)--physcpubind:把进程绑定到某核心上,如果程序运行,用法如下(参数太长就简写了,其它简写参数自己Man):numactl -C 1,3 httpd--localalloc:指令永远在当前节点分配内存,用法:numactl -l httpd--preferred:如果指定的内存无法分配足够的空间,可以指定去某一个节点的内存分配,格式如下:numactl --preferred=0 http

4.numad启动服务与关闭NUMA

(1)numad

numad是一个自动numa亲和度管理进程。监控NUMA拓扑和资源使用,来动态提高NUMA资源分配和管理。


(2)启动命令

service numad start

(3)关闭NUMA

方法一:通过bios关闭

BIOS:interleave = Disable / Enable

方法二:通过OS关闭

①编辑 /etc/default/grub 文件,加上:numa=off

GRUB_CMDLINE_LINUX="crashkernel=auto numa=off rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"

②重新生成 /etc/grub2.cfg 配置文件

grub2-mkconfig -o /etc/grub2.cfg

③ 重启操作系统

reboot

④ 确认

# dmesg | grep -i numa# cat /proc/cmdline

5. perf如何安装

(1)查看当前可用的内核发行版本

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

(2)安装

yum --enablerepo=elrepo-kernel install perf

6. kernel-lt-doc与kernel-lt-tools-libs-devel如何安装

(1)查看当前可用的内核发行版本

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

(2) 安装依赖包

yum --enablerepo=elrepo-kernel install kernel-lt-doc \
kernel-lt-tools-libs-devel

7.bpftrace如何安装

(1)查询

rpm -qa | grep bcc-static
rpm -qa | grep bcc-tools
rpm -qa | grep bpftrace 
rpm -qa | grep bpftrace-tools
rpm -qa | grep  bpftrace-doc

(2)添加repo

curl https://repos.baslab.org/rhel/7/bpftools/bpftools.repo --output /etc/yum.repos.d/bpftools.repo 

(2)安装

 yum install bpftrace bpftrace-tools bpftrace-doc bcc-static -y

8. drsnoop如何使用

(1) 跟踪通过直接回收释放内存的方法,显示受影响的进程和延时

drsnoop -T

相关文章:

性能分析与调优: Linux 内存观测工具

目录 一、实验 1.环境 2.vmstat 3.PSI 4.swapon 5.sar 6.slabtop 7.numstat 8.ps 9.top 10.pmap 11.perf 12.bpftrace 二、问题 1.接口读写报错 2.slabtop如何安装 3.numactl如何安装 4.numad启动服务与关闭NUMA 5. perf如何安装 6. kernel-lt-doc与kern…...

【ARM 嵌入式 编译系列 3.4 -- 查看所依赖库文件的路径 详细介绍】

文章目录 问题背景库文件路径查看库文件路径信息打印显示连接标准库不使用标准库 libgcc.a问题背景 在自己构建的 Makefle系统中对 cortex-m33 代码编译时,在链接阶段总是报出下面问题 ... arm-none-eabi-ld: cannot find libgcc.a: No such file or directory arm-none-eab…...

分布式锁3: zk实现分布式锁3 使用临时顺序节点+watch监听实现阻塞锁

一 zk实现分布式锁 1.1 使用临时顺序节点 的问题 接上一篇文章,每个请求要想正常的执行完成,最终都是要创建节点,如果能够避免争抢必然可以提高性能。这里借助于zk的临时序列化节点,实现分布式锁 1. 主要修改了构造方法和lock方…...

google drive api

1.创建oauth2 json 文件 https://developers.google.com/drive/api/quickstart/pythoncchttps://developers.google.com/drive/api/quickstart/python这里要注意quickstart的code会经常更新,有可能之前的版本不能用了 比方说下面这个包 from google.oauth2.crede…...

3_代理模式(动态代理JDK原生和CGLib)

一.代理模式 1.概念 代理模式(Proxy Pattern )是指为其他对象提供一种代理,以控制对这个对象的访问,属于结构型模式。 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的…...

Linux的权限(1)

目录 操作系统的"外壳"程序 外壳程序是什么? 为什么存在外壳程序? 外壳程序怎么运行操作? 权限 什么是权限? 权限的本质? Linux中的(人)用户权限? su和su -的区别…...

数据安全保障的具体措施有哪些

随着信息化时代的到来,数据已经成为企业和社会发展的重要资产。然而,数据安全问题也日益突出,如何保障数据的安全性、完整性和可用性成为了亟待解决的问题。以下将详细探讨数据安全保障的各个方面,以期为企业和社会提供更好的数据…...

浅谈标签及应用场景

一、标签的定义 标签是根据业务场景的需求,通过对目标对象(包含静态、动态特性),运用抽象、归纳、推理等算法得到的高度精炼的特征标识,用于差异化管理与决策。标签由标签名称和标签值组成,打在目标对象上…...

Linux动态分配IP与正向解析DNS

目录 一、DHCP分配 1. 动态分配 1.1 服务端服务安装 1.2 修改服务端dhcp配置 1.3 修改客户端dhcp,重启查询网卡信息 2. 根据mac固定分配 2.1 修改服务器端dhcp服务配置 2.2 客户端自动获取,查看网卡信息 二、时间同步 1. 手动同步 2. 自动同…...

pyspark 使用udf 进行预测,发现只起了一个计算节点

PySpark UDF 只使用一个计算节点的问题 原因分析 默认的并行度设置 PySpark在执行UDF(用户定义函数)时,默认可能不会利用所有可用的计算节点。这是因为UDF通常在单个节点上执行,并且如果没有正确设置分区,可能会导致数…...

mysql触发器的简单使用

mysql触发器 触发器是一个特殊的存储过程,在事件delete、insert、update发生时自动执行一条或多条SQL语句(执行多条SQL语句需要用begin、end 包裹起来) 创建触发器 创建触发器的四大必要条件 唯一的触发器名称触发器关联的表触发器响应的…...

全志T113开发板Qt远程调试

1引言 通常情况下工程师在调试Qt程序时,需要频繁制作镜像烧录到核心板来测试Qt程序是否完善,这样的操作既费时又费力。这时我们可以通过QtCreator设备功能,定义设备后,在x86_64虚拟机上交叉编译qt程序,将程序远程部署到…...

学习使用php、js脚本关闭当前页面窗口的方法

学习使用php、js脚本关闭当前页面窗口的方法 前言方法一:使用JavaScript代码方法二:通过http头文件来实现方法三:使用服务器端脚本来实现 前言 在开发web应用程序时,我们通常需要在不同的网页之间进行导航。通常情况下&#xff0…...

python 人脸检测与人脸识别

安装库文件: pip install dlib face_recognition import dlib import face_recognition import cv2 from PIL import Image, ImageDraw# 判断运行环境 cpu or gpu def check_env():print(dlib.DLIB_USE_CUDA)print(dlib.cuda.get_num_devices())# 判断人脸在图片当中的位置 def…...

RT-Thread: ulog 日志 讲解和使用

说明:记录 RT-Thread: ulog 日志功能和使用流程。 官网资料链接: https://docs.rt-thread.org/#/rt-thread-version/rt-thread-standard/programming-manual/ulog/ulog 1.ulog 简介 日志的定义:日志是将软件运行的状态、过程等信息&#x…...

git ssh key 配置

一、Profile Settings-->SSH Keys 我们点击这里会有详情的文档介绍生成sshkey。 ssh-keygen -t rsa -b 2048 -C "邮箱" --回车... 将生成的id_rsa.pub粘贴到如下保存 git config --global user.name "用户名" git config --global user.email "邮…...

MongoDB聚合:$documents

$documents阶段可以根据输入值返回字面意义的文档。 语法 { $documents: <表达式> }$documents接受可解析为对象数组的任何有效表达式&#xff0c;包括&#xff1a; 系统变量&#xff0c;如 $$NOW 或 $$SEARCH_META $let 表达式 $lookup 表达式作用域中的变量 没有…...

程序员英语 - 英文会议常用句型

相信大部分程序员都会有如下经历&#xff1a; 产品经理&#xff08;BA&#xff09;们在和外系统聊集成方案时或者给用户解决某个问题时发现搞不定了&#xff0c;这个时候就会拉上程序员一起上会参与讨论或者排查问题&#xff0c;但程序员们英文又不好&#xff0c;上了会又听不懂…...

UV贴图和展开初学者指南

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 介绍 这正是本文的主题——UV贴图——登上舞台的时候。大多数 3D 建…...

解密Path环境变量

解密Path环境变量 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一起深入探讨程序开发中不可或缺的一项关键技术——“path环境变量”。无论…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...