Docker网络与Cgroup硬件资源占用控制

目录

1.dockers的网络模式

 1.1 获取容器的进程号

1.2 docker网络模式的特性 

1.3 host主机模式

 1.4  container模式

 1.5  none模式

1.6 bridge 桥接模式

1.6 容器的自定义网络 

 (1)未创建自定义网络时,创建指定IP容器的测试

(2)创建自定义docker网络 

删除自定义网络:

1.7  Docker容器网络生产经验

2. Docker容器的资源控制

3 .docker占用宿主机cpu的限制

3.1 cpu的使用率上限

(1)正常启用的cpu,测试使用上限

(2)修改默认的容器时间分片上限规则,再次创建启动测试

(3)创建容器时指定容器的cpu资源占用量上限 

(4)多cpu分配容器的使用上限

3.2  设置cpu资源的占用比 

注意:该方式需要设置多个容器时才会生效 

3.3 设置容器绑定指定的cpu 

查看主机中的cpu编号 

进行绑核创建容器 ​​​​​​​

 4.  内存使用的限制

4.2 限制容器可用的swap 大小 

5. 对磁盘IO的配置控制(blkio)的限制 

5.1 默认情况下容器的写速度 

5.2 进行写速度限制的容器创建 

6. 清除docker占用的磁盘空间

 总结

 1.对网络模式的控制

2.对cpu的限制参数

3.对内存的限制

4.对磁盘IO的限制



的网络模式

 1.1 获取容器的进程号


docker inspect -f '{{.State.Pid}}' 容器id/容器名

1.2 docker网络模式的特性 

 docker初始状态下有三种默认的网络模式 :

  • bridg(桥接)
  • host(主机)
  • none(无网络设置)
docker network  ls

1.3 host主机模式

  • 相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离 文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespacel隔离。一个Docker容器一 般会分配一个独立的Network. Namespace。
  • 但如果启动容器的时候使用host模式, 那么这个容器将不会获得一 个独立的Network Namespace,而是和宿主机共用一个Network Namespace。 容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。
  • 容器和宿主机共享网络命名空间,但没有独立IP地址,使用宿主机的IP地址,和宿主机共享端口范围,例如宿主机使用了80端口,那么容器不能使用80端口。这种模式比较方便,但不安全

#创建容器web1,指定网络模式为 host#容器和宿主机共享网络命名空间,但没有独立IP地址。使用宿主机的IP,和宿主机共享端口范围。docker run -d --name web1 --net=host nginx​#访问宿主机的ip和80端口,则可以访问到tt1的nginx服务curl http://192.168.181.100:80

  

 1.4  container模式

在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。 新创建的容器不会创建自己的网卡,配置自己的Ie,而是和一个指定的容器共享re、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

新创建的B容器和A容器共享命名空间。假如A容器使用了80端口,B容器就不能使用80端口。

#基于镜像centos:7 创建一个名为web2的容器
docker run -itd --name web2 centos:7 /bin/bash
#查看容器web2的pid号
docker inspect -f '{{.State.Pid}}' web2
ls -l /proc/web2的pid/ns#创建web3容器,使用container网络模式,和web2共享网络命名空间
docker run -itd --name web3 --net=container:web2 centos:7 bash
#查看web3容器的pid
docker inspect -f '{{.State.Pid}}' web3
ls -l /proc/web3的pid/ns/
#可以看到web3和web2共享同一个网络命名空间

 1.5  none模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个locker容器没有网卡、iP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡、这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性

1.6 bridge 桥接模式

 bridge模式是docker的默认网络模式,不用--net参数,就是bridge模式。

相当于Vmware中的 nat模式,容器使用独立.network Namespace,并连接到docker)虚拟网卡。通过dockerO网桥以及iptables

nat表配置与宿主机通信,此模式会为每一个容器分配hetwork Mamespace、设置等,并将一个主机上的 Docker容器连接到一个虚拟网桥上。

 (1)当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Dokcer容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

(2)从docker0子网中分配一个IP给容器使用,并设置dockerO的I地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来、因此,veth设备常用来连接两个网络设备。

(3 ) Docker将 veth pair 设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以veth*这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过 brctl show命令查看。

(4) 使用docker run -p 时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。


