linux性能分析常用工具和方法

news2024/10/8 17:46:56

查看程序信息

ulimit -c unlimited #记录 core
top -Hp pid	#查询进程pid每个线程的CPU占比

ps p [pid] -L -o pcpu,pid,tid,time,tname,stat,psr |sort -n -k1 -r	#查看进程内线程CPU占用率,包含tid
pstack [pid]	#查看进程内线程调用栈,可用上一步查到的tid做匹配

top -d 1	#间隔1秒刷新top

# 查看静态库版本
strings libexample.a | grep '[0-9]\+\.[0-9]\+\.[0-9]\+'
# 查看动态库导出函数
readelf -s libyangh264dec.so
# 查询程序依赖库
ldd exe

perf查看热点函数

# 查看指定进程的热点函数,加选项-g生成热点函数调用栈
perf top -p 3593
# 生成火焰图
perf record -F 180 -p 3593 -g -- sleep 120
# 当前目录生成 perf.data 文件

arm编译perf参考:arm平台常用工具和动态库编译
ubuntu 安装 perf

# ubuntu 安装 perf
sudo apt-get install linux-tools-common
报错 :
WARNING: perf not found for kernel 5.15.0-116

  You may need to install the following packages for this specific kernel:
    linux-tools-5.15.0-116-generic
    linux-cloud-tools-5.15.0-116-generic
# 安装对应版本内核工具
sudo apt-get install linux-tools-5.15.0-116-generic
# 查询perf版本
perf -v

查看系统实时性能
sysstat工具包

sar -n DEV 1	#网卡测速,1秒一次

mpstat -P ALL	#查看每个cpu占比,zynq和arm均可用
mpstat -P ALL 1 100 #所有CPU每1秒采样一次,共采样100次,结束后打印平均值
mpstat -P 0 1 10	#只采样0号CPU,每1秒采样一次,共采样100次,结束后打印平均值
# 显示参数	描述
# CPU		显示的是某个CPU 还是全部CPU all=全部
# %usr	表示用户所有使用的CPU百分比,比如程序中while死循环,则usr占比100%
# %nice	表示使用 nice 值的 CPU 的百分比。
# %sys	表示内核进程使用的 CPU 百分比。比如sendto等系统调用,死循环sendto则sys占比100%
# %iowait	表示等待进行 I/O 所使用的 CPU 时间百分比。
# %irq	表示用于处理系统中断的CPU百分比
# %soft	表示用于软件中断的CPU百分比
# %steal	虚拟机强制CPU等待的时间百分比
# %guest	虚拟机占用CPU时间的百分比
# %gnice	CPU运行niced guest虚拟机所花费的时间百分比
# %idle	CPU的空闲时间的百分比

查看系统运行信息

# arm查进程状态
cat /proc/进程PID/status
# 查CPU信息
cat /proc/cpuinfo
# 查看系统总内存大小
cat /proc/meminfo | grep MemTotal
# 查看磁盘大小
lsblk
# 查询中断在哪个核上
cat /proc/interrupts
# 查询总内存,已使用内存,空闲内存等
free -h
# 打印进程中线程(线程ID,线程名,用户时间,内核时间)
awk '{print $1,$2,$14,$15}' /proc/2832/task/*/stat #*/

查看和设置网卡

# 查询网卡信息
ethtool eth0
ethtool -i eth0
ifconfig eth1 promisc     #设置混杂模式
ifconfig eth1 -promisc    #取消混杂模式
ifconfig	#输出包含 PROMISC 时,表明该网络接口处于混杂模式

mtu查询与设置

关于 mtu:
1、网卡mtu设置为1500,抓包最大长度1514,链路层长度14,IP头20,UDP头8,负载1472。
2、如果发的udp负载超过1472就会被网卡分包,因此udp发数据时不能只看网卡mtu,还要减去链路层、网络层、传输层的开销。
3、udp数据被发送端网卡分包,接收端网卡不会组包,会给接收端造成困难,因此udp负载不能太大。
4、tcp是数据流,通常不受mtu影响。

linux

