[性能优化]通过Shell实现将进程负载均衡到CPU多核

有时候,由于架构设计或其他业务本身特点原因,导致有些应用使用CPU很不均衡,所以业务处理集中在一个CPU上,而其它CPU闲得在睡觉。这里有个简单的优化方案实现将各个线程绑定到到多个CPU,从而实现性能的提高。

虽然CPU是一个不错的思路,但是不是杀手锏,其性能能提高多少依赖于各个线程的性能分布是否均匀;所以最好的办法是优化你的程序架构。

在这里分享一个Shell脚本(脚本名为bindcpu2p.sh),通过该脚本可将该进程均匀负载到各个CPU上。

[code lang=”shell”] #!/bin/sh
pids=`/sbin/pidof $1`
cpunum=`cat /proc/cpuinfo | grep processor | wc -l`

cpuidx=0
for pid in $pids
do
/usr/bin/taskset -cp ${cpuidx} ${pid}
cpuidx=$(($cpuidx+1))
cpuidx=$(($cpuidx%$cpunum))
echo $cpuidx
done[/code]

使用方法 $> ./bindcpu2p.sh progressname

注:请兄弟们检视下代码,能帮忙调试下就最好不过了。

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. ibusybox说道:

    这样轮询taskset到每个cpu线程上只能是理论上提高性能,往往有某个cpu线程非常繁忙的时候,这样可能适得其反 哈

  2. Simon说道:

    其实,我们要注意不要滥用多核,就像不要滥用多线程一样,多线程不一定能够解决问题,因为可能瓶颈并不在处理能力,而是IO或者其他。我发现,很多对性能要求高的,核心处理模块,很多是单线程的。

    滥用多线程有一个很典型的例子:
    一个人有5项任务,是一项一项完成更快,还是同时做5项完成更快?
    大家也可以想想。

  3. XiaoMing说道:

    居然还有这能力,可以自己指定CPU,学习了,,

  4. Crazybaby说道:

    目前的CPU可以将多线程 均匀的调度在各个CPU上的. 就算是一个进程中的多个线程

Copyright © 2012-2017 YUNWEIPAI.COM - 运维派 - 粤ICP备14090526号-3
扫二维码
扫二维码
返回顶部