[root@localhost opt]#docker run -id --name c1  centos:7
[root@localhost opt]#docker run -id --name c2  centos:7
[root@localhost opt]#docker run -id --name c3  centos:7
[root@localhost opt]#brctl show
[root@localhost opt]#docker run -id --name c4  -p 8080:80 centos:7
[root@localhost opt]#brctl show
[root@localhost opt]#docker ps -a

1.6 容器的自定义网络 

ifconfig docker0

 (1)未创建自定义网络时,创建指定IP容器的测试

指定容器IP的方式: 

注意:创建指定IP的容器也需要基于docker网卡的IP网段 

docker run -id --name a1 --ip 192.168.181.100   806c77e62cdd
ping 192.168.181.100
docker run -id --name a2 --network bridge --ip 192.168.181.100   806c77e62cdd

(2)创建自定义docker网络 

 创建自定义网络:

docker network create --subnet=192.168.181.100/24 --opt "com.docker.network.bridge.name"="docker1" mynetwork

 再次创建指定IP的容器:

docker run -id --net=mynetwork --ip 1792.168.181.100 --name a3 centos:7
ping 192.168.181.100

删除自定义网络:

如果想要删除自定义的网络,可以使用 docker network rm 网络模式名称 进行删除,例如docker network rm mynetwork。删除网络模式前,需要先确保使用该网络模式创建的容器已退出(即已停止)。如果容器仍在运行,则该网络无法删除。

1.7  Docker容器网络生产经验

# daemon.json 配置介绍{"graph": "/data/docker","storage-driver": "overlay2","insecure-registries": ["registry.access.redhat.com", "quay.io"],"registry-mirrors": ["https://3u6mkfxb.mirror.aliyuncs.com"],"bip": "172.168.181.1/24",       #指定网桥的网段,这里不能写0,必须写1"exec-opts": ["native. cgroupdriver= systemd"],"live-restore": true}​#配置项注意点:● graph:该关键字未来将被弃用,可以采用"data-root" 替代。● storage-driver:存储驱动,即分层文件系统。● insecure-registries:不安全的docker registries, 即使用http协议推拉镜象。● registry-mirrors:加速站点,一般可以使用阿里、网易云、docker中国 (https: //registry.docker-cn.com)的地址。● bip:指定doccer bridge地址(不能以.0结尾),生产中建议采用172.xx.yy.1/24,其中xx. yy为宿主机ip后四位,方便定位问题。● 若启动失败,查看/var/log/message 日志排错。● live-restore:启用实时还原。默认情况下,当Docker守护程序终止时,它将关闭正在运行的容器。从Docker Engine 1.12开始,您可以配置守护程序,以便在守护程序不可用时容器仍在运行。此功能称为实时还原。实时还原选项有助于减少由于守护程序崩溃,计划内的停机或升级而导致的容器停机时间。​​#使用配置文件/etc/docker/daemon.json (没有时新建该文件)vim /etc/docker/daemon.json{" insecure-registries": ["172.168.181.7:65500"],"registry-mirrors": ["https://3u6mkfxb.mirror.aliyuncs.com"],"live-restore": true}

2. Docker容器的资源控制

Docker通过Cgroup 来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。Caroup 是ControlGroups的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如 cpu、内存、磁盘,io等等)的机制,被LXC、docker等很多项目用于实现进程资源控制。Cgroup本身是提供将进程进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体的资源管理是通过该功能来实现的。

  • 资源限制:可以对任务使用的资源总额进行限制。
  • 优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级。
  • 资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等。
  • 任务控制: cgroup可以对任务 执行挂起、恢复等操作。

3 .docker占用宿主机cpu的限制

3.1 cpu的使用率上限

Linux通过CFS (Completely Fair Scheduler,完全公平调度器)来调度各个进程对ceu的使用。CFS默认的调度周期是100ms 。我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间。

 使用--cpu-period 即可设置调度周期,使用--cpu-quota即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。CFS周期的有效范围是 1ms~1s,对应的--cpu-period 的数值范围是1000~1000000。而容器的CPU配额必须不小于1ms,即--cpu-quota的值必须>= 1000。而容器的CPU配额必须不小于1ms,即--cpu-quota的值必须>= 1000。

(1)正常启用的cpu,测试使用上限


