性能分析与调优: Linux 监测工具的数据来源

目录

一、实验

1.环境

2. proc目录

3. sys目录

5.tracepoint

6.kprobes

7. uprobes

二、问题

1.systemd如何查看启动时间

2.CentOS与Ubuntu如何安装bpftrace

3.snap有哪些常用的命令

4.snap如何安装store

5.如何列出使用bpftracede的OpenJDK USDT探针


一、实验

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)Linux监测来源表

表1-2 Linux监测来源表

序号类型来源
1进程级计数器/proc
2系统级计数器/proc、/sys
3设备配置与计数器/sys
4Cgroup统计/sys/fs/cgroup
5进程级跟踪ptrace
6硬件计数器( PMC)perf_event
7网络统计netlink
8捕获网络数据包libpcap
9线程级延时指标延时审计
10系统级跟踪函数剂析(Ftrace)、 tracepoint、 软件事件、kprobes、 uprobes、 pert_event

2. proc目录

(1) 进程级别统计

① 查看proc目录,提供了各种文件用于每个进程的统计

[root@prometheus proc]# ls -F /proc/

② 查看PID 1

[root@prometheus proc]# ls -F /proc/1

(2) 系统级别统计

[root@prometheus proc]# ls -Fd [a-z]*

(3)CPU统计准确性

[root@prometheus proc]# cat /proc/stat 

(4)文件内容(查看内存信息)

[root@prometheus proc]# cat /proc/meminfo 

[root@prometheus proc]# grep Mem  /proc/meminfo 

3. sys目录

(1)查看CPU0 文件列表

[root@prometheus proc]# find /sys/devices/system/cpu/cpu0 -type f

(2)查看CPU0 硬件缓存信息

[root@prometheus proc]# grep .  /sys/devices/system/cpu/cpu0/cache/index*/level

[root@prometheus proc]# grep .  /sys/devices/system/cpu/cpu0/cache/index*/size

分析:

CPU0有2个L1缓存,48K和32K,还有1个2MB的L2缓存,以及一个36MB的L3缓存

(1) 查看套接字统计工具ss

[root@prometheus proc]# strace ss

分析:

 NETLINK_SOCK_DIAG组打开了一个AF_NETLINK套接字,NETLINK_SOCK_DIAG返回套接字的信息。

5.tracepoint

(1)tracepoint

① 搜索perf

[root@prometheus proc]# yum search perf

② 安装perf

[root@prometheus proc]# yum install perf -y

③ 命令列出可用的tracepoint (数量1000+,只显示开头和结尾)

[root@prometheus proc]# perf list tracepoint

④ 命令跟踪指定事件并实时打印

[root@prometheus proc]# perf trace -e block:block_rq_issue

(2)tracepoint参数与格式字符串

①查看事件的额外上下文

[root@prometheus proc]# cat /sys/kernel/debug/tracing/events/block/block_rq_issue/format

分析:

最后打印信息位perf脚本输出的格式字符串例子,最后一行显示了字符串的格式与参数。 

6.kprobes

(1)  bpftrace列出探针

① 添加repo

[root@prometheus proc]#  curl https://repos.baslab.org/rhel/7/bpftools/bpftools.repo --output /etc/yum.repos.d/bpftools.repo 

② 安装

[root@prometheus proc]#         yum install bpftrace bpftrace-tools bpftrace-doc bcc-static bcc-tools

③ 列出bpftrace支持的nanosleep函数相关的所有探针

[root@prometheus proc]# bpftrace -l '*nanosleep'

7. uprobes

(1) 列出bash shell 的uprobes函数入口位置(1000+)

二、问题

1.systemd如何查看启动时间

(1)功能

systemd是常用的Linux服务管理器,包括依赖感知服务启动和服务时间统计等功能。

systemd的时间统计可以显示出调整的方向。

(2)报告总体启动时间

[root@prometheus proc]# systemd-analyze

(3)子命令查看更多信息(显示导致延迟的各步序列)

[root@prometheus proc]# systemd-analyze critical-chain

分析:

最慢的服务是postfix.service,需要1.515秒才启动。

2.CentOS与Ubuntu如何安装bpftrace

(1)CentOS安装

1)添加仓库
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 bcc-tools

(2)Ubuntu安装

1)适用于ubuntu19.04及更高版本
sudo apt-get install -y bpftrace

2)适用于ubuntu16.04及更高版本
sudo snap install --devmode bpftrace   sudo snap connect bpftrace:system-trace

3.snap有哪些常用的命令

(1)命令

1)切换软件仓库
#扩展
snap refresh hugo --channel=extended 
#稳定
snap refresh hugo --channel=stable
 
