Linux性能分析

Strace诊断问题

技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以 CPU 排序。

有时候在 CPU 列表中能看到 CPU 主要消耗在内核态「sy」,而不是用户态「us」,和我们的经验不符。Linux 操作系统有很多用来跟踪程序行为的工具,内核态的函数调用跟踪用「strace」,用户态的函数调用跟踪用「ltrace」,所以这里我们应该用「strace」:

shell> strace -p <PID>

不过如果直接用 strace 跟踪某个进程的话,那么等待你的往往是满屏翻滚的字符,想从这里看出问题的症结并不是一件容易的事情,好在 strace  可以按操作汇总时间:

shell> strace -cp <PID>

通过「c」选项用来汇总各个操作的总耗时

shell> strace -T -e clone -p <PID>

通过「T」选项可以获取操作实际消耗的时间,通过「e」选项可以跟踪某个操作

context switch对性能的影响

如何查看context switch

Linux下通过vmstat命令可以很方便地查看context switch。vmstat输出如下:

[root@test contrib]# vmstat 5
procs ———–memory———- —swap– —–io—- –system– —–cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 1 2590988 71184 1800 22440 36 53 82 191 343 61 3 0 94 2 0
1 0 2595328 75772 1808 21992 9 873 9 881 1254 844 32 0 65 2 0
3 0 2595300 75516 1944 22000 10 0 34 593 1012 871 21 0 74 4 0
0 0 2595280 75640 1952 22000 0 0 0 10 1136 773 31 0 68 0 0
2 0 2595256 75516 1952 22000 8 0 8 0 1055 859 20 0 79 0 0

其中 system 段的cs就是context switch数,上面系统的context switch不多。如果发现context switch过多时,就需要考虑调整线程数了。

如何查看应用程序的线程数

查看应用程序线程数有2种办法。

top -H 可以以线程的方式查看系统相关信息,但是这种方法的一个缺点是不好统计具体的线程数。

ps -xH 列出整个系统正在运行的线程,配合grep可以轻松查看出某个应用程序使用了多少个线程。

context switch 很高,谁干的

2.6.23 及以上内核可用:

grep voluntary_ctxt_switches /proc/*/status | sort -rnk2 | head

 

# grep voluntary_ctxt_switches /proc/*/status | sort -rnk2 | head/proc/1570/status:voluntary_ctxt_switches: 1029453/proc/8143/status:voluntary_ctxt_switches: 835492/proc/2463/status:voluntary_ctxt_switches: 710566/proc/12204/status:voluntary_ctxt_switches: 584719/proc/2463/status:nonvoluntary_ctxt_switches: 344170/proc/12204/status:nonvoluntary_ctxt_switches: 252147/proc/9684/status:voluntary_ctxt_switches: 200307/proc/10354/status:voluntary_ctxt_switches: 165276/proc/3/status:voluntary_ctxt_switches: 157927/proc/10337/status:voluntary_ctxt_switches: 105313

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值