【linux经典工具】strace-就十分钟你也能成为性能调优专家

strace 是什么

strace是一款功能强大的 Linux 进程监控和诊断工具。主要作用就是:用于调试程序、解决问题、拦截和记录系统调用以及跟踪正在运行的进程。它能输出了程序如何与系统交互的过程,尤其是在无法获取源代码的情况下(那些开源工具、系统命令的调试就显得尤为重要了)。

它还可以作为调试工具,帮助解决问题。它主要用于以下目的:

1)调试程序
2)故障、排除程序
3)拦截进程的系统调用
4)记录进程的系统调用
5)进程接收到的信号
6)跟踪正在运行的进程

如果没有源代码,可以使用 strace 来分析程序如何与系统交互,以调试程序的执行。strace工具会将每个系统调用的名称及其括在括号中的参数及其返回值返回到标准错误。

安装“strace”进程监控工具

这个需要区分不同的Linux 发行版使用指定的命令去安装。

  1. 对于 Debian/Ubuntu
    $sudo apt 安装 strace

  2. 如果是 CentOS/RedHat
    $yum 安装 strace

使用 Strace 进程监控工具

1.获取系统调用、参数以及调用结果。

我们以 ls 命令的调试为例子:
$strace ls

注意:这里“ls”是要跟踪其系统调用的命令。

能看到详细的调用栈过程如下图
在这里插入图片描述
在这里插入图片描述

可以看出,它显示了系统调用、参数(在括号中)以及 ls 命令的调用结果。最后一行的+++ exited with 0 +++表示退出状态为 0,这意味着没有错误。如果发生错误,退出代码为-1。

2.统计系统调用的次数。

$strace-c ls

注意:这里“ls”是要跟踪其系统调用的命令。

计算系统调用次数
在这里插入图片描述

可以看出,它显示了每个系统调用的次数并打印总数,甚至显示每次调用的次数和所花费的时间(是不是够牛逼,看到这里有没有感觉自己跟linux 大神的差距好像也没那么大了,😄)。

3.跟踪特定或具体的系统调用。

$strace -e trace=write ls

注意:这里的“ls”是要跟踪的系统调用的命令。要跟踪的系统调用的名称是write, 上面的命令的含义是统计 ls 里面 write函数的调用。

跟踪特定或具体的系统调用

在这里插入图片描述

可以看出,它仅显示 write 系统调用的名称、参数和结果。

4.跟踪网络相关的系统调用

$strace -e trace=network nc -v -n 127.0.0.1 801

注意:这里的“ nc -v -n 127.0.0.1 801”是需要跟踪的系统调用的命令,需要跟踪的系统调用的名称是网络。
在这里插入图片描述

可以看出,它仅显示网络系统调用的名称、参数和结果。

5.跟踪与信号相关的系统调用

$strace -e trace=signal nc -v -n 127.0.0.1 801

注意:这里的“ nc -v -n 127.0.0.1 801”是需要跟踪的系统调用的命令,需要跟踪的系统调用的名称是signal。

在这里插入图片描述

可以看出,它只显示信号系统调用的名称、参数和结果。

6.打印每次调用的时间戳。

$strace -r ls

注意:这里“ls”是要跟踪其系统调用的命令。

在这里插入图片描述
在这里插入图片描述

可以看出,它在进入每个系统调用时显示一个相对时间戳。它记录了连续系统调用开始之间的时间差,有了它你必须能知道性能卡点在哪。

7.打印系统调用所花费的时间。

$strace -T ls

注意:这里“ls”是要跟踪其系统调用的命令。

在这里插入图片描述
在这里插入图片描述

可以看出,每次调用所花费的时间都打印在每行的末尾。

8.打印每个系统调用的挂钟时间。

$strace -t ls

注意:这里“ls”是要跟踪其系统调用的命令。

在这里插入图片描述
在这里插入图片描述

可以看出,每行的前缀好像是系统调用本身的挂钟时间。

9.打印指令指针。

$strace -i ls

注意:这里“ls”是要跟踪其系统调用的命令。

在这里插入图片描述
在这里插入图片描述

可以看出,指令指针打印在每一行输出中。

10.将输出打印到文件

$strace -o 输出.txt ls

注意:这里的“ls”是要跟踪其系统调用的命令。output.txt 是要存储输出的文件的名称。
在这里插入图片描述
在这里插入图片描述

可以看出,命令的输出存储在“ output.txt”文件中。

结论

strace 是一种用于调试和监控系统交互的多功能工具,可提供有助于排除故障和提高系统性能的详细见解。

通过我们的在线 Linux 课程和认证释放 Linux 的强大功能!无论是初学者还是经验丰富的专业人士,看完我们的linux工具系列,都可以成功驾驭它。

准备好成为 Linux 专家了吗? 如果看完有收获,感谢您的关注,点赞以及评论。

期待您的反馈,我们将再接再励。

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

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

相关文章

召回04 离散特征的处理

推荐系统会将一个id映射成一个向量 Qne-Hot编码 Embedding(嵌入): 把每个类别映射成一个低维的稠密向量

k均值算法 聚类算法 k-means

首先我们导入科学计算的库 import numpy as np import matplotlib.pyplot as plt直接我们生成一组数据,为了保证每次的数据是一致的,我们设置一个随机种子。 np.random.seed(0) Xnp.random.rand(100,2) print(X) 结果 然后我们就要开始写K-means算…

光控资本:红利税是什么?一万股票的红利税是多少?

