动态调整docker容器cpu资源
目的:动态调整系统cpu核数后,如何在不停止容器服务的情况下,docker动态使用最新的CPU资源
事件由来:
1、在ucloud上购买了一台可以热升级的机器,热升级指的是动态更改系统cpu和内存资源
2、随着业务的扩展,发现cpu、内存负载过高,需要在不停止业务的情况下动态扩容,因此使用了ucloud提供的热升级服务,从4核12G扩容为8核16G
3、热升级了cpu和内存后,使用docker info,发现docker已经成功识别到8核16G资源
4、容器中内存可以立马正常使用,但是容器中的所有进程还是跑在0-3cpu上,即没有使用到最新的cpu(4-7)
环境
失败方案:
1、docker container update --cpuset-cpus功能。发现调整后,容器中进程还是跑在旧cpu上
2、taskset -pc 0-7 containerpid。发现调整后,显示还是使用0-3cpu
原因:
1、/sys/fs/cgroup/cpuset/docker/cpuset.cpus限制了docker所创建的容器能够使用的cpu资源,该文件内容为0-3,
2、容器资源受限于docker资源:使用taskset方式设置容器在宿主机上的pid资源,还是只能使用0-3,因为容器资源受docker资源影响
解决方案
1、更改docker能够使用的cpu资源
2、更改容器能够使用的cpu资源
具体操作步骤:
[[email protected]_node3 ~] cd /sys/fs/cgroup/cpuset/docker/
[[email protected]_node3 docker]# cat cpuset.cpus
0-3
#更改docker能够使用的cpu资源,因为容器的cpuset依赖于docker的cpuset内容
[[email protected]_node3 docker]# echo 0-7 cpuset.cpus
0-7 cpuset.cpus
[[email protected]_node3 docker]# echo 0-7 > cpuset.cpus
[[email protected]_node3 docker]# cat cpuset.cpus
0-7
[[email protected]_node3 docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
98d89fd476bf server_game_ver:20190412b "/start/run.sh" 7 hours ago Up 7 hours 22/tcp tt_server_game2_1
c6c5e3eb4e68 server_game_ver:20190412b "/start/run.sh" 47 hours ago Up 47 hours 22/tcp wx_server_game1_1
[[email protected]_node3 ~]# cd /sys/fs/cgroup/cpuset/docker/98d89fd476bf2d495234398de50199fe48d8e6c6ee2ee67cf38c20133ef0f40c/
[[email protected]_node3 98d89fd476bf2d495234398de50199fe48d8e6c6ee2ee67cf38c20133ef0f40c] cat cpuset.cpus
0-3
#更改容器能够使用的cpu资源
[[email protected]_node3 98d89fd476bf2d495234398de50199fe48d8e6c6ee2ee67cf38c20133ef0f40c]# echo 0-7> cpuset.cpus
[[email protected]_node3 98d89fd476bf2d495234398de50199fe48d8e6c6ee2ee67cf38c20133ef0f40c]# cat cpuset.cpus
0-7
智能推荐
Composer 安装 ThinkPHP6 问题
Composer 安装 ThinkPHP6 问题 先说说问题 一.运行环境要求 二.配置 参考: ThinkPHP6.0完全开发手册 先说说问题 执行ThinkPHP6的安装命令 遇到问题汇总如下: 看提示是要更新版本,执行命令更新。 更新之后,再次安装ThinkPHP,之后遇到如下问题。 尝试了很多方法,依然不能解决。其中包括使用https://packagist.phpcomposer.com...
Spring Boot 整合JDBC
今天主要讲解一下SpringBoot如何整合JDBC,没啥理论好说的,直接上代码,看项目整体结构 看一下对应的pom.xml 定义User.java 定义数据源配置,这里使用druid,所以需要写一个配置类 上面指定druid的属性配置,和用户登录的账号信息以及对应的过滤规则: 下面定义数据访问接口和对应的实现: 数据访问层很简单,直接注入JdbcTemplate模板即可,下面再看对应的servi...
html鼠标悬停显示样式
1.显示小手: 在style中添加cursor:pointer 实现鼠标悬停变成小手样式 实例: 其他参数: cursor语法: cursor : auto | crosshair | default | hand | move | help | wait | tex...
Yupoo(又拍网)的系统架构
Yupoo!(又拍网) 是目前国内最大的图片服务提供商,整个网站构建于大量的开源软件之上。以下为其使用到的开源软件信息: 操作系统:CentOS、MacOSX、Ubuntu 服务器:Apache、Nginx、Squid 数据库:MySQLmochiweb、MySQLdb 服务器监控:Cacti、Nagios、 开发语言:PHP、Python、Erlang、Java、Lua 分布式计算:Hadoop...
创建一个Servlet项目流程(入门)
版本 IDEA 2020.2 JDK1.8 apache-tomcat-9.0.36 项目流程 一、IDEA中新建JaveEE项目 项目起名,选择项目存放地址,点击finish创建成功 进入项目后,右键选择项目,选择add Framework Support 选择Web Application,点击OK 此时项目文件夹 在WEB-INF下创建两个目录classes和lib 按ctrl+alt+sh...
猜你喜欢
Docker部署SpringCloud ELK+RabbitMQ日志
Docker部署SpringCloud ELK+RabbitMQ日志 Im_Coder 原文:https://www.jianshu.com/p/f773f23096a9 一、效果图 image.png 二、ELK是什么? ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。 其中Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,索...
[译]高性能缓存库Caffeine介绍及实践
概览 本文我们将介绍Caffeine-一个Java高性能缓存库。缓存和Map之间的一个根本区别是缓存会将储存的元素逐出。逐出策略决定了在什么时间应该删除哪些对象,逐出策略直接影响缓存的命中率,这是缓存库的关键特征。Caffeine使用Window TinyLfu逐出策略,该策略提供了接近最佳的命中率。 添加依赖 首先在pom.xml文件中添加Caffeine相关依赖: 您可以在Maven Cent...
Django开发微信公众号
一、微信公众号的准备: 1. 注册 访问地址:https://mp.weixin.qq.com/ 按照提示注册即可 注意:本文样例使用个人公众号,由于个人公众号没有接口权限,自定义菜单无法进行开发,同学们不要注册错! 2. 配置 需要准备好自己的服务器地址,可以使用腾讯云阿里云京东云等等皆可,没有域名用IP也可以。 在公众平台官网的开发-基本设置页面...
vs2019实现makefile内容
vs全宇宙第一编译器,使用vs2019开发linux是很方便,但是怎么将makefile中的选项对应到vs2019的工程属性中呢?记录下踩过的坑,当然可以用cmake,共同缺点就是编译太慢 1.在vs工程属性中包含linux的系统头文件 我觉得在这里添加要合适一些,这里添加linux下的系统头文件,他会自动复制到window下 2.添加额外头文件路径, 当提示找不到头文件,但是有执行了上面的两条,...
Linux下分割PDF工具--PDFtk
发现一个Linux下分割、合并PDF的工具,记录一下。 官网是:https://www.pdflabs.com/tools/pdftk-server/#download 官方介绍如下: 安装方式很简单 常用命令...