ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

tasksetCPU亲和力&docke容器资源限制stress测试

2022-02-20 03:00:09  阅读:184  来源: 互联网

标签:容器 stress -- nginx 进程 tasksetCPU cpu docke


askset设置cpu亲和力,taskset能够将一个或者多个进程绑定到一个或者多个处理器上运行

参数:

选项:
-a, --all-tasks 在给定 pid 的所有任务(线程)上操作
-p, --pid 在给定 pid 上操作
-c, --cpu-list 以列表格式显示和指定 CPU
-h, --help 显示此帮助
-V, --version 输出版本信息

案例:设置nginx cpu亲合力

在conf/nginx.conf中,

worker_processes 4;用来配置 nginx启动几个工作进程 的,默认为1,而nginx还支持一个名为worker_cpu_affinity的配置项,也就是说nhinx可以为每个工作进程绑定CPU,

worker_cpu_affinity 00000001 00000010 00000100 00001000 ;

这里0001,0010, 0100, 01000是掩码,分别代表第1,2,3,4等四颗cpu核心;

如果要想绑定nginx进程的cpu,首先要查看nginx的进程ID,随后将对应的ID取出来,通过taskset -cp 指定cpu核心数以及进程号即可

# ps -ef | grep nginx    查看nginx的主进程ID号
root 2304 1 0 13:07 ? 00:00:00 nginx: master process nginx

[root@nginx-web02 ~]# taskset -cp 0,2 2304       #设置cpu亲和力,让nginx的主进程跑cpu1和cpu3上面
pid 2304's current affinity list: 0-3     #未绑定之前是跑在所有1-4个cpu上面
pid 2304's new affinity list: 0,2          #绑定之后,只跑在cpu1和cpu3上面

另外我们可以通过taskset  -cp 【进程号】查看某服务的进程ID跑在拿个CPU上面,如下所示

【设置docker容器cpu亲和力】

# docker run -itd --name centosv2 --cpuset-cpus 1-2 49f7960eb7e4     #通过“--cpuset-cpus“参数,让一个容器进程只在cpu2-3上面运行

我们可以在"/sys/fs/cgroup/system.slice/"这个目录查看docker容器生成的绑定cpu核心数

 

#cat /sys/fs/cgroup/cpuset/system.slice/docker-e5ea5af23654a142518c3076395ff02a6ff2869708b59852abaf84614a70d665.scope/cpuset.cpus
1-2

进程容器测试

可以通过docker exec (容器ID或者名称)taskset -cp (1容器内部第一个编号一般为1),可以看到容器进程与CPU绑定关系,可以认为达到了绑定CPU内核的目的

# docker exec centosv2 taskset -cp 1
pid 1's current affinity list: 1,2

【cpu配额控制参数的混合使用】

在上面的参数中,cpu-shares控制只发生在容器竞争同一个CPU内核上,如果通过cpuset-cpus制定容器A使用内核0,容器B使用内核1,在主机上只有这两个容器使用对应内核情况,那么cpu-share没有明显效果

cpu-period,cpu-quota这两个参数联合使用,在单核情况下或者的通过cpuset-cpus强制容器使用一个cpu内核的情况下,即使cpu-quota超过cpu-period,也不会让容器使用更多的cpu资源

cpuset-cpus,cpuset-mems只在多核,多内存节点上的服务器有效,并且必须要与实际 的物理配置匹配吗否则无法达到资源控制的目的

例子:测试cpuset-cpus和cpu-shares混合使用运行效果,就需要一个压力测试工具stress来让容器把实例cpu跑满

工具安装部分

  1.  

stress是linux系统压力测试软件,stress可以测试linux系统cpu,menory,IO,disk的负载

wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz

  1.  

tar zxvf stress-1.0.4.tar.gzcd stress-1.0.4

  1.  

./configure --prefix=/usr/local/stress

  1.  

make

  1.  

make install

  1. stress参数详解:
  2.  
  3. -? 显示帮助信息
  4.  
  5. -v 显示版本号
  6.  
  7. -q 不显示运行版本
  8.  
  9. -n 显示已完成的指令情况
  10.  
  11. -t --timeout N 指定运行 N秒后停止
  12.  
  13. --backoff N 等待N微妙后开始运行
  14.  
  15. -c 产生n个进程,每个进程都会反复不停的计算随机数的平方根,测试CPU
  16.  
  17. -i 产生n个进程,每个进程反复调用sync(),sync()用于将内存上面的内容写到硬盘上面,测试硬盘磁盘IO
  18.  
  19. -m --vm n产生N个进程,每个进程不断调用内存分配malloc和内存释放free 测试内存
  20.  
  21. --vm-bytes B 指定malloc时内存的字节数(默认256MB)
  22.  
  23. --vm-hang N 指定在free栈的秒数
  24.  
  25. -d -hadd n产生n个执行write和unlink函数的进程
  26.  
  27. -hadd-bytes B 指定写的字节数
  28.  
  29. --hadd-noclean 不 unlink

# cd /usr/local/stress/

# ./bin/stress -c 2 -i 2 --verbose --timeout 20s     #2个进程,2个IO进程,20秒后停止

[Docker容器cpu资源隔离和限制]---重点内容

 实例1:测试cpuset-cpus和cpus-shares混合使用运行效果,通过stress压力测试容器,将cpu跑满,当cpu跑满后,会不会去其他cpu上去运行呢?如果第一颗cpu跑满后,没有转移到第二颗cpu,那么,说明cgroup资源隔离成功

# docker run -itd --name centosv1 --cpuset-cpus 0,1 --cpu-shares 512 49f7960eb7e4 /bin/bash

# docker run -itd --name centosv2 --cpuset-cpus 0,1 --cpu-shares 1024 49f7960eb7e4 /bin/bash

 原文地址:tasksetCPU亲和力&docke容器资源限制 (shuzhiduo.com)

标签:容器,stress,--,nginx,进程,tasksetCPU,cpu,docke
来源: https://www.cnblogs.com/python-learn/p/15914434.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有