[20130727]linux下使用taskset命令.txt
# rpm -qilf `which taskset`
Name : schedutils Relocations: (not relocatable)
Version : 1.4.0 Vendor: Red Hat, Inc.
Release : 2 Build Date: Wed 13 Oct 2004 05:02:31 AM CST
Install Date: Fri 06 Jul 2007 03:30:46 PM CST Build Host: dolly.build.redhat.com
Group : Applications/System Source RPM: schedutils-1.4.0-2.src.rpm
Size : 49206 License: GPL
Signature : DSA/SHA1, Thu 06 Jan 2005 07:02:44 AM CST, Key ID 219180cddb42a60e
Packager : Red Hat, Inc. <>
Summary : Utilities for manipulating process scheduler attributes
Description :
schedutils is a set of utilities for retrieving and manipulating process
scheduler-related attributes, such as real-time parameters and CPU affinity.
This package includes the chrt and taskset utilities.
Install this package if you need to set or get scheduler-related attributes.
/usr/bin/chrt
/usr/bin/taskset
/usr/share/doc/schedutils-1.4.0
/usr/share/doc/schedutils-1.4.0/COPYING
/usr/share/doc/schedutils-1.4.0/ChangeLog
/usr/share/doc/schedutils-1.4.0/README
/usr/share/man/man1/chrt.1.gz
/usr/share/man/man1/taskset.1.gz
--使用taskset命令可以把一些进程交给指定的CPU来执行。
--写一个例子看看:
# cat /home/oracle11g/aa.sh
#! /bin/bash
while [ '1' == '1' ]
do
echo 1 > /dev/null
done
# source aa.sh &
[1] 16545
--进程号16545.
--开始修改看看:
使用top看:
top - 21:50:35 up 362 days, 12:00, 3 users, load average: 1.46, 1.15, 0.74
Tasks: 123 total, 3 running, 120 sleeping, 0 stopped, 0 zombie
Cpu0 : 2.0% us, 1.0% sy, 0.0% ni, 59.7% id, 37.3% wa, 0.0% hi, 0.0% si
Cpu1 : 3.3% us, 0.7% sy, 0.0% ni, 69.6% id, 26.4% wa, 0.0% hi, 0.0% si
Cpu2 : 68.1% us, 31.6% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.3% si
Cpu3 : 2.3% us, 2.3% sy, 0.0% ni, 95.3% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 4045276k total, 3989200k used, 56076k free, 129612k buffers
Swap: 3911788k total, 1416k used, 3910372k free, 3249360k cached
-- 主要消耗在CPU2上。
-- 指定CPU3,看看结果:
# taskset -pc 3 16545
pid 16545's current affinity list: 2
pid 16545's new affinity list: 3
top - 21:53:06 up 362 days, 12:02, 3 users, load average: 1.15, 1.23, 0.83
Tasks: 120 total, 2 running, 118 sleeping, 0 stopped, 0 zombie
Cpu0 : 0.0% us, 0.0% sy, 0.0% ni, 99.7% id, 0.3% wa, 0.0% hi, 0.0% si
Cpu1 : 0.3% us, 0.0% sy, 0.0% ni, 99.3% id, 0.0% wa, 0.3% hi, 0.0% si
Cpu2 : 0.0% us, 0.3% sy, 0.0% ni, 99.7% id, 0.0% wa, 0.0% hi, 0.0% si
Cpu3 : 68.7% us, 31.3% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 4045276k total, 3966320k used, 78956k free, 129612k buffers
Swap: 3911788k total, 1416k used, 3910372k free, 3249360k cached
-- 可以发现消耗移动到CPU3上。
-- 先停止以上shell脚本的执行。如果修改oracle的监听进程情况如何呢?
# ps -ef | grep tns | grep -v grep
503 28027 1 0 Jul09 ? 00:00:02 /u01/app/oracle11g/product/11.2.0/db_2/bin/tnslsnr LISTENER -inherit
# taskset -pc 3 28027
pid 28027's current affinity list: 0-3
pid 28027's new affinity list: 3
[root@hisdg IP=40 ~ 23]# taskset -p 28027
pid 28027's current affinity mask: 8
从远程登录数据库。
# cat spid.sql
select spid from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat where rownum=1));
SQL> @spid.sql
SPID
------
17473
# taskset -p 17473
pid 17473's current affinity mask: 8
--可以发现远程登录后在oracle生成的进程继承了监听进程的属性。
SQL> select count(*) from emp,emp,emp,emp,emp,emp,emp;
top - 22:01:36 up 362 days, 12:11, 3 users, load average: 1.88, 1.42, 1.05
Tasks: 118 total, 3 running, 115 sleeping, 0 stopped, 0 zombie
Cpu0 : 0.3% us, 0.3% sy, 0.0% ni, 99.0% id, 0.0% wa, 0.0% hi, 0.3% si
Cpu1 : 0.0% us, 0.0% sy, 0.0% ni, 100.0% id, 0.0% wa, 0.0% hi, 0.0% si
Cpu2 : 0.3% us, 0.0% sy, 0.0% ni, 98.0% id, 1.7% wa, 0.0% hi, 0.0% si
Cpu3 : 80.3% us, 19.7% sy, 0.0% ni, 0.0% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 4045276k total, 3964056k used, 81220k free, 129620k buffers
Swap: 3911788k total, 1416k used, 3910372k free, 3249624k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17473 oracle11 25 0 1775m 51m 47m R 50.2 1.3 0:06.32 oracle
-- CPU资源消耗集中在CPU3上。
# taskset -pc 0,1,2,3 28027
pid 28027's current affinity list: 3
pid 28027's new affinity list: 0-3
--重新远程登录,
SQL> @spid.sql
SPID
------
17809
# taskset -p 17809
pid 17809's current affinity mask: f
>