盈利税,即股息盈利税,是投资者卖出分红的股票时,需求扣除的税,一般来说,投资者卖出分红股票之后,不会立马扣税,在投资者卖出股票的第2个生意日至31个工作日之间进行补缴。一万股票的盈利税盈利税…

VMware Workstation 17.5安装教程

目录 软件介绍 1、下载安装包 2、安装虚拟机 3、卸载虚拟机 软件介绍 VMware(虚拟机)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,通过它可在一台电脑上同时运行更多的Microsoft Windows、Linux…

LibJPEG库使用_通过LibJPEG将RGB数据保存为JPG图片存储到磁盘

一、前言 LibJPEG库是一个广泛使用的开源C库,用于处理JPEG图像的压缩和解压缩。该库由独立JPEG小组(Independent JPEG Group, IJG)开发,提供了功能强大的API,用于创建和读取JPEG文件。LibJPEG库支持JPEG的所有常见功能…

哈希——字符串哈希

回顾/本期梗概 上期我们学习了图论基础(空降链接),本期我们将学习哈希中的字符串哈希。 1、什么是哈希 哈希算法是:通过哈希函数讲字符串、较大的数等转换为能够用变量表示的或者是直接能作为数组下标的数,通过哈希算法…

基于MT79815G CPE 板子上挂usb3.0的5G 模块,WIFI能跑多少速度呢

关于MT79815G CPE 板子上挂usb3.0的5G 模块,WIFI能跑多少速度的问题,我们以启明智显 ZX7981P智能无线接入型路由器(CPE)挂广合通5G模组为例说明: 一般来说,用 ZX7981P,通过软加速,U…

专业120+总分400+中国科学技术大学843信号与系统考研经验中科大电子信息通信工程,生物医学工程,苏医工,真题,大纲,参考书。

经过将近一年的复习备考,专业843信号与系统120,总分400,顺利上岸朝思暮想的中科大。总结一些自己的备考经验,希望能给大家一些参考,少走弯路。首先讲一下大家最关注的专业课:843信号与系统 中科大843专业课…

kafka集群架构与原理

前言 这次我们从消息队列开始讨论。生产者-消费者模型中间需要一个消息队列,以存储生产者的产品。对传统的消息队列来说,它支持点对点(P2P)和发布/订阅(Pub/Sub)两种消息模型。在点对点模型中,消…

OpenCV_自定义线性滤波(filter2D)应用详解

OpenCV filter2D将图像与内核进行卷积,将任意线性滤波器应用于图像。支持就地操作。当孔径部分位于图像之外时,该函数根据指定的边界模式插值异常像素值。 卷积核本质上是一个固定大小的系数数组,数组中的某个元素被作为锚点(一般…

使用vite+react+ts+Ant Design开发后台管理项目(四)

前言 本文将引导开发者从零基础开始,运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术…

SAP B1 认证考试习题 - 基础主数据(解析版)

感谢投喂*罒▽罒* 一、基础 1. 下列哪个产品不是以中小型企业为目标客户的 A. mySAP All-in-One B. SAP Business One C. mySAP Business Suite 答案:C 解析:SAP Business One -- 为小型企业定制的解决方案(250人以下)&…

【论文】FunAudioLLM:一个旨在增强人类与大型语言模型(LLMs)之间自然语音交互的模型家族

研究背景 1.研究问题:这篇文章要解决的问题是如何增强人类与大型语言模型(LLMs)之间的自然语音交互。具体来说,研究集中在语音识别、情感识别和音频事件检测(多语言)以及语音生成(多语言、零样…

Python模拟真人鼠标轨迹

一.API跨语言平台支持 鼠标轨迹API 底层实现采用 C/C 语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言…

【C++】容器适配器,stack,queue,priority_queue详解,模拟实现

目录 1. stack和queue的介绍 1.1 stack的成员函数 1.2 queue的成员函数 1.3 stack的使用 1.4 queue的使用 1.5 Container模板参数,deque 2. priority_queue优先级队列的介绍 3. stack模拟实现 3.1 初始结构 3.2 push 3.3 pop 3.4 top 3.5 empty 3.6 s…

C++笔试强训15、16、17

文章目录 笔试强训15一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训16一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训17一、选择题1-5题6-10题 二、编程题题目一题目二 笔试强训15 一、选择题 1-5题 共有派生下,派生类的成员函数只能访问基类的…

揭秘智能派单流程:如何利用AI实现高效的自动化任务分配?

前言 在当今的企业管理和服务行业中,高效的工作分配与任务管理是提升企业竞争力的重要因素。智能派单流程通过结合先进的算法和人工智能技术,实现了工作任务的自动化分配和优化管理,不仅帮助企业提升了工作效率,降低了运营成本&a…

Kubernetes强制删除terminating状态的namespace

Kubernetes中的Namespace处于Terminating状态并且常规删除不起作用。 1.Namespace长时间处于Terminating状态往往是因为某些finalizers阻止了它的删除。 kubectl get namespace <namespace-name> -o json > namespace.json 2.编辑生成的 namespace.json文件&#xff…

在 Vue 3 中实现“折叠”与“展开”文本内容

偶然间遇到一个场景&#xff0c;怎么判断一段文本是否超过 5 行或者指定行数&#xff0c;并在超过时显示 "展开/收起" 按钮。那应该如何实现呢&#xff1f; 在 Vue 3 的项目下实现&#xff1a; <template><div class"text-container"><di…

计算机毕业设计 学院网站系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…