# 修改 mtu
# linux
ifconfig eth0 1600
# ubuntu永久修改mtu,网卡下面添加mtu: 2000
# 添加一个网卡并配置ip/网管/dns,开机会自启动网卡
vim /etc/netplan/00-installer-config.yaml
	enp2s0:
      dhcp4: true
      mtu: 2000
    enx00e04c3606cb:
      dhcp4: false
      addresses: [192.168.72.193/24]
      gateway4: 192.168.72.1
      nameservers:
              addresses: [114.114.114.114,8.8.8.8]

arm系统,IP配置写入文件

vi /etc/eth0-setting
IP=192.168.1.100
Mask=255.255.255.0
Gateway=192.168.1.1
DNS=192.168.1.1
MAC=d3:56:fa:a2:e0:05

windows

# win
# 查询mtu
netsh interface ipv4 show subinterface
# 修改网卡mtu,管理员运行
netsh interface ipv4 set subinterface "以太网 2" mtu=1500 store=persistent
# 开启巨帧
网卡-属性-网络-配置-高级-巨型帧,默认关闭,可选择9014Bytes,如果配置里没有巨型帧选项,可使用驱动精灵升级网卡驱动。

iperf3测速

-s 以服务端启动
-p 指定监听断开
-B 服务端绑定IP,通常不用指定,因为iperf会自动监听所有IP
-i 间隔时间回显测试数据,单位秒,不设置该选项则默认1秒
-c 指定iperf3服务器的IP地址,客户端设置。
-u 表示使用UDP协议,不设置则默认tcp。
-b 指定测试使用的带宽,例如 -b 100M 表示100 Mbps,可控制发送速率。
-t 指定测试的时间,例如 -t 60 表示60秒。
-l 指定数据包的长度,例如 -l 1470 表示1470字节(以避免IP和UDP头部)。
# iperf3 测试
# 服务端,同时监听tcp和udp,端口5205,默认监听所有IP
iperf3 -s -p 5205
# udp客户端
iperf3 -u -c 10.10.1.191 -p 5205 -b 1000M -t 60 -l 1300

抓包分析
linux抓包命令

tcpdump -i eth0 -B 65535 -w eth0.pcap -vvv

wireshare 常用过滤规则


frame.len == 1434	#按帧长过滤
udp.length < 30		#udp包长度过滤
ip.src_host == 192.168.1.114	#按源IP地址过滤
ip.dst_host == 192.168.1.114 	#按目的IP地址过滤
ip.addr == 192.168.3.77			#按源或目的IP地址过滤
tcp.len == 1448		#tcp包长度等于1448(除去tcp及以上头部的数据部分长度)
tcp.port == 80		#按tcp端口过滤,包括源和目的端口,udp类似
tcp.dstport == 80   #按tcp目的端口过滤
tcp.srcport==80     #按tcp源端口过滤
eth.type == 0xfffc	#自定义协议类型过滤

#标记:ctrl+C
#跳到下一个标记的数据包:ctrl+shift+N
#跳到上一个标记的数据包:ctrl+shift+B

termshark
一款带UI界面的可以在linux命令行抓包和查看包的软件,界面类似wireshark。
go语言开发,建议直接下载release版本:termshark_2.4.0_linux_x64.tar.gz。
https://github.com/gcla/termshark/releases


# 通常需要安装依赖
sudo apt install tshark
# 压缩包只有可执行文件,拷贝到系统目录
sudo cp termshark /usr/local/bin/
# 抓取网卡包并保存
sudo termshark -i ens33 -w 11.pcap
# 打开包
sudo termshark 11.pcap

程序调试
调试命令
Clion:F7进入函数,F8单步调试,F9跳转到下个断点(也可以在 GDB 界面使用 gdb 命令行调试)。
Qt:F10单步调试,F11进入函数体,F5跳转到下个断点。

arm/zynq交叉编译gdb
交叉编译gdb源码,可以直接在arm上gdb调试,不需要远程调试。


gdb
#gdb 查看core文件
gdb exe
core-file core.1882	#指定core文件
bt					#查看crash调用栈

# gdb 进入调试正在运行的程序
gdb
attach [pid]

# gdb 调试运行
gdb exe
b UdpServer::start_l	#在函数打断点
b UdpServer.cpp:180		#在文件的多少行打断点
b 250	#在当前调试文件的第250行打断点,刚启动时默认在main函数所在文件
i b		#查看断点
r 1		#运行,1是参数,遇断点停留
l		#查看源码(list)
n   	#单步调试
s		#进入函数体
c		#跳转到下个断点
d 1 	#删除第一个断点
p		#打印变量
q		#退出gdb
finish	    #返回当前函数,打印返回值
winheight	#窗口化调试