#正常创建容器(此时容器遵循默认的占用cpu资源规则)
[root@localhost ~]#docker run -id --name c1 centos:7[root@localhost ~]#docker ps -a[root@localhost ~]#docker exec -it c1 bash[root@d6da0a6b999a /]# vi cpu.sh#!/bin/bash
i=0
while true
do
let i++
done[root@d6da0a6b999a /]# chmod +x cpu.sh [root@d6da0a6b999a /]# ./cpu.sh如果在创建容器时不限制它cpu使用的限制,是非常危险的一件事,一旦某个容器的程序异常陷入死循环,将直接导致其他容器中业务的中断 

(2)修改默认的容器时间分片上限规则,再次创建启动测试

docker start c1
docker ps -a
#d6da0a6b999aeaac89e2ce883b6ff057abd5f4c2319d9a539635ff8e1f43fe04为容器id
cd/sys/fs/cgroup/cpu/docker/d6da0a6b999aeaac89e2ce883b6ff057abd5f4c2319d9a539635ff8e1f43fe04[root@localhost d6da0a6b999aeaac89e2ce883b6ff057abd5f4c2319d9a539635ff8e1f43fe04]#echo 50000 > cpu.cfs_quota_us

(3)创建容器时指定容器的cpu资源占用量上限 


docker run -id --name c2 --cpu-quota 30000 centos:7
[root@localhost docker]#docker exec -it c2 bash
[root@10cfa036ff07 /]# vim cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
[root@10cfa036ff07 /]# vi cpu.sh
[root@10cfa036ff07 /]# chmod +x cpu.sh 
[root@10cfa036ff07 /]# ./cpu.sh

(4)多cpu分配容器的使用上限

[root@localhost docker]#docker run -id --name c3 centos:7[root@localhost docker]#docker ps -a[root@localhost docker]#cd /sys/fs/cgroup/cpu/docker/a1ce6948cdb6167570e6ef2101bb407d7de79407fbd9b9ac737ed40487f91a5a/
[root@localhost a1ce6948cdb6167570e6ef2101bb407d7de79407fbd9b9ac737ed40487f91a5a]#ls[root@localhost a1ce6948cdb6167570e6ef2101bb407d7de79407fbd9b9ac737ed40487f91a5a]#echo 200000 >  cpu.cfs_quota_us[root@localhost ~]#docker exec -it c3 bash
[root@a1ce6948cdb6 /]# vi cpu.bash
#!/bin/bash
i=0
while true
do
let i++
done
[root@a1ce6948cdb6 /]# chmod +x ./cpu.bash 
[root@a1ce6948cdb6 /]# ./cpu.bash 

3.2  设置cpu资源的占用比 

注意:该方式需要设置多个容器时才会生效 

创建容器时可以使用选项  --cpu-shares  数值(该数值要为1024的倍数,1024代表一份,当个容器占用cpu的份额由自身分配的份数除于所有容器占用cpu的份数,就为该容器所占用cpu资源的百分比)

进行分配:[root@localhost ~]#docker run -id --name b1 --cpu-shares 2048 centos:7[root@localhost ~]#docker run -id --name b2 --cpu-shares 1024 centos:7[root@localhost ~]#docker run -id --name b3 --cpu-shares 1024 centos:7

开启三个终端,启动容器压测:


#三个容器均为以下压测操作
#下载压测工具依赖环境
yum install -y epel-release
#下载压测工具
yum install -y stress
#进行四个线程压测
stress -c 4#再开启一个终端查看测试结果
docker stats
  • 由测试结果, 可以看到在cPU进行时间片分配的时候,容器b1比容器b2和b3多一倍的机会获得cpu的时间片。但分配的结果取决于当时主机和其他容器的运行状态,实际上也无法保证容器 b2和b3一定能获得cpu时间片
  • 比如容器b2和b3的进程一直是空闲的,那么容器b1是可以获取比容器b2和b3更多的cpu时间片的。极端情况下,例如主机上只运行了一个容器,即使它的cpu份额只有50,它也可以独占整个主机的cpu资源。
  •  Cgroups 只在容器分配的资源紧缺时,即在需要对容器使用的资源进行限制时,才会生效。因此,无法单纯根据某个容器的cpu 份额来确定有多少cpu资源分配给它,资源分配结果取决于同时运行的其他容器的CPU分配和容器中进程运行情况。

3.3 设置容器绑定指定的cpu 

查看主机中的cpu编号 

top   
按数字“1”

进行绑核创建容器 

