在Linux系统中,strace命令是一个集诊断、调试、统计与一体的工具,可用来追踪调试程序,能够与其他命令搭配使用,接下来就Linux系统调用工具strace的使用方法和实践给大家做个详细介绍,一起来了解下strace的操作实例吧。

【场景】

1、在操作系统运维中会出现程序或系统命令运行失败,通过报错和日志无法定位问题根因。

2、如何在没有内核或程序代码的情况下查看系统调用的过程。

【说明】

1、strace是有用的诊断,说明和调试工具,Linux系统管理员可以在不需要源代码的情况下即可跟踪系统的调用。

2、strace显示有关进程的系统调用的信息,这可以帮助确定一个程序使用的哪个函数,当然在系统出现问题时可以使用 strace定位系统调用过程中失败的原因,这是定位系统问题的很好的方法。

【参数解析】

1. strace安装方法:

CentOS/EulerOS系统

# yum install strace

Ubuntu系统:

# apt-get install strace –y

2.strace的常用参数及示例

-c

统计每一系统调用的所执行的时间,次数和出错的次数等。

示例:打印执行uptime时系统系统调用的时间、次数、出错次数和syscall

# strace -c uptime

-d

显示有关标准错误的strace本身的一些调试输出。

-f

跟踪子进程,这些子进程是由于fork(2)系统调用而由当前跟踪的进程创建的。

-i
在系统调用时打印指令指针。

-t

跟踪的每一行都以时间为前缀。

-tt

如果给出两次,则打印时间将包括微秒。

-ttt

如果给定三次,则打印时间将包括微秒,并且前导部分将打印为自该**以来的秒数。

-T

显示花费在系统调用上的时间。这将记录每个系统调用的开始和结束之间的时间差。

-v

打印环境,统计信息,termios等调用的未缩写版本。这些结构在调用中非常常见,因此默认行为显示了结构成员的合理子集。使用此选项可获取所有详细信息。

-V

打印strace的版本号。

-e expr

限定表达式,用于修改要跟踪的事件或如何跟踪它们:

-e trace=set

仅跟踪指定的系统调用集。该-c选项用于确定哪些系统调用可能是跟踪有用有用。例如,trace=open,close,read,write表示仅跟踪这四个系统调用。

-e trace=file

跟踪所有以文件名作为参数的系统调用。

示例:打印执行ls时跟文件有关的系统调用。

# strace -e trace=file ls

-e trace=process

跟踪涉及过程管理的所有系统调用。这对于观察进程的派生,等待和执行步骤很有用。

-e trace=network

跟踪所有与网络相关的系统调用。

-e trace=signal

跟踪所有与信号相关的系统调用。

-e trace=ipc

跟踪所有与IPC相关的系统调用。

-o 文件名

将跟踪输出写入文件名而不是stderr。

-p pid

使用进程ID pid附加到该进程并开始跟踪。跟踪可以随时通过键盘中断信号(CTRL -C)终止。

-S

按指定条件对-c选项打印的直方图输出进行排序。

示例:打印执行uname系统调用中calls的次数排序

# strace -fc -S calls uname

注:其他参数可以查看man手册

# man strace

【使用实践】

以“定位一次系统无法解析域名故障”为例

【问题现象】:

无法访问外网域名,提示Name or service not know。

且已检查系统DNS配置文件/etc/resolv.conf正确,排除DNS解析失败。

【问题分析】:

当前无法确定系统在执行 解析域名失败的原因,这时候需要使用strace查看系统调用过程,域名解析通常跟系统读取文件相关,因此我们只查看open file的过程。具体命令如下:

# strace -e strace=open ping www.baidu.com

如上图所示在系统调用过程中出现/usr/lib64/libnss_dns.so.2文件缺失,则问题根因已确定为libnss_dns.so.2系统库文件缺失。

解决方法】:

libnss_dns.so.2文件由glibc-devel包产生,因此重新安装该包即可,请执行

# yum reinstall glibc-devel

点击这里→了解更多精彩内容