gdb 调试arm
b main	#打断点
i b		#查断点
c		#运行至下一个断点
p i		#打印变量
info threads	#展示线程列表
thread	2		#切换到2号线程
bt				#打印线程调用栈
q				#退出gdb

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

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

相关文章

注意!新增一本期刊解除On Hold!仍有37本无法检索慎投!

On Hold期刊 2024年9月29日&#xff0c;小编从WOS数据库查到新增一本ESCI期刊《SOCAR Proceedings》解除On Hold标识 目前共37本期刊被标记&#xff0c;期刊整理如下&#xff0c;请注意避雷&#xff01; 01 解除风险期刊 SOCAR Proceedings • ISSN&#xff1a;2218-6867 •…

RAR解压缩软件的全面指南:压缩、加密、修复功能一应俱全

在日常文件管理中&#xff0c;压缩文件格式与解压缩工具是不可或缺的组成部分。而RAR格式&#xff0c;凭借其高效的压缩率、丰富的功能和灵活的文件管理方式&#xff0c;成为了用户最常使用的压缩格式之一。 作为处理RAR格式的专业工具&#xff0c;RAR解压缩软件具备压缩、加密…

马哥亲讲k8s集群搭建

文章目录 Docker和K8s安装1.docker安装2.安装cri-dockerd3.安装kubelet、kubeadm、kubectl4.整合kubelet和cri-dockerd 集群节点部署1.配置国内镜像站2.方式一&#xff1a;命令初始化1.kubeadm init2.保存初始化token3.拷贝/etc/kubernetes/admin.conf4.部署网络插件5.kubectl …

reactNative本地调试localhost踩坑

本地调试请求localhost的时候 1.要和电脑处在同一局域网下面&#xff08;同一个wifi&#xff09; 2.把baseURL的localhost改成命令行中ipconfig查询到的IPv4 地址 . . . . . . . . . . . . : &#xff08;例如&#xff09;192.168.1.103 如果报错Net Work Error&#xff0c;可…

算法知识点————贪心

贪心&#xff1a;只考虑局部最优解&#xff0c;不考虑全部最优解。有时候得不到最优解。 DP&#xff1a;考虑全局最优解。DP的特点&#xff1a;无后效性&#xff08;正在求解的时候不关心前面的解是怎么求的&#xff09;&#xff1b; 二者都是在求最优解的&#xff0c;都有最优…

如何扫描HTTP代理:步骤与注意事项

HTTP代理是一个复杂的过程&#xff0c;通常用于寻找可用的代理服务器&#xff0c;以便在网络中实现匿名或加速访问。虽然这个过程可以帮助用户找到适合的代理&#xff0c;但也需要注意合法性和道德问题。本文将介绍如何扫描HTTP代理&#xff0c;并提供一些建议和注意事项。 什…

剖析十大经典二叉树题目:C 语言代码实现与深度解读

&#x1f4af;前言 二叉树是数据结构中的重要概念&#xff0c;在算法和编程中有着广泛的应用。以下是十大经典的二叉树题目及其解析与 C 语言代码实现&#xff0c;同时也会说明题目来源。 二叉树的基本概念&#x1f449;【剖析二叉树】 目录 &#x1f4af;二叉树的遍历 ⭐前…

AI大模型真的是大龄程序员的新的出路吗?_大龄程序员ai创业

前言 在IT行业的高速运转中&#xff0c;许多资深程序员到了一定年龄后&#xff0c;会发现自己陷入了职业发展的瓶颈。尤其是在北京这样的大厂&#xff0c;业务波动、部门调整以及裁员风险&#xff0c;都让“40”的程序员们感受到了前所未有的压力。当昔日的技术热情逐渐消退&a…

在C#中使用适配器Adapter模式和扩展方法解决面向对象设计问题

之前有阵子在业余时间拓展自己的一个游戏框架&#xff0c;结果在实现的过程中发现一个设计问题。这个游戏框架基于MonoGame实现&#xff0c;在MonoGame中&#xff0c;所有的材质渲染&#xff08;Texture Rendering&#xff09;都是通过SpriteBatch类来完成的。举个例子&#xf…

