context switch对性能的影响

http://www.colorfuldays.org/linux/context-switch%E5%AF%B9%E6%80%A7%E8%83%BD%E7%9A%84%E5%BD%B1%E5%93%8D/

今天在对一个应用程序进行压力测试发现context switch(上下文切换)对于CPU的load影响非常大。在将线程数减为之前的1/3时,load居然降到之前的1/5。通常导致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可以轻松查看出某个应用程序使用了多少个线程。

在今天的压测过程中,当线程数为48个时,context switch一直在90000以上,cpu的load直接上升至15。当把线程数调到18时,context switch稳定在50000,cpu的load降为2了。其实性能调优也挺简单的,挺有趣的,关键是取决于对Linux工作机制的理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值