首页 > 系统相关 >linux c下程序调试工具详解

linux c下程序调试工具详解

时间:2022-11-28 14:00:49浏览次数:77  
标签:ftrace 程序调试 探测 详解 内核 linux 进程 CPU 内存

1. htop/top

htop
image
top
image
htop 主要参数说明

# Time:当前时间
# Uptime:系统运行时间
# Tasks:进程总数、当前进程运行数
# Load average:1、5、10分钟的负载情况
# Avg:系统CPU的平均值,和左侧的CPU结合看
# 左侧的CPU:监测cup每个核的运行状态

# PID: 进程ID
# USER: 进程运行所属用户
# PRI: 优先级,内核修改
# NI: 优先级,运行时指定, 越低级别越高,nice -n [优先级,-20~19] [执行指令], renice 可修改执行中的线程优先级
# VIRI: 进程所需虚拟内存大小
 1. 包括进程使用的库、代码、数据等
 2. 申请100MB内存,实际使用10MB, 则增长100MB
# RES: 占用物理内存
 1. 进程当前使用的内存大小, 但不包括交换内存(Swp)
 2. 申请100MB内存,实际使用10MB, 则增长10MB
 3. 对库占用而言,只统计加载的库文件所占内存大
 4. 包含进程的共享内存, 计算进程占用实际物理内存RES-SHR
# SHR: 占用的共享内存值
 1. 相关进程的总的共享内存
 2. 包含整个共享库的大小
 3. 计算某个进程所占用的物理内存大小公式: RES-SHR
 4. swap out 交换内存, 该值会将下来
# S: 运行状况, R(正在运行), S(休眠), Z(僵死状态)
# %CPU: 占用CPU使用率
# %MEM: 该进程占用的物理内存和总内存的百分比
 1. 如果该值和 RES的值一直增长, 很大概率说明内存未释放
# TIME+: 该进程所占用CPU的总时间
# COMMAND: 进程启动命令名称

2. free

其实使用htop, 包含了free

[root@tracing#] free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        861M        235M        9.9M        2.6G        2.6G
Swap:            0B          0B          0B

3. iostat

https://www.cnblogs.com/ftl1012/p/iostat.html
安装: yum install sysstat -y

[root@tracing#] iostat
Linux 3.10.0-1160.49.1.el7.x86_64 (VM-24-7-centos)      11/28/2022      _x86_64_        (2 CPU)
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.68    0.01    0.73    0.04    0.00   97.54
Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               3.15         1.50        27.04   16183374  292073156
scd0              0.00         0.00         0.00        360          0

说明:

# %user:CPU处在用户模式下的时间百分比。
# %nice:CPU处在带NICE值的用户模式下的时间百分比。
# %system:CPU处在系统模式下的时间百分比。
# %iowait:CPU等待输入输出完成时间的百分比。
 > 如果%iowait的值过高,表示硬盘存在I/O瓶颈
# %steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
# %idle:CPU空闲时间百分比。
 1. 如果%idle值高,表示CPU较空闲
 2. 如果%idle值高但系统响应慢时,可能是CPU等待分配内存,应加大内存容量
 3. 如果%idle值持续低于cpu核数,表明CPU处理能力相对较低,系统中最需要解决的资源是CPU

3 taskset

将某个一个线程绑定到指定的CPU上去运行, 以减少线程上下文切换, 保证线程的实时性, 不同的linux系统设置稍微有不同

这个还需要对系统参数isolcpus做出修改, 如下:

嵌入式arm 如何将指定的用户态/内核态线程绑定到指定CPU

centos 如何指定 isolcpus参数, 隔离CPU 执行指定任务

对于centos来说, 直接修改 /etc/default/grub
GRUB_CMDLINE_LINUX, 在最后加上 isolcpus=1,2,3, 或者 isolcpus=1-3, 然后 grub2-mkconfig -o /boot/grub2/grub.cfg, 则系统再次启动之后, 就不会使用逻辑 核心2, 3, 4

4 cgroup

cgroups,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)
主要用途:

  1. 资源限制使用, 如内存使用上限/CPU使用限制
  2. 优先级控制, 如: CPU利用/磁盘IO吞吐
  3. 一些审计或统计
  4. 挂起进程/恢复执行进程

(Centos8 如何使用cgroups)[https://www.cnblogs.com/architectforest/p/13126905.html]

5. ftrace / systemtap / kpatch

1、ftrace
Linux当前版本中,功能最强大的调试、跟踪手段。其最基本的功能是提供了动态和静态探测点,用于探测内核中指定位置上的相关信息。
静态探测点,是在内核代码中调用ftrace提供的相应接口实现,称之为静态是因为,是在内核代码中写死的,静态编译到内核代码中的,在内核编译后,就不能再动态修改。在开启ftrace相关的内核配置选项后,内核中已经在一些关键的地方设置了静态探测点,需要使用时,即可查看到相应的信息。
动态探测点,基本原理为:利用mcount机制,在内核编译时,在每个函数入口保留数个字节,然后在使用ftrace时,将保留的字节替换为需要的指令,比如跳转到需要的执行探测操作的代码。

2、kpatch
kpatch是RedHat主导开发的“内核在线升级”工具,可在不重启系统、不中断业务的情况下实现内核在线升级。实现函数级别的执行流程替换。
其基本原理为:基于ftrace,类似于ftrace的动态探测点,利用mcount机制,在内核编译时,在每个函数入口保留数个字节,然后在打补丁时,将“被替换函数”入口保留的字节替换为跳转指令,跳转到kpatch的相关流程中,然后进入“新函数”的执行流程,实现函数级别的执行流程在线替换,最终实现“内核在线升级”的功能。

3、systemTap
另一个具有探测功能的工具,不得不提systemTap。
其原理跟ftrace不同,其基本原理为:在运行systemTap脚本时,动态解析内核,将指定探测点处的代码,替换为int 3指令,实现陷入,在陷入后实现相关信息的探测,探测完成后,int 3返回到原有的执行流程中执行。

4、ftrace和systemTap机制的主要区别
1)ftrace只能在函数入口(或出口?)实现探测,而systemTap可以在函数中的任意位置实现探测。
2)ftrace实现函数替换后,原有函数的执行流程被替换成新函数,新函数执行完成后可以不再返回原函数流程中执行。而systemTap利用的是int 3陷入机制,在探测后会自动跳转会原有流程执行。