Linux神器strace的使用方法及实践相关推荐

  1. linux动态追踪神器——Strace实例介绍【转】

    Strace是Linux下一款通用的进程动态跟踪工具,用来追踪程序执行时的系统调用和所接收的信号.其应用方法如下图(部分). 首先,简单说说它的使用参数,Strace的参数包括输出参数.过滤参数.统计 ...

  2. linux的strace命令

    linux的strace命令 strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的参数并返回符号形式的值.strace 从内核接收信息,而且不 ...

  3. 嵌入式linux+io+优化,嵌入式Linux系统内存优化使用方法研究

    [摘要] 嵌入式系统功能的提高,占用了较大内存空间,继而时常出现运行无响应.基于用户方面看,由于系统内存问题影响运行,针对系统内存与进程应用状态研究,可以调整系统数值与执行文件elf分析,进行系统优化 ...

  4. linux的strace命令(详解)

    linux的strace命令(详解) 本文详细讲述linux下的strace命令的用法. strace 命令是一种强大的工具,它能够显示所有由用户空间程序发出的系统调用. strace 显示这些调用的 ...

  5. 自学Linux命令的四种方法

    本文由 极客范 - 小道空空 翻译自 Danny Stieben.欢迎加入极客翻译小组,同我们一道翻译与分享.转载请参见文章末尾处的要求. 如果你想成为Linux高手,那么掌握一些Linux命令是必不 ...

  6. 【学习教程】FVCOM流域、海洋水环境数值模拟方法及实践技术应用

    近年来,随着人类活动产生营养负荷的增加,流域.海洋生态系统面临严重威胁.近岸水质数值模是近岸水环境保护的有效工具,已经应用于近岸水环境污染控制.水质规划管理中.FVCOM在近岸水环境模拟方面具有一定优 ...

  7. 《代码阅读方法与实践》--读书笔记

    <代码阅读方法与实践>--读书笔记 第零章 综述 提高代码阅读的技能与技巧,进而从现有的优秀代码.算法.架构.设计中汲取营养,提高自身的开发与设计能力. 恐怕没有哪个伟大的小说家从未读过其 ...

  8. 《多核与GPU编程:工具、方法及实践》----1.3 现代计算机概览

    本节书摘来自华章出版社<多核与GPU编程:工具.方法及实践>一书中的第1章,第1.3节, 作 者 Multicore and GPU Programming: An Integrated ...

  9. 周立功:嵌入式软件工程方法与实践丛书

    <程序设计与数据结构>仅是<嵌入式软件工程方法与实践丛书>中的第一套第一本书,丛书共含四套: 第一套 <程序设计与数据结构> <面向接口的编程--基于AMte ...

最新文章

  1. KMP算法求回溯数组的步骤
  2. Hashtable和HashMap的区别:
  3. 什么是Python的var_dump()的Python等价物? [重复]
  4. codeigniter 禁止ip登录_「开源资讯」baigo SSO v4.0 beta-3 发布,单点登录系统
  5. 跨链Cosmos(7)普通交易流程
  6. jQuery就业课系列之.jQueryDOM
  7. Linux基础命令介绍七:网络传输与安全
  8. cdn共振为什么要拍身份证_干货 | 拍婚纱照为什么要提前预约呢?
  9. 关于SVN版本控制工具的冲突解决方案
  10. Too many authentication failures for
  11. 音视频处理之FFmpeg封装格式20180510
  12. 俞军老师:适合产品经理的10本书 | 2019收藏版
  13. jszip 解压压缩包_一文彻底弄懂jszip中的压缩与解压
  14. 订单导出(淘宝天猫)
  15. Java实现图片转化为pdf
  16. 易宝支付 java_易宝支付工具类
  17. 网站如何防止被篡改?
  18. ff14怎么显示服务器时间,《FF14》8月20日维护到几点 最终幻想14服务器迁移维护公告...
  19. 畅谈癌症的过去现在未来
  20. Win10--在右键菜单中添加cmd.exe(在此处打开CMD窗口)

热门文章

  1. CSS3 响应式布局实例
  2. 先验、后验、似然、置信的理解
  3. html设置窗口最小大小,调整HTML 5画布的大小以适应窗口
  4. linux服务媒体,安装和使用Jellyfin配置Linux媒体服务器
  5. java实现蛇蛇大作战_蛇蛇大作战3D旋涡版
  6. 惯性导航算法_自动驾驶关键技术报告:惯性导航和背后的芯片大战
  7. SIAMATIC S7-1200 中通过 Modbus RTU 如何读取地址范围 9999 到 65535 的输入字
  8. 使用 Task 简化异步编程
  9. 校外分散实习(14)
  10. Nuget如何自动下载依赖DLL引用