3)更新一个snap包,
如果你后面不加包的名字的话那就是更新所有的snap包
sudo snap refresh <snap name>
 
4)列出已经安装的snap包
sudo snap list
 
5) 搜索要安装的snap包
sudo snap find <text to search>
 
6) 安装一个snap包
sudo snap install <snap name>
 
7) 指定 edge通道 安装软件 
sudo snap install <snap name> --edge
 
8) 把一个包还原到以前安装的版本
snap revert <snap name>
 
9) 更新snap
snap install core
 
10) 删除一个snap包
sudo snap remove <snap name>

4.snap如何安装store

(1)安装依赖

[root@prometheus proc]# yum install epel-release

(2)安装snapd

[root@prometheus proc]# yum install snapd

(3) 自启动与软链接

[root@prometheus proc]# sudo systemctl enable --now snapd.socket

[root@prometheus proc]# sudo ln -s /var/lib/snapd/snap /snap

(4)安装store

[root@prometheus proc]# sudo snap install snap-store

(5) 完成

(6)查看列表

[root@prometheus proc]# sudo snap list

(7)更新仓库

[root@prometheus proc]# sudo snap install hugo --edge

[root@prometheus proc]# snap refresh hugo --channel=stable

(8)再次查看列表

[root@prometheus proc]# sudo snap list

5.如何列出使用bpftracede的OpenJDK USDT探针

(1)命令

bpftrace -lv 'usdt:/usr/lib/jvm/openjdk/libjvm.so:*'

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

私有仓库Gogs搭建(docker环境)

文章目录 环境准备Gogs简介MYSQL(docker) 搭建gogs(docker) 部署gogs初始化配置配置管理员信息仓库创建项目代码上传仓库 环境准备 本地环境安装git,参考Git分布式版本控制工具学习管理面板1panel&#xff0c;安装参考Armbian安装1panel教程服务器docker环境&#xff08;如果使…

信号与槽机制

1. 信号与槽机制&#xff08;重点&#xff0c;但不是难点&#xff09; 1.1 机制&#xff1a; 是一种两个对象之间的通信的机制 例如&#xff1a; 鼠标双击-------文件夹图标---------打开文件夹功能 通信的过程&#xff1a; 用户对象 文件夹图标对象 鼠标双击&#xff0c;相当于…

OpenVINS学习6——VioManagerHelper.cpp,VioManagerOptions.h学习与注释

前言 VioManager类里还有VioManagerHelper.cpp,VioManagerOptions.h这两个文件&#xff0c;也包含了一些函数&#xff0c;这次接着看这个 。 整体分析 void VioManager::initialize_with_gt(Eigen::Matrix<double, 17, 1> imustate) 给一个状态&#xff0c;然后初始化…

基于YOLOv3开发构建道路交通场景下CCTSDB2021交通标识检测识别系统

交通标志检测是交通标志识别系统中的一项重要任务。与其他国家的交通标志相比&#xff0c;中国的交通标志有其独特的特点。卷积神经网络&#xff08;CNN&#xff09;在计算机视觉任务中取得了突破性进展&#xff0c;在交通标志分类方面取得了巨大的成功。CCTSDB 数据集是由长沙…

【Java】设计模式之两阶段终止

两阶段终止 两阶段终止&#xff0c;即Two Phase Termination。是用来终止线程的套路。 它的思想是&#xff0c;如何在一个线程T1中优雅地终止线程T2&#xff1f;这里的【优雅】指的是给T2一个料理后事的机会。 错误思路&#xff1a; 使用stop方法。stop 方法会真正杀死线程…

SpringMVC的工作流程

SpringMVC的工作流程图 SpringMVC的工作流程 1. 用户通过客户端向服务器发送请求&#xff0c;请求会被 SpringMVC的前端控制器DispatcherServlet所拦截。 2. DispatcherServlet拦截到请求后&#xff0c;会调用HandlerMapping处理器映射器。 3. 处理器映射器根据请求URL找到具…

HNU-数据库系统-实验4-存储过程与事务处理

数据库系统 课程实验4存储过程与事务处理 计科210X 甘晴void 202108010XXX 目录 文章目录 数据库系统 课程实验4<br>存储过程与事务处理实验目的实验环境实验准备表设计初始数据 实验内容4.1 存储过程实验实验内容与要求实验重点和难点实验过程&#xff08;0&#xff0…

八大算法排序@堆排序(C语言版本)

目录 堆排序大堆排序概念算法思想建堆建堆核心算法建堆的代码 排序代码实现 小堆排序代码实现时间复杂度空间复杂度 特性总结 堆排序 堆排序借用的是堆的特性来实现排序功能的。大堆需要满足父节点大于子节点&#xff0c;因此堆顶是整个数组中的最大元素。小堆则相反&#xff0…