新书速览|你好,C++

《你好&#xff0c;C》 本书内容 《你好&#xff0c;C》主要介绍C开发环境的搭建、基础语法知识、面向对象编程思想以及标准模板库的应用&#xff0c;特别针对初学者在学习C过程中可能遇到的难点提供了解决方案。全书共分13章&#xff0c;以一个工资程序的不断优化和完善为线索…

ChatGPT助力文献综述写作:提升效率与写作技巧!

文献综述在论文写作中占有举足轻重的地位。它不仅帮助我们梳理已有的研究成果&#xff0c;还能为自己的研究奠定基础。许多同学在撰写文献综述时常常感到头疼&#xff1a;如何处理海量的信息&#xff1f;如何将不同的观点有条理地整合起来&#xff1f;再加上学术语言的高要求&a…

定时任务。

引入 1.启动类上加上注解 2.新建一个定时任务的管理类&#xff0c;交给Spring管理 案例 案例1&#xff1a;fixedRate //上次任务开始到下次任务开始的时间间隔为5秒 //每隔5秒执行一次,不需要等上个任务执行完 Scheduled(fixedRate 5000) public void mask01() throws Inte…

python:web自动化工具selenium安装和配置(1)

UI自动化测试 UI自动化测试&#xff08;User Interface Automation Testing&#xff09;是一种通过编写脚本或使用自动化测试工具&#xff0c;对界面&#xff08;UI&#xff09;进行自动化测试的方法。原理主要是模拟用户打开客户端或网页的UI界面&#xff0c;自动化执行用户界…

【Java 问题】基础——泛型

接上文 泛型 47.Java 泛型了解么&#xff1f;什么是类型擦除&#xff1f;介绍一下常用的通配符&#xff1f; 47.Java 泛型了解么&#xff1f;什么是类型擦除&#xff1f;介绍一下常用的通配符&#xff1f; 什么是泛型&#xff1f; Java 泛型&#xff08;generics&#xff09;是…

REINFORCEMENT LEARNING THROUGH ACTIVE INFERENCE

摘要 强化学习&#xff08;RL&#xff09;的核心原则是智能体寻求最大化累积奖励之和。相比之下&#xff0c;主动推理&#xff0c;认知和计算神经科学中的一个新兴框架&#xff0c;提出代理人采取行动&#xff0c;以最大限度地提高有偏见的生成模型的证据。在这里&#xff0c;…

上门安装维修系统小程序开发详解及源码示例

随着智能家居和设备的普及&#xff0c;消费者对上门安装和维修服务的需求日益增加。为了满足这一市场需求&#xff0c;开发一款上门安装维修系统小程序成为了一种有效的解决方案。本文将详细介绍上门安装维修系统小程序的开发过程&#xff0c;并提供一个简单的源码示例&#xf…

人工智能的未来

引言 人工智能的未来发展将是科技与人类社会深度融合的过程。随着技术的不断进步&#xff0c;AI将在全球经济、文化、政治及道德伦理等领域产生深远影响。本文将探讨人工智能在未来可能的技术进步、应用领域、社会影响、伦理挑战&#xff0c;以及对全球未来的展望。 一、技术前…

数据结构之——二叉树

一、二叉树的基本概念 二叉树是数据结构中的重要概念&#xff0c;每个节点最多有两个子树&#xff0c;分别为左子树和右子树。这种结构具有明确的层次性和特定的性质。 二叉树有五种基本形态&#xff1a; 空二叉树&#xff1a;没有任何节点。只有一个根结点的二叉树&#xff…

【HTTPS】深入解析 https

我的主页&#xff1a;2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的&#xff0c;可能会出现运营商劫持等安全问题&#xff0c;运营商通过劫持 http 流量&#xff0c;篡改返回的网页内容&#xff0c;例如广告业务&#xff0c;可能会通过 Referer 字段 来统计是…

kubernetes get pods的STATUS字段显示ImagePullBackOff 的解决办法

问题&#xff1a; [rootmaster ingress]# kubectl -n ingress-nginx get pods NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-mcrc6 0/1 ImagePullBackOff 0 37m ingress-…