context switch对性能的影响

转载自: http://blog.csdn.net/huoyunshen88/article/details/8701740

 

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工作机制的理解。

posted @ 2017-07-28 09:56  Andy.gbhu  阅读(946)  评论(0)    收藏  举报