[root@localhost ~]#docker run -id --name b4 --cpuset-cpus 2 centos:7

压力测试:

yum install -y epel-release
yum insatll -y stressstress -c 1

 测试结果:

 4.  内存使用的限制

m (或--memory=)选项用于限制容器可以使用的最大内存 

docker run -itd --name d1 -m 512m centos:7 /bin/bash
docker  stats

4.2 限制容器可用的swap 大小 

#限制可用的swap 大小,--memory-swap  

●强调一下, --memory-swap是必须要与 --memory(或-m)一起使用的。

●正常情况下, --memory-swap 的值包含容器可用内存和可用swap 。

●所以 -m 300m --memory-swap=1g 的含义为:容器可以使用300M 的物理内存,并且可以使用700M (1G - 300M)的swap。  ​  设置为0或者不设置,则容器可以使用的 swap 大小为 -m 值的两倍。  如果 --memory-swap 的值和 -m 值相同,则容器不能使用swap。  如果 --memory-swap 值为 -1,它表示容器程序使用的内存受限,而可以使用的swap空间使用不受限制(宿主机有多少swap 容器就可以使用多少)。

 #--memory-swap 的值包含容器可用内存和可用swap,减去-m的值才是可用swap的值。#表示容器可以使用512M的物理内存,并且可以使用512M的swap。因为1g减去512m的物理内存,剩余值才是可用swap。docker run -itd --name d2 -m 512m --memory-swap=1g centos:7 bash​​#--memoryswap值和 -m 的值相同,表示容器无法使用swapdocker run -itd --name d3 -m 512m --memory-swap=512m centos:7 bash​​# --memory-swap 的值设置为0或者不设置,则容器可以使用的 swap 大小为 -m 值的两倍。docker run -itd --name d4 -m 512m centos:7 bash​​# --memory-swap 值为 -1,它表示容器程序使用的内存受限,但可以使用的swap空间使用不受限制(宿主机有多少swap 容器就可以使用多少)。docker run -itd --name d5 -m 512m --memory-swap=-1 centos:7 bash

5. 对磁盘IO的配置控制(blkio)的限制 

  • -device-read-bps:限制某个设备上的读速度bps ( 数据量),单位可以是kb、mb (M)或者gb。
  • --device-write-bps : 限制某个设备上的写速度bps ( 数据量),单位可以是kb、mb (M)或者gb。
  • 该速度是指每秒钟进行读写操作1M,1G或者是1kb 
  • --device-read-iops :限制读某个设备的iops (次数)
  • --device-write-iops :限制写入某个设备的iops ( 次数)

5.1 默认情况下容器的写速度 

[root@localhost ~]#docker run -id --name e1  centos:7
[root@localhost ~]#docker exec -it e1 bash
[root@8657384cb483 /]# dd if=/dev/zero  of=/opt/test.txt bs=10M count=5 oflag=direct
## oflag=direct 规避文件读写系统中所带来的缓存,避免影响测试结果

5.2 进行写速度限制的容器创建 

 
[root@localhost ~]#docker run -it --name e3 --device-write-bps /dev/sda:1M centos:7 /bin/bash
[root@6c1b8bcf6b44 /]# dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct

6. 清除docker占用的磁盘空间

docker system prune -a 可用于清理磁盘,删除关闭的容器、无用的数据卷和网络。

docker system prune -a 

 总结

 1.对网络模式的控制

 ########映射端口 -P为随机 -p为指定端口#################
docker run -itd  --name=为容器指定名称 -P 镜像名称
docker run -itd --name=为容器指定名称 -p 宿主机端口:容器端口 镜像名称##############指定网络模式###########################使用docker' run 创建Docker容器时,可以用--net 或--network 选项指定容器的网络模式●host模式:使用 --net=host 指定。●none模式:使用 --net=none 指定。●container模式:使用--net=container:NAME/ID指定。●bridge模式:使用 --net=bridge 指定,默认设置,可省略。############自定义网络####################################
注意:只要自定义网络在创建容器时才能指定IP(必须是自定义网段中的IP)
#创建自定义网络docker network create --subnet=网段 --opt "com.docker.network.bridge.name"="网卡名" 自定义网络的名称#使用自定义网络docker run -itd --name 容器名 --net 自定义网路名 --ip 自定义网路网段范围内的IP  centos:7 /bin/bash#删除自定义网络
docker network rm 网络模式名称

