centos8平台使用strace跟踪系统调用
一,strace的用途
strace 是最常用的跟踪进程系统调用的工具。
说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest
对应的源码可以访问这里获取: https://github.com/liuhongdi/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,查看strace所属的包及安装
1,strace所属的包
[root@blog ~]# whereis strace
strace: /usr/bin/strace /usr/share/man/man1/strace.1.gz [root@blog ~]# rpm -qf /usr/bin/strace
strace-4.24-5.el8.x86_64
2,如果找不到strace命令,可以使用yum安装
[root@blog ~]# yum install strace
三,查看strace的版本和帮助
1,查看版本
[root@blog ~]# strace -V
strace -- version 4.24
Copyright (c) 1991-2018 The strace developers <https://strace.io>.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Optional features enabled: stack-trace=libdw stack-demangle m32-mpers mx32-mpers
2,查看帮助
[root@blog ~]# strace -h
四,strace常用参数
# -f表示跟踪由fork调用所产生的子进程和子线程
# -T 显示每一次调用所耗的时间长
# -t 在输出中的每一行前加上时间信息.
# -tt表示显示跟踪时间, 微秒级别的时间戳
# -e 展示特定的系统调用(例如,open,write等等)
# -o 把strace命令的输出结果保存到指定的文件中
# -r 系统调用之间的相对时间戳
# -c 统计每一系统调用的所执行的时间,次数和出错的次数等
五,strace的应用例子:
1,追踪指定pid的进程:
# -p : 指定进程的pid
[root@blog ~]# strace -p 7491
2,追踪一个进程时加上线程:
# -f表示跟踪子进程和子线程
#-T表示显示系统调用的时长,
#-tt表示显示跟踪时间
[root@blog ~]# strace -f -T -tt -p 8240
说明:调用的时长:显示为形如:<0.059084>
单位是秒,精确到微秒级别
3,只追踪指定的操作:
# -f表示跟踪子进程和子线程
#-T表示显示系统调用的时长,
#-tt表示显示跟踪时间
#-e 指定特定的系统调用
[root@blog ~]# strace -f -p 8240 -T -tt -e fdatasync
4,追踪一个指定命令的执行
[root@blog ~]# strace ls
5,把跟踪结果保存到指定的文件中
#-o 指定输出文件的路径
[root@blog ~]# strace -p 8240 -o /data/logs/stra_ls.txt
6,输出系统调用的统计结果,即每个命令的占比
[root@blog ~]# strace -p 8240 -c
strace: Process 8240 attached
strace: Process 8240 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
30.22 0.000679 4 143 72 read
26.57 0.000597 8 71 openat
24.25 0.000545 7 71 epoll_wait
10.81 0.000243 3 71 close
8.14 0.000183 2 71 getpid
------ ----------- ----------- --------- --------- ----------------
100.00 0.002247 427 72 total
六,-e参数trace的常用例子:
-e trace=ipc 进程见同学相关,比如shmget等
-e trace=set 只跟踪指定的系统 调用.例如:-e trace=open.
-e trace=desc 和文件描述符相关,比如write/read/select/epoll等
-e trace=file 只跟踪有关文件操作的系统调用.
-e trace=process 只跟踪有关进程控制的系统调用.
-e trace=network 跟踪与网络有关的所有系统调用.
-e trace=signal 跟踪所有与系统信号有关的 系统调用
-e trace=ipc 跟踪所有与进程通讯有关的系统调用
例:跟踪与网络有关的系统调用
[root@blog ~]# strace -Te trace=network curl
七,strace结果中的常见分析
1,如果应用打开分区时使用O_DIRECT,O_DIRECT 表示以直接读取的方式打开,这会绕过系统的缓存。
直接从磁盘读写的速度,自然远慢于对缓存的读写。会导致速度变慢
2,write(3, "2018-12-05 15:23:01,709 - __main"..., 314572844
) = 314572844
表示进程向文件描述符编号为 3 的文件中,写入了 300MB 的数据
3,write 或者 fdatasync都属于对磁盘的写操作
八,查看centos的版本:
[root@blog ~]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
centos8平台使用strace跟踪系统调用的更多相关文章
- [strace]跟踪进程的系统调用
转自:https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316692.html 简介 strace常用来跟踪进程执行时的系统调用和所接收的信号 ...
- strace跟踪多进程与内核的交互
1.ptrace的说明 ptrace原型: #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t ...
- Strace跟踪解决expect乱码问题
--Strace跟踪解决expect乱码问题 ----------------------------------2014/07/27 情景:需要在本机抓去另外一台远程数据库中的数据. 执行语句:./ ...
- 使用strace命令跟踪系统调用
一.是什么strace? strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由 ...
- 28、应用调试之strace命令来跟踪系统调用
strace是个工具,在使用时需要先按照,见韦东山书籍: 1.tar xjf starce-4.5.15.tar.bz2 2.cd strace-4.5.15/ 3.patch -p1 < .. ...
- 使用strace 工具跟踪系统调用和信号
使用strace来执行程序,它会记录程序执行过程中调用,接收到的信号,通过查看记录结果,就可以知道程序打开哪些文件,进行哪些读写,映射哪些内存,向系统申请多少内存等信息 strace 移植 下载str ...
- strace跟踪线程调用
方法一:strace -fp pid , 可以跟踪所有线程, 进程的系统调用. [root@xxxx]strace -p 24091 Process xxx attached - interrupt ...
- strace命令 系统调用
简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核 ...
- 基于Linux-3.9.4内核的GDB跟踪系统调用实验
382 + 原创作品转载请注明出处 + https://github.com/mengning/linuxkernel/ 一.实验环境 win10 -> VMware -> Ubuntu1 ...
随机推荐
- hexo博客front-matter格式
通用格式 Front-matter 是文件最上方以 --- 分隔的区域,用于指定个别文件的变量,举例来说: --- title: Hello World date: 2013/7/13 20:46:2 ...
- [GXYCTF2019]Ping Ping Ping wp
根据题目考虑是命令注入方面, 打开网页,使用?ip=127.0.0.1;ls查询存在文件 后尝试使用?ip=127.0.01;cat flag.php打开flag.php无果 尝试打开index.ph ...
- [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点
题解 nodeA走一个链表A(A独有+公共),再走B独有的长度, nodeB走一个链表B(B独有+公共),再走A独有的长度. 结果:两者相遇点即为交点:若没有交点,两者都走到null,会返回null. ...
- Fiddler无法抓取web项目中的http请求解决方案
问题:webform项目中对接API使用Fiddler无法获取该API的请求,该webform比较老的一个项目, 同一个API写在控制台可以抓取到请求,用web项目放在本地IIS却不行,使用IIS E ...
- JS中call()、apply()、bind()的用法
其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge; //17 obj.myFun() //小张年龄undefined 例2 shows( ...
- P1295 [TJOI2011]书架 线段树优化dp,单调栈
P1295 [TJOI2011]书架 本题思路比较好想(对我来说不是),但代码细节很多,奈何洛谷的题解只有思路,然后就是 没有丝毫解释的代码,让人看起来很头疼(~~ 尤其是像我这样的蒟蒻~~),所以便 ...
- iscroll5 滚动条根据内容高度自动显示隐藏及强制横屏时方向错位
横竖屏方向错位: move: function (e) { if ( !this.enabled || utils.eventType[e.type] !== this.initiated ) { r ...
- JVM学习(五)对象的引用类型
一.引言 前面我们学习了JVM的垃圾回收机制,我们知道了垃圾回收是JVM的自发行为:虽然我们可以通过System.gc() 或Runtime.getRuntime().gc()进行显式调用垃圾回收 , ...
- 趣图:普通人讲故事 VS 程序员讲故事
扩展阅读 趣图:我说自己菜 vs 大佬说自己菜 趣图:客户需求VS客户预算 趣图:在外行人眼中的程序员 如何处理前任程序员留下的代码 一个故事讲清楚NIO
- 2020 Java开发者数据分析:中国已成为 Java 第一大国
最近知名开发工具供应商Jetbrains在Java 25周年之际,对开发群体做了一次有意思的数据分析. 全文内容可见:https://blog.jetbrains.com/idea/2020/09/a ...