Shell脚本实现把进程负载均衡到多核CPU中_linux shell

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

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

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

复制代码 代码如下:

#!/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

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

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

时间: 2024-09-22 03:30:02

Shell脚本实现把进程负载均衡到多核CPU中_linux shell的相关文章

Shell脚本实现根据文件的修改时间来分类文件_linux shell

#!/bin/bash # exctute # ./mod.sh file_type input_folder output_folder # ./mod.sh *.txt /tmp /data/ # paramater count if [ ! $# -eq 3 ]; then echo "[ERROR] error paramater." exit fi # file type file_type="${1}" # input foloder if [ -d &

使用shell脚本实现ping对应IP所对应的人名(推荐)_linux shell

#!/bin/bash a=(张三 李四 王五 赵六) for i in {0..3} do if ping -c 1 192.168.1. $((${i}+1)) >dev/null 2>&1;then echo $((${i}+1))"号"${a[${i}]}"在线" else echo $((${i}+1))"号"${a[${i}]}"离线" fi done 这串shell代码实现了ping 某个IP

shell脚本编程之for语句、if语句使用介绍_linux shell

上部: 面向过程:顺序执行选择执行: if, case循环执行: for, while, until 一.for语句   格式:     for 变量 in 列表;do        语句1;        语句2;        ...     done    例1.写一个脚本,添加10个用户,并让每个用户的密码同用户名] 复制代码 代码如下:        #!/bin/bash       for I in {1..10}; do          useradd user$I;     

Shell脚本批量重命名文件后缀的3种实现_linux shell

今天突然间想起昨天有个问题还没动手实践下,就是利用shell批量修改文件的后缀,现在动手实践一下. 需求:家目录下有一些sql文件,想批量重命名成txt的 1.find + xargs +sed 复制代码 代码如下: find /root -name '*.sql' |xargs -i echo {}   {} |sed 's/sql/txt/2′  |xargs mv find /root/ -name '*.sql' |sed -e 's/\(.*\).sql$/mv & \1.txt/e'

Shell脚本配合iptables屏蔽来自某个国家的IP访问_linux shell

星期六我们一位客户受到攻击,我们的网络监测显示有连续6小时的巨大异常流量,我们立即联系了客户,没有得到回应,我们修改和限制了客户的 VPS,使得个别 VPS 受攻击不会对整个服务器和其他 VPS 用户造成任何影响,我们一直保持这个 VPS 为开通状态(尽管一直受攻击),攻击又持续了24小时,星期天攻击仍在继续,我们忍无可忍,但是仍然无法联系到客户,我们向客户网站的另一负责人询问是否需要我们介入来帮助解决,这位负责人答应后我们立即投入到与 DDoS 的战斗中(我们动态扫描屏蔽坏 IP,现在客户网站

shell脚本转发80端口数据包给Node.js服务器_linux shell

注意:千万不要图省事直接使用ROOT用户运行Node.js服务!这将带来无法预计的安全问题!但是使用80端口作为HTTP默认端口这一习惯是从MS时代就延续至今的,怎么办呢?网上有人滔滔不绝地说用NginX做反向代理之类的,其实我觉得没必要这么夸张,只需要使用ROOT用户做一个普通端口与80端口的数据转发就好了,使用iptables语句如下: 复制代码 代码如下: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-po

Shell脚本字符串单引号和双引号的区别浅析_linux shell

一.字符串基础知识 字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 单引号 复制代码 代码如下: str='this is a string' 单引号字符串的限制: •单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: •单引号字串中不能出现单引号(对单引号使用转义符后也不行). 双引号 复制代码 代码如下: your_name='qinjx' str="Hel

Shell脚本批量添加扩展名的两种方法分享_linux shell

方法1: 复制代码 代码如下: for file in  `ls`; do mv $file $file.txt; done 方法2: 复制代码 代码如下: find . -type f |xargs -i mv {} {}.txt 还有一些试验不成功的,先记录在此. 1.用rename命令修改后缀名,这个是最简单最省事的办法 复制代码 代码如下: [root@demo test_rename]# ll 总计 20 -rw-r–r– 1 root root 0 09-27 00:57 renam

shell脚本实现拷贝大文件显示百分比的代码分享_linux shell

复制代码 代码如下: #!/bin/sh strace -q -eread cp -- "${1}" "${2}" 2>&1 \ | awk '{     count += $NF     if (count % 10 == 0) {         percent = count / total_size * 100         for (i=0;i<=percent;i++)             printf("="