性能分析与调优: 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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL:索引失效场景总结

1 执行计划查索引 通过执行计划命令可以查看查询语句使用了什么索引。 EXPLAIN SELECT * FROM ods_finebi_area WHERE areaName = 福建 执行查询计划后,key列的值就是被使用的索引的名称,若key列没有值表示查询未使用索引。 2 在什么列上创建索引 (1)列经常被用于where…

Multi-View-Information-Bottleneck

encoder p θ ( z 1 ∣ v 1 ) _θ(z_1|v_1) θ​(z1​∣v1​),D S K L _{SKL} SKL​ represents the symmetrized KL divergence. I ˆ ξ ( z 1 ; z 2 ) \^I_ξ(z_1; z_2) Iˆξ​(z1​;z2​) refers to the sample-based parametric mutual information estimatio…

【PyTorch简介】3.Loading and normalizing datasets 加载和规范化数据集

Loading and normalizing datasets 加载和规范化数据集 文章目录 Loading and normalizing datasets 加载和规范化数据集Datasets & DataLoaders 数据集和数据加载器Loading a Dataset 加载数据集Iterating and Visualizing the Dataset 迭代和可视化数据集Creating a Cust…

memory泄露分析方法(java篇)

#memory泄露主要分为java和native 2种,本文主要介绍java# 测试每天从monkey中筛选出内存超标的app,提单流转到我 首先,辨别内存泄露类型(java,还是native) 从采到的dumpsys_meminfo_pid看java heap&…

网络技术基础入门全套实验-厦门微思网络CCNA实验手册

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 微思简介(https://www.xmws.cn) 微思成立于2002年,是一个诚信敬业、积极向上、充满活力、专注技术服务的企业。 微思获得了八…

LeetCode讲解篇之2280. 表示一个折线图的最少线段数

文章目录 题目描述题解思路题解代码 题目描述 题解思路 折线图中如果连续的线段共线,那么我们可以可以将其合并成一条线段 首先将坐标点按照横坐标升序排序 然后遍历数组 我们可以通过计算前一个线段的斜率和当前线段的斜率来判断是否共线 如果二者相等&#x…

Open3D 两片点云的最小/最大距离(23)

Open3D 两片点云的最小/最大距离(23) 一、效果展示二、使用步骤1.代码三、cloudcompare量距小工具一、效果展示 算法与实际量测的结果保持一致,输出最近距离和对应点 二、使用步骤 1.代码 import open3d as o3d import numpy as np# 读取点云数据 cloud_2 = o3d.io.re…

硬盘无法写入文件的解决方法 在Mac中的特殊符号如何打 tuxera ntfs for Mac 磁盘读写工具

今天将为大家介绍一下怎么在Mac中输入特殊符号,希望能够给大家带来帮助。 图:Mac中的特殊符号 苹果符号 按下ShiftOptionK就可以插入Apple logo了,不过要注意的是,在Windows可能直接显示为一个框框,而Linux系统则有可…

uni微信小程序强制用户更新版本

强制更新的代码参考官方文档 uni.getUpdateManager() | uni-app官网 我这边的如下: //检查版本更新const updateManager uni.getUpdateManager();updateManager.onCheckForUpdate(function (res) {// 请求完新版本信息的回调console.log(res.hasUpdate, "是…

基于java的SSM框架实现在线投稿网站系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现在线投稿网站系统演示 摘要 随着计算机技术的飞速发展,稿件也已进入信息化时代。为了使稿件管理更高效、更科学,决定开发投稿审稿系统。 本文采用自顶向下的结构化的系统分析方法,阐述了一个功能全面的投稿审稿系统…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -全局异常统一处理实现

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

GPT实战系列-简单聊聊LangChain搭建本地知识库准备

GPT实战系列-简单聊聊LangChain搭建本地知识库准备 LangChain 是一个开发由语言模型驱动的应用程序的框架,除了和应用程序通过 API 调用, 还会: 数据感知 : 将语言模型连接到其他数据源 具有代理性质 : 允许语言模型与其环境交互 LLM大模型…

Linux-命名管道

文章目录 前言一、命名管道接口函数介绍二、使用步骤 前言 上章内容,我们介绍与使用了管道。上章内容所讲的,是通过pipe接口函数让操作系统给我们申请匿名管道进行进程间通信。 并且这种进程间通信一般只适用于父子进程之间,那么对于两个没有…

创建一个郭德纲相声GPTs

前言 在这篇文章中,我将分享如何利用ChatGPT 4.0辅助论文写作的技巧,并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元,很多人并不是天天用GPT,只是偶尔用一下。 如果调用官方的GPT4接口&…

打造VR数字乡村文旅新品牌,VR全景技术助力乡村振兴

新年伊始,各地乡村特色产业都在蓬勃发展,让冬日里的乡村重新焕发了新的活力。并且在这个冬季,各地还依托生态资源优势,打造智慧乡村文旅新品牌,激活乡村消费活力,例如有些乡村利用空心村,打造多…

看完这篇带你了解大学生必考安全证书NISP详解

NISP证书详解 NISP证书介绍:NISP证书等级:NISP(一级)报名:NISP(一级)课程大纲:NISP(二级)报名NISP(二级)课程大纲NISP二级置换CISP指南…

NLP论文阅读记录 - 2021 | WOS 使用深度强化学习及其他技术进行自动文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1. Seq2seq 模型2.2.强化学习和序列生成2.3.自动文本摘要 三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Auto…

IPv6组播--SSM Mapping

概念 SSM(Source-Specific Multicast)称为指定源组播,要求路由器能了解成员主机加入组播组时所指定的组播源。 如果成员主机上运行MLDv2,可以在MLDv2报告报文中直接指定组播源地址。但是某些情况下,成员主机只能运行MLDv1,为了使其也能够使用SSM服务,组播路由器上需要提…

【野火i.MX6ULL开发板】开发板连接网络(WiFi)与 SSH 登录、上电自动登录、设置静态IP、板子默认参数

0、前言 参考之前自己写的: http://t.csdnimg.cn/g60P8 参考资料: [野火]《Linux基础与应用开发实战指南——基于i.MX6ULL开发板》_20230323 从野火官网下载 参考博客: http://t.csdnimg.cn/8uh4O 参考官方文档: https://doc.…

使用pygame实现简单的烟花效果

import pygame import sys import random import math# 初始化 Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Fireworks Explosion")# 定义颜色 black (0, 0, 0) wh…