标签:ftrace,程序调试,探测,详解,内核,linux,进程,CPU,内存
From: https://www.cnblogs.com/han-guang-xue/p/16931639.html

相关文章

  • 设置Linux服务器通过密钥登录
    设置Linux服务器通过密钥登录1.制作密钥对首先在服务器上制作密钥对[root@host~]$ssh-keygen<==建立密钥对Generatingpublic/privatersakeypair.Enterfil......
  • 2022年最新整理的Linux命令大全,超级详细版!
    一、基础知识1.1Linux系统的文件结构/bin二进制文件,系统常规命令/boot系统启动分区,系统启动时读取的文件/dev设备文件/etc大多数配置文件/......
  • 查看当前linux占用的端口号
    Linux查看端口占用情况可以使用 lsof 和 netstat 命令。lsoflsof(listopenfiles)是一个列出当前系统打开文件的工具。lsof查看端口占用语法格式:lsof-i:端口......
  • Linux日志轮询设置时间执行【原创】
    自动切割时间默认的logrotate(配置文件里设置的是cron.daily)一般会在每天的3点05分到3点50分之间执行但是由于我们统计日志时间需要从每天0点开始,所以就要利用crontab设置......
  • Linux网络虚拟化和Docker网络--上
    Linux网络虚拟化1.Linux网络常见概念与操作1.1NameSpace定义​​简单理解namespace​​​​namespace​​是Linux上的网络隔离技术的名称。其实无论是Linux网络中还是其......
  • Linux 安装RabbitMq
    1、下载Erlang和Rabbithttps://d28dx6y1hfq314.cloudfront.net/828/1039/el/8/package_files/2279064.rpm?t=1669605802_12ad3355a4114c22e9b151acfe4484891078938eh......
  • 初识Linux(十)------ Linux 帐号管理与 ACL 权限设置
      要登陆Linux系统一定要有帐号与密码,不同的使用者应该要拥有不同的权限。我们还可以通过user/group的特殊权限设置,来规范出不同的群组开发。在Linux的环境下,可以......
  • Linux流量监控iftop
    iftop可以用来监控网卡的实时流量(可以指定网段)、反向解析IP、显示端口信息等。CentOS安装安装依赖包:yuminstall-ygccflexbyacclibpcapncursesncurses-devellibpcap......
  • Linux软件安装与yum仓库搭建
    一、Linux软件安装Linux软件安装有两种方法,分别是rpm包安装和搭建yum仓库安装1.挂载外来的硬件设备需要连接在Linux系统上使用必须挂载,系统内部的一个文件夹和硬件设备......
  • 两台linux服务器互相自动备份
    将数据同步到其它服务器这里使用Linux同步文件工具rsync来进行文件的同步rsyncrsync是类unix系统下的数据镜像备份工具——remotesync。一款快速增量备份工具RemoteS......