http://bbs.chinaunix.net/thread-1936302-1-1.html
CPU负载观察及调优方法:
I1,D1(两类一级缓存:一级指令和一级数据缓存)
I2,D2都是cpu独有的,三级缓存可以共享
SMP对称多处理机(SymmetricalMulti-Processing):
多个cpu,访问同一个内存(三个时钟周期:联系内存控制器,寻址,完成读写);但是随着cpu个数增加,效率不行
NUMA非一致性内存访问(Non Uniform Memory Access Architecture):
每一个CPU与自己的专用内存
CPU affinity: CPU绑定,防止交叉访问
只有在红帽6以上才能有全的命令:numastat,numactl,numad,numa只是在硬件级别跟我们的cpu进行绑定
在非NUMA架构下绑定:
taskset: 绑定进程至某CPU上
mask:0x0000 0003
0011:0和1
0x0000 0005:
0101: 0和2
# taskset -p mask pid
taskset -p 0x00000003 101
taskset -p -c 0-2,7 101 类似nginx绑定
为了绑定后不进行切换:隔离
a:
/etc/grub.conf
isolcpus=cpu number,…,cpu number
b:
应该将中断绑定至那些非隔离的CPU上,从而避免那些隔离的CPU处理中断程序;
echo CPU_MASK > /proc/irq/<irq number>/smp_affinity 将中断绑定在cpu哪些核上
如:假如我们CPU有16核,我们将中断绑定在0,1上
echo 0x00000011 > /proc/irq/<irq number>/smp_affinity
vmstat:
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:
root@ubuntu:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0
2表示每个两秒采集一次服务器状态,1表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:
复制代码
root@ubuntu:~# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0
Load average: average length of run queues
sar -q
top
w
uptime
vmstat 1 5
CPU utilization
mpstat 1 2
sar -P ALL 1 2
iostat -c 1 2
/proc/stat
dstat -c
CPU负载观察及调优方法:
I1,D1(两类一级缓存:一级指令和一级数据缓存)
I2,D2都是cpu独有的,三级缓存可以共享
SMP对称多处理机(SymmetricalMulti-Processing):
多个cpu,访问同一个内存(三个时钟周期:联系内存控制器,寻址,完成读写);但是随着cpu个数增加,效率不行
NUMA非一致性内存访问(Non Uniform Memory Access Architecture):
每一个CPU与自己的专用内存
CPU affinity: CPU绑定,防止交叉访问
只有在红帽6以上才能有全的命令:numastat,numactl,numad,numa只是在硬件级别跟我们的cpu进行绑定
在非NUMA架构下绑定:
taskset: 绑定进程至某CPU上
mask:0x0000 0003
0011:0和1
0x0000 0005:
0101: 0和2
# taskset -p mask pid
taskset -p 0x00000003 101
taskset -p -c 0-2,7 101 类似nginx绑定
为了绑定后不进行切换:隔离
a:
/etc/grub.conf
isolcpus=cpu number,…,cpu number
b:
应该将中断绑定至那些非隔离的CPU上,从而避免那些隔离的CPU处理中断程序;
echo CPU_MASK > /proc/irq/<irq number>/smp_affinity 将中断绑定在cpu哪些核上
如:假如我们CPU有16核,我们将中断绑定在0,1上
echo 0x00000011 > /proc/irq/<irq number>/smp_affinity
vmstat:
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。
一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:
root@ubuntu:~# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0
2表示每个两秒采集一次服务器状态,1表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:
复制代码
root@ubuntu:~# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0
Load average: average length of run queues
sar -q
top
w
uptime
vmstat 1 5
CPU utilization
mpstat 1 2
sar -P ALL 1 2
iostat -c 1 2
/proc/stat
dstat -c