我使用过的linux命令之strace

strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

最常用选项:
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-o filename 将strace的输出写入文件filename
-p pid 指定要跟踪的进程id
所有选项请参考man手册。或:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/strace.html
-tt 打印精确时间(微秒级)

有两种使用方法
第一种是跟踪正在运行的程序:

strace -F -ff -tt  -o strace.log  -p $pid

第二种是启动以一个程序并进行追踪:

strace -F -ff -tt  -o strace.log ip a add 10.0.2.18/24 dev enp0s3

strace是定位疑难杂症,以及性能问题的利器。待后面实践之后再来总结。

这篇文章中讲了几个不错的例子,可以参考一下。
使用truss、strace或ltrace诊断软件的"疑难杂症"

参考:
https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/strace.html
使用truss、strace或ltrace诊断软件的"疑难杂症"

背景

前段时间遇到了一个由于selinux选项开启,keepalived无权限读取配置文件的问题。

使用的keepalived版本为1.2.13,keepalived在没有配置文件的情况下,进程也能够正常启动。但是在没有配置文件的情况下,不会有主备状态,节点也不会加入224.0.0.18这个组播组。keepalived也没有打印操作系统日志。所以分析起来毫无方向。

无奈请教专家,专家使用strace命令一番分析,就找到了keepalived读取不到配置文件的原因:
permission denied.

原来selinux被设置成了enforcing模式,类型为target。并且keepalived进程与配置文件所属type不一致。所以导致无权限读文件。

第一次知道strace和selinux,赶紧学习学习。。

猜你喜欢

转载自blog.csdn.net/qq_31567335/article/details/89702661