cpu :
概念:
- 处理器
- 核数
- 硬件线程数
- cpu指令
- 逻辑cpu
- 调度器
- 运行队列
cpu内存缓存, 缓存有多级缓存, cpu寄存器,运行速度最快,成本最高,空间也最小
在寄存器下一般还会有多级缓存, 多级缓存(一级缓存,二级缓存等)的空间依然比较小,因此有主存,也就是常说的内存
cpu运行队列 有正在运行的, 排队的和就绪队列, 在cpu根据时钟分片,排队调度运行, 因此会出现一定的时延
对于多核处理系统, 内核通常会为每个cpu分配一个队列进行管理, 并尽量使得线程的每次都被放入同一个队列中,也就是运行在一个cpu上,这样,如果cpu缓存中保存了线程的相关信息,运行时将会减少延时, 如果被调度到其他cpu上,因为该cpu没有线程的相关信息,因此需要进行数据交换,从其他cpu获取信息,或者从其他缓存中加载对应的线程信息,会出现一定的延迟
时钟频率, 时钟分片
MMU 负责虚拟地址到物理地址的转换
信息分析工具:
-
uptime
可以查看平均负载
]# uptime 23:50:37 up 1 day, 2:44, 3 users, load average: 0.02, 0.02, 0.05
-
vmstat 包括系统范围的cpu平均负载
# vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 1272 146700 0 444548 0 0 5 22 47 210 0 0 99 0 0 0 0 1272 146660 0 444548 0 0 0 0 43 83 0 1 99 0 0 0 0 1272 146660 0 444548 0 0 0 0 35 68 0 0 100 0 0 0 0 1272 146660 0 444548 0 0 0 0 43 77 0 0 100 0 0
最后几行为cpu信息
第一行为系统启动以来的总结信息
r运行队列长度 - 可运行线程的总数
us 用户态时间
sy 内核态时间 也就是系统时间
id 空闲时间
wa 等待IO
st 偷取, cpu在虚拟化环境下其他租户上的开销,这个可以在宿主机上通过分配给虚拟机的使用占比来进行分配,防止可以防止一个虚拟机占满全部cpu的情况
-
mpstat 单个cpu的统计信息
mpstat Linux 3.10.0-123.el7.x86_64 (mirror) 07/06/2019 _x86_64_ (1 CPU) 11:59:37 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 11:59:37 PM all 0.34 0.00 0.25 0.01 0.00 0.04 0.00 0.00 0.00 99.36
user 用户态时间
nice 以nice优先级运行的进程用户态时间
sys 内核态时间
iowait 等待IO时间
irq 硬件中断cpu用量
soft 软件中断cpu用量
steal 耗费在服务其他租户的时间 根据宿主机调度比例获得
guest 访问虚拟机的时间
idle 空闲
-
sar 历史统计信息
-
ps
ps aux |sort -rnk3 |head -10 [root@dev ~]# ps aux |sort -rnk3 |head -10 root 50073 0.3 4.5 992184 45584 ? Sl 09:52 0:05 mongod -f /data/mongodb/conf/mongodb.cfg root 6166 0.1 0.7 136916 7572 ? Ssl Jul19 1:17 /root/redis/src/redis-server 0.0.0.0:6379 root 2408 0.1 0.7 249944 7744 ? Sl Jul19 1:58 /usr/sbin/vmtoolsd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 99 0.0 0.0 0 0 ? S Jul19 0:00 [rcuob/90] root 98 0.0 0.0 0 0 ? S Jul19 0:00 [rcuob/89] root 97 0.0 0.0 0 0 ? S Jul19 0:00 [rcuob/88]
查看僵尸进程:
[root@dev ~]# ps -ef|grep defunct root 52570 51535 0 10:30 pts/0 00:00:00 grep --color=auto defunct
查看D进程:
D进程是不可中断的, D Uninterruptible sleep (usually IO)
ps aux | awk '($8=="Z" || $8=="Zs" || $8=="D"){print}'
-
top
-
pidstat 每个进程/线程 cpu用量分解
# pidstat Linux 3.10.0-123.el7.x86_64 (mirror) 07/07/2019 _x86_64_ (1 CPU) 12:05:04 AM UID PID %usr %system %guest %CPU CPU Command 12:05:04 AM 0 1 0.00 0.01 0.00 0.01 0 systemd 12:05:04 AM 0 2 0.00 0.00 0.00 0.00 0 kthreadd 12:05:04 AM 0 3 0.00 0.00 0.00 0.00 0 ksoftirqd/0 12:05:04 AM 0 137 0.00 0.01 0.00 0.01 0 rcu_sched 12:05:04 AM 0 138 0.00 0.01 0.00 0.01 0 rcuos/0 # pidstat -p 46552 Linux 3.10.0-123.el7.x86_64 (mirror) 07/07/2019 _x86_64_ (1 CPU) 12:06:21 AM UID PID %usr %system %guest %CPU CPU Command 12:06:21 AM 994 46552 0.00 0.00 0.00 0.00 0 epmd [root@dev ~]# pidstat -p 50073 1 Linux 3.10.0-123.el7.x86_64 (dev) 07/20/2019 _x86_64_ (1 CPU) 10:18:50 AM UID PID %usr %system %guest %CPU CPU Command 10:18:51 AM 0 50073 0.00 0.00 0.00 0.00 0 mongod 10:18:52 AM 0 50073 0.00 1.01 0.00 1.01 0 mongod 10:18:53 AM 0 50073 0.00 0.00 0.00 0.00 0 mongod 10:18:54 AM 0 50073 1.01 0.00 0.00 1.01 0 mongod 10:18:55 AM 0 50073 0.00 0.00 0.00 0.00 0 mongod
-
time 个一个命令指示,带cpu用量分解
-
Dtrace
-
perf cpu剖析与跟踪, cpu性能计数, 可以分析调用路径
-
lsof -i |grep 3255 查找对应进程
-
线程: ps -eLF |awk ‘{print $3}’|uniq -c|sort -rnk 1 |sed -n ‘1,10p’
查找线程异常
第一列为线程个数,第二列为进程号
[root@dev ~]# ps -eLF |awk '{print $3}'|uniq -c|sort -rnk 1 |sed -n '1,10p' 303 2 29 1 23 1 19 2844 5 51535 5 1 4 2 4 2 3 2 3 2
进程绑定:
一个进程可以绑定在一个或者多个cpu上。 这样可以提高性能
命令 taskset
# taskset -h
Usage: taskset [options] [mask | cpu-list] [pid|cmd [args...]]
Options:
-a, --all-tasks operate on all the tasks (threads) for a given pid
-p, --pid operate on existing given pid
-c, --cpu-list display and specify cpus in list format
-h, --help display this help
-V, --version output version information
The default behavior is to run a new command:
taskset 03 sshd -b 1024
You can retrieve the mask of an existing task:
taskset -p 700
Or set it:
taskset -p 03 700
List format uses a comma-separated list instead of a mask:
taskset -pc 0,3,7-11 700
Ranges in list format can take a stride argument:
e.g. 0-31:2 is equivalent to mask 0x55555555
For more information see taskset(1).
例如:
taskset -pc 5-7 10889
将进程10889绑定到5-7cpu上
独占cpu组
Linux提供了cpu组,允许编组cpu并为其分配进程, 可以提高性能, 但同时也会减少其他进程的可调用cpu
mkdir /dev/cpuset; cd /dev/cpuset
mount -t cpuset cpuset /dev/cpuset
mkdir prodset; cd prodset
echo 7-10 > cpus
echo 1 > cpu_exclusive
echo 11111 > tasks