2.对cpu的限制参数

 docker run --cpu-period     #设置调度周期时间1000~1000000--cpu-quota      #设置容器进程的CPU占用时间,要与调度周期时间成比例--cpu-shares    #设置多个容器之间的CPU资源占用比--cpuset-cpus   #绑核(第一个CPU编号从0开始)

3.对内存的限制

 -m 物理内存 [--memory-swap=总值]

4.对磁盘IO的限制

 --device-read-bps 设备文件:1mb/1M     #限制读速度--device-write-bps 设备文件:1mb/1M    #限制写速度--device-read-iops                   #限制读次数--device-write-iops                  #限制写次数​docker system prune -a    #清理磁盘,删除关闭的容器、无用的数据卷和网络。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/95168.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opsForHash() 与 opsForValue 请问有什么区别?

&#x1f449;&#xff1a;&#x1f517;官方API参考手册 如图&#xff0c;opsForHash()返回HashOperations<K,HK,HV>但是 opsForValue()返回ValueOperations<K,V>… 区别就是opsForHash的返回值泛型中有K,HK,HV,其中K是Redis指定的某个数据库里面某一个关键字(由…

详解拦截器和过滤器

目录 代码演示过滤器Demo拦截器Demo 过滤器自定义拦截器配置拦截器过滤器执行原理多个过滤器的执行顺序 拦截器自定义拦截器注册拦截器1&#xff09;注册拦截器2&#xff09;配置拦截的路径3&#xff09;配置不拦截的路径 多个拦截器的执行顺序 过滤器和拦截器的区别 代码演示 …

如何使用Spark/Flink等分布式计算引擎做网络入侵检测

如何使用Spark/Flink等分布式计算引擎做网络入侵检测 引言16 Distributed Abnormal Behavior Detection Approach Based on Deep Belief Network and Ensemble SVM Using Spark17 Spark configurations to optimize decision tree classification on UNSW-NB1518 A dynamic spa…

elementUI 的上传组件<el-upload>,自定义上传按钮样式

方法一&#xff1a; 原理&#xff1a;调用<el-upload>组件的方法唤起选择文件事件 效果&#xff1a; 页面代码&#xff1a; 1、选择图片按钮 <div class"flex_row_spacebetween btn" click"chooseImg"><span class"el-icon-plus ic…

【QT】 QFileQFileInfo文件操作

很高兴在雪易的CSDN遇见你 &#xff0c;给你糖糖 欢迎大家加入雪易社区-CSDN社区云 前言 本文分享QT对文件的操作技术&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xff01; 你的点…

Vue3 —— watchEffect 高级侦听器

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 Vue3 中新增了一种特殊的监听器 watchEffect&#xff0c;它的类型是&#xff1a; function watchEffect(effect: (onCleanup: OnCleanup) > void,o…

go_并发编程(1)

go并发编程 一、 并发介绍1&#xff0c;进程和线程2&#xff0c;并发和并行3&#xff0c;协程和线程4&#xff0c;goroutine 二、 Goroutine1&#xff0c;使用goroutine1&#xff09;启动单个goroutine2&#xff09;启动多个goroutine 2&#xff0c;goroutine与线程3&#xff0…

通过 HttpClient 发送请求

文章目录 1. 引入 maven 依赖2. 发送 GET 方式的请求3. 发送 POST 方式的请求 1. 引入 maven 依赖 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId> </dependency>2. 发送 GET 方式的请求…

C++类型转换

目录 隐式类型转换 转型方向 整型提升和截断 显示转换的种类 C风格的强制类型转换 C风格的函数样式转换 隐式类型转换 转型方向 隐式类型转换&#xff0c;又称自动转换、算数转换&#xff0c;是由编译器自动完成的类型转换称为隐式类型转换。自动转换的原则为&#xff…

Leaflet入门,Leaflet如何实现vue双向绑定数据添加到图片标记物到地图上,动态根据vue数据更新到地图上以及鼠标经过标记物显示提示框

前言 本章使用Leaflet的vue2-leaflet或者vue-leaflet插件方式实现vue数据绑定地图数据,实现地图标记物与vue数据的双向联动更新,以及鼠标经过标记物显示提示框功能。 实现效果演示 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定…

GaussDB数据库SQL系列-子查询

