linux性能优化之 pstack strace

solaris 操作系统提供了 pstack 工具,用来打印运行程序的线程堆栈信息。redhat 公司发行的linux操作系统(rhel,centos等等) 也提供了pstack工具,只要按照 gbd:

yum install gdb

 

由于通过 pstack 获得的是快照形式的信息,因此不能判定是否一直是相同的状态。为了调查是否是相同的状态,需要同时 使用事件记录形式的工具来确认。

另外,因为是从OS层面看到的调用栈,所以可能会与应用程序端调用的函数名有所差异

 

一般来说,pstack 的负载 较低,很少会导致性能下降。

 

另外,通过pstack 知道函数名后,对于自己编写的程序,就能一边检查源代码,一边调查在哪个函数上耗费了时间。另一方面,很多时候外部产品的函数名

是非公开的,没办法对其进行调查。不过,调用栈上显示的OS的函数能在网上查到,可以对其进行调查

 

[root@localhost ~]# pstack 1372

#0 0x00007f01af75117c in waitpid () from /lib64/libc.so.6

#1 0x0000000000440b24 in waitchld.isra.10 ()

#2 0x0000000000441ddc in wait_for ()

#3 0x0000000000433aae in execute_command_internal ()

#4 0x0000000000433cce in execute_command ()

#5 0x000000000041e305 in reader_loop ()

#6 0x000000000041c96e in main ()

 

 

 

strace 是 使用 使用事件记录的形式,从OS看到的某个进程的系统调用信息,能知道在等待哪个系统调用,OS的哪个函数比较耗时

,注意在没有其他办法的时候才使用strace。如果要对外部产品使用strace,请先和该产品的支持部门确认一下。

因为strace 的负载很高,建议在测试环境下再现故障之后再使用。在生产环境中,请在确认允许处理之后再使用。此外,使用strace

分析性能故障的时候,请注意strace自身也会导致速度变慢

 

[root@localhost ~]# strace -p 1372

strace: Process 1372 attached

wait4(-1

 

通过 -o 选项,可以 输出 到指定文件

下面是 将 cat 命令 内部调用 记录 输入到bbb中

strace -o bbb cat aaa.txt

 

使用 -c 命令 可以 报告 执行 一个命令 每个系统调用 在内核 中 消耗时间的统计

[root@izm5efwaqhukrqgsmh2vw4z local]# strace -c cat aaa.txt

sse

% time seconds usecs/call calls errors syscall

------ ----------- ----------- --------- --------- ----------------

58.14 0.000025 4 6 close

41.86 0.000018 6 3 read

0.00 0.000000 0 1 write

0.00 0.000000 0 4 open

0.00 0.000000 0 5 fstat

0.00 0.000000 0 8 mmap

0.00 0.000000 0 4 mprotect

0.00 0.000000 0 1 munmap

0.00 0.000000 0 4 brk

0.00 0.000000 0 1 1 access

0.00 0.000000 0 1 execve

0.00 0.000000 0 1 arch_prctl

0.00 0.000000 0 1 fadvise64

------ ----------- ----------- --------- --------- ----------------

100.00 0.000043 40 1 total

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值