您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
CPU负载观察及调优方法.
发布时间:2019-07-22 14:48:02编辑:雪饮阅读()
cpu分域
[root@localhost ~]# mkdir /cpusets
[root@localhost ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Jul 18 13:13:53 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=e1c558d1-fffc-4be0-bc82-79aa6a555296 /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
cpuset /cpusets cpuset defaults 0 0
[root@localhost ~]# mount -a
[root@localhost ~]# ls /cpusets
cgroup.event_control cpu_exclusive mem_exclusive memory_migrate memory_pressure_enabled memory_spread_slab notify_on_release sched_load_balance tasks
cgroup.procs cpus mem_hardwall memory_pressure memory_spread_page mems release_agent sched_relax_domain_level
查看当前域的cpu集合、内存集合
[root@localhost cpusets]# cat /cpusets/cpus
0-1
[root@localhost cpusets]# cat /cpusets/mems
0
注意:这两个文件若不存在可以试试以cpuset为前缀,如cpuset.cpus和cpuset.mems
查看当前域绑定的进程集合
[root@localhost cpusets]# cat /cpusets/tasks
划分子域(进程绑定)
创建子域
创建子域
[root@localhost cpusets]# mkdir /cpusets/domain1
创建子域cpu集合
[root@localhost cpusets]# echo 0 > /cpusets/domain1/cpus
创建子域内存集合
[root@localhost cpusets]# echo 0 > /cpusets/domain1/mems
找到待绑定的进程id
监控httpd
watch指令可以间歇性的执行程序,-n指定时间间隔
[root@localhost cpusets]# watch -n 0.5 'ps -e -o psr,pid,cmd | grep httpd'
ab请求测试
C:\Users\Administrator>cd D:\phpStudy\Apache\bin
C:\Users\Administrator>d:
D:\phpStudy\Apache\bin>ab -n 10000 -c 300 http://192.168.2.172/cs.jsp
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.2.172 (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
apr_pollset_poll: The timeout specified has expired (70007)
Total of 9962 requests completed
cpu绑定
在ab请求测试过程中观察到watch监控的httpd进程中有一个进程号一直不变(注意该进程未必是httpd进程),但是其psr值一直来回跳动,即其获取的cpu时间片不在同一个cpu上。那么就以其pid进行绑定cpu。
[root@localhost ~]# echo 2483 > /cpusets/domain1/tasks
接下来再次观察2483这个进程,发现其一直不变了,其值就一直是当前子域的cpu集合中的cpu,因为当前子域cpu集合的cpu只有一个,所以就一直不变了,这样就相当于完成了进程id绑定cpu的工作。
优雅的绑定
接下来我们换监控为nginx,同样的这里监控的一个进程号一直不变,但其psr不断跳动,其实这个进程号是watch的进程号。
[root@localhost ~]# taskset -p -c 0 3844
pid 3844's current affinity list: 0,1
pid 3844's new affinity list: 0
然后我们再次查看watch的监控,发现3844进程也不在跳动了,而是固定到0号cpu了。
taskset:
-p, --pid: 对一个现有的进程进行操作,而不是启动一个新的进程
-c, --cpu-list: 使用 CPU 编号替代位标记
注意:-p参数貌似必须在-c参数之前
taskset执行后输出的结果中可以显示原来绑定的cpu集合和当前绑定后的cpu集合
关键字词:cpu,绑定,进程,负载,观察,调优