目录 一、前言 二、GaussDB SQL子查询表达式 1、EXISTS/NOT EXISTS 2、IN/NOT IN 3、ANY/SOME 4、ALL 三、GaussDB SQL子查询实验示例 1、创建实验表 2、EXISTS/NOT EXISTS示例 3、IN/NOT IN 示例 4、ANY/SOME 示例 5、ALL示例 四、注意事项及建议 五、小结 一、…

msvcp110.dll是什么意思,msvcp110.dll丢失的解决方法

装好软件或游戏之后&#xff0c;一打开就跳出各种报错信息的情况小伙伴一定见过&#xff0c;其中缺少各种msvcp110.dll文件最常见。小伙伴们一定奇怪&#xff0c;用得好好的电脑&#xff0c;怎么会缺文件呢&#xff1f;为啥其他游戏/应用就没事呢&#xff1f;其实这些“丢失”的…

LVS负载均衡群集部署(LVS-NAT模型实例)

一、集群 1.1集群的含义 Cluster&#xff0c;集群、群集,为解决某个特定问题将多台计算机组合起来形成的单个系统。 由多台主机构成&#xff0c;但对外只表现为一个整体。 1.2群集的三种类型 1.2.1负载均衡群集 LB&#xff1a; Load Balancing&#xff0c;负载均衡&#x…

国产化系统中遇到的视频花屏、卡顿以及延迟问题的记录与总结

目录 1、国产化系统概述 1.1、国产化操作系统与国产化CPU 1.2、国产化服务器操作系统 1.3、当前国产化系统的主流配置 2、视频解码花屏与卡顿问题 2.1、视频解码花屏 2.2、视频解码卡顿 2.3、关于I帧和P帧的说明 3、国产显卡处理速度慢导致图像卡顿问题 3.1、视频延…

【C++类和对象】类有哪些默认成员函数呢?(下)

文章目录 一、类的6个默认成员函数二、日期类的实现2.1 运算符重载部分2.2 日期之间的运算2.3 整体代码1.Date.h部分2. Date.cpp部分 三. const成员函数四. 取地址及const取地址操作符重载扩展内容 总结 ヾ(๑╹◡╹)&#xff89;" 人总要为过去的懒惰而付出代价ヾ(๑╹◡…

【Rust】Rust学习 第十二章一个 I/O 项目:构建一个命令行程序

本章既是一个目前所学的很多技能的概括&#xff0c;也是一个更多标准库功能的探索。我们将构建一个与文件和命令行输入/输出交互的命令行工具来练习现在一些你已经掌握的 Rust 技能。 Rust 的运行速度、安全性、单二进制文件输出和跨平台支持使其成为创建命令行程序的绝佳选择…

2023上半年京东手机行业品牌销售排行榜(京东数据平台)

后疫情时代&#xff0c;不少行业都迎来消费复苏&#xff0c;我国智能手机市场在今年上半年也实现温和的复苏&#xff0c;手机市场的出货量回暖。 根据鲸参谋平台的数据显示&#xff0c;2023年上半年&#xff0c;京东平台上手机的销量为2830万&#xff0c;环比增长约4%&#xf…

sql中union all、union、intersect、minus的区别图解,测试

相关文章 sql 的 join、left join、full join的区别图解总结&#xff0c;测试&#xff0c;注意事项 1.结论示意图 对于intersect、minus&#xff0c;oracle支持&#xff0c;mysql不支持&#xff0c;可以变通&#xff08;in或exists&#xff09;实现 2.创建表和数据 -- 建表…

Android Socket使用TCP协议实现手机投屏

本节主要通过实战来了解Socket在TCP/IP协议中充当的是一个什么角色&#xff0c;有什么作用。通过Socket使用TCP协议实现局域网内手机A充当服务端&#xff0c;手机B充当客户端&#xff0c;手机B连接手机A&#xff0c;手机A获取屏幕数据转化为Bitmap&#xff0c;通过Socket传递个…

Linux——KVM虚拟化

目录标题 虚拟化技术虚拟化技术发展案例KVM简介KVM架构及原理KVM原理KVM虚拟化架构/三种模式虚拟化前、虚拟化后对比KVM盖中盖套娃实验 虚拟化技术 通过虚拟化技术将一台计算机虚拟为多台逻辑计算机&#xff0c;在一台计算机上同时运行多个逻辑计算机&#xff0c;同时每个逻辑…