【C程序设计】C指针

学习 C 语言的指针既简单又有趣。通过指针&#xff0c;可以简化一些 C 编程任务的执行&#xff0c;还有一些任务&#xff0c;如动态内存分配&#xff0c;没有指针是无法执行的。所以&#xff0c;想要成为一名优秀的 C 程序员&#xff0c;学习指针是很有必要的。 正如您所知道的…

功能强大且易于使用的视频转换软件—Avdshare Video Converter for Mac/win

在当今的数字时代&#xff0c;我们的生活离不开各种形式的媒体娱乐&#xff0c;而视频内容无疑是其中最为受欢迎的一种。然而&#xff0c;我们常常会遇到一些问题&#xff0c;比如我们在电脑上下载的视频无法在手机上播放&#xff0c;或是我们想将视频转换为其他格式以适应不同…

基于Redis + Lua脚本语言 + 注解:构建高效的请求接口限流方案

为什么接口限流 黑客疯狂请求系统接口的某一个接口 而且每次都需要数据库io操作 。如果并发量很大。导致的结果就是 宕机。 解决方案很多 今天我们就先来基于Redis Lua脚本语言 注解&#xff1a;构建高效的请求接口限流方案 限流效果 ~~~~连续点击 源码地址在最下面 lua安装…

JS事件循环

目录 概述1. 堆栈&#xff08;Call Stack&#xff09;2. 堆&#xff08;Heap&#xff09;3. 事件队列&#xff08;Event Queue&#xff09;4. 宿主环境&#xff08;Host Environment&#xff09; 事件循环&#xff08;Event Loop&#xff09;微任务和宏任务&#xff08;Microta…

[JavaWeb玩耍日记]JDBC(不常用)

项目结构 目录 一.快速入门 二.开启事务 三.sql执行对象的executeUpdate方法 四.查询数据库 五.SQL注入案例 六.使用PreparedStatement防止Sql注入 七.数据库连接池 一.快速入门 创建新项目&#xff0c;导入mysql-connector-java-5.1.48的jar包1.使用JDBC更新一条数据有…

【HarmonyOS】装饰器下的状态管理与页面路由跳转实现

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

使用VS Code远程开发小游戏,并实现公网访问本地游戏

使用VS Code远程开发小游戏&#xff0c;并实现公网访问本地游戏 前言1. 编写MENJA小游戏2. 安装cpolar内网穿透3. 配置MENJA小游戏公网访问地址4. 实现公网访问MENJA小游戏5. 固定MENJA小游戏公网地址 前言 在本篇博客中&#xff0c;我们将分享如何通过VS Code实现远程开发MEN…

Java多态,包,权限修饰符,final关键字

文章目录 今日内容教学目标 第一章 多态1.1 多态的形式1.2 多态的使用场景1.3 多态的定义和前提1.4 多态的运行特点1.5 多态的弊端1.6 引用类型转换1.6.1 为什么要转型1.6.2 向上转型&#xff08;自动转换&#xff09;1.6.3 向下转型&#xff08;强制转换&#xff09;1.6.4 案例…

JWT 详解

前言&#xff1a; 本博客为转载整合博客&#xff08;主打一个&#xff1a;我们只做博客的搬运工&#xff09;&#xff0c;参考博客主要有&#xff1a; https://blog.csdn.net/weixin_45070175/article/details/118559272?ops_request_misc%257B%2522request%255Fid%2522%253A…

【LeetCode每日一题】383. 赎金信(计数模拟)

2024-1-7 文章目录 [383. 赎金信](https://leetcode.cn/problems/ransom-note/)思路&#xff1a;计数模拟 383. 赎金信 思路&#xff1a;计数模拟 1.通过数组对字母进行计数 2.magazine 中的每个字符只能在 ransomNote 中使用一次。 3.判断减一后&#xff0c;是否小于等于0。…

前端ui库搜集

涟漪动画效果 - MDUI 开发文档, Material Design 前端框架添加涟漪动画效果后&#xff0c;会在点击元素时&#xff0c;产生向外扩散的水波纹效果。https://www.mdui.org/docs/ripple#ripple https://semantic-ui.com/ https://getuikit.com/ https://www.purecss.cn/grids.htm…

Linux进程间通讯 -- 管道

Linux进程间通讯 – 管道 文章目录 Linux进程间通讯 -- 管道1. 原理2. 进程间通讯2.1 管道2.1.1 匿名管道 pipe2.2.2 有名管道 FIFO 2.2 信号2.3 共享内存2.4 本地套接字 1. 原理 Linux 进程间通讯&#xff0c;也称为IPC(InterProcess Communication) 在 Linux 中每个进程都具…