当前位置: 首页 > news >正文

【云原生】Docker Cgroups资源控制管理

目录

一、cgroups简介

cgroups有四大功能:

二、cpu时间片的概念

三、对CPU使用的限制

3.1 设置CPU使用率上限

(1)查看容器的默认CPU使用限制

(2)进行压力测试

(3)创建容器时设置CPU使用时间限制

(4)对已存在的容器进行CPU限制

3.2 设置CPU资源占用比(设置多个容器时才有效)

(1)创建两个容器,设置CPU资源占用比

(2)分别进入两个容器,进行压力测试

(3)查看容器运行状态,观察CPU使用占比

3.3 设置容器绑定指定的CPU(绑核)

四、对内存使用的限制

4.1 限制容器可以使用的最大内存

4.2 限制容器可用的swap 大小

五、对磁盘IO的配置控制(blkio)的限制

5.1 创建容器,不限制写速度

5.2 创建容器,并限制写速度

六、清除docker占用的磁盘空间

总结

1.对cpu的限制参数

2.对内存的限制

3.对磁盘IO的限制


一、cgroups简介

cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace 隔离起来的资源,还可以 为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。

cgroups有四大功能:

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

二、cpu时间片的概念

时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。

在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

三、对CPU使用的限制

3.1 设置CPU使用率上限

Linux通过CFS (Completely Fair Scheduler, 完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms

我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间。

使用 --cpu-period 即可设置调度周期,使用 --cpu-quota 即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。

CFS周期的有效范围是1ms ~ 1s, 对应的 --cpu-period 的数值范围是 1000 ~1000000 (单位微秒)。

而容器的CPU配额必须不小于1ms,即 --cpu-quota 的值必须 >= 1000。

(1)查看容器的默认CPU使用限制

#创建并启动容器[root@yuji ~]# docker run -itd --name test1 centos:7 /bin/bashWARNING: IPv4 forwarding is disabled. Networking will not work.059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08#查看容器状态[root@yuji ~]# docker ps -aCONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES059823a1abbe   centos:7   "/bin/bash"   12 seconds ago   Up 10 seconds             test1​#切换到cgroup下针对容器的相关配置目录[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/[root@yuji docker]# ls059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08  cpu.cfs_quota_uscgroup.clone_children                                             cpu.rt_period_uscgroup.event_control                                              cpu.rt_runtime_uscgroup.procs                                                      cpu.sharescpuacct.stat                                                      cpu.statcpuacct.usage                                                     notify_on_releasecpuacct.usage_percpu                                              taskscpu.cfs_period_us##切换到test1容器的目录[root@yuji docker]# cd 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# lscgroup.clone_children  cgroup.procs  cpuacct.usage         cpu.cfs_period_us  cpu.rt_period_us   cpu.shares  notify_on_releasecgroup.event_control   cpuacct.stat  cpuacct.usage_percpu  cpu.cfs_quota_us   cpu.rt_runtime_us  cpu.stat    tasks##查看test1容器的CPU使用限额。即每个调度周期内可占用的CPU时间(单位:微秒)[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_quota_us-1                            #默认为-1,表示不限制##查看CPU调度周期(单位:微秒)[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_period_us100000                        #单位微秒,即100毫秒,0.1秒​#cpu.cfs_period_us:分配的周期(微秒,所以文件名中用u),默认为100000。#cpu.cfs_quota_us:表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制。#cpu.cfs_quota_us 如果设为50000,表示占用 50000/100000=50%的CPU。

1-1.png

1-2.png

(2)进行压力测试

[root@yuji ~]# docker exec -it test1 bash     #进入容器[root@059823a1abbe /]# vi /cpu.sh         #写个死循环脚本#!/bin/bashi=0while truedolet i++done[root@059823a1abbe /]# chmod +x cpu.sh    #给脚本权限[root@059823a1abbe /]# ./cpu.sh           #运行脚本​#再开一个终端,查看cpu.sh进程的cpu使用率[root@localhost ~]# top                  #可以看到使用率接近100%PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND3328 root      20   0   11688   1100    916 R  99.7  0.1   7:04.44 cpu.sh#之后在容器中使用ctrl+c,停止脚本的执行,再top观察CPU使用率

1-3.png

1-4.png

1-5.png

1-6.png

(3)创建容器时设置CPU使用时间限制

#创建容器test2,并限制CPU使用时间为50000微秒,表示最多占用50%的CPU。[root@yuji ~]# docker run -itd --name test2 --cpu-quota 50000 centos:7WARNING: IPv4 forwarding is disabled. Networking will not work.8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b#查看CPU限额文件[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/[root@yuji docker]# ls059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08  cpuacct.usage         cpu.shares8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b  cpuacct.usage_percpu  cpu.statcgroup.clone_children                                             cpu.cfs_period_us     notify_on_releasecgroup.event_control                                              cpu.cfs_quota_us      taskscgroup.procs                                                      cpu.rt_period_uscpuacct.stat                                                      cpu.rt_runtime_us[root@yuji docker]# cd 8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b[root@yuji 8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b]# cat cpu.cfs_quota_us50000​#登录容器test2,写个死循环脚本并运行[root@yuji ~]# docker exec -it test2 bash[root@8e7ba758a231 /]#  vi /cpu.sh#!/bin/bashi=0while truedolet i++done[root@8e7ba758a231 /]# chmod +x cpu.sh[root@8e7ba758a231 /]# ./cpu.sh ​#再开一个终端,查看cpu使用率[root@yuji ~]# top                  #CPU使用率在50%左右PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND3746 root      20   0   11688   1096    916 R  50.0  0.1   1:55.26 cpu.sh​​#容器的CPU使用时间限制设为50000,而调度周期为100000,表示容器占用50000/100000=50%的CPU。

1-7.png

1-8.png

1-9.png

(4)对已存在的容器进行CPU限制

直接修改 /sys/fs/cgroup/cpu/docker/容器id/cpu.cfs_quota_us 文件即可

#进入test1容器目录,修改CPU使用时间限制[root@yuji ~]# cd /sys/fs/cgroup/cpu/docker/[root@yuji docker]# ls059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08  cpuacct.usage         cpu.shares8e7ba758a231b29dad1f668ba83092e8f637d2a9785999c6d23b27c60935b12b  cpuacct.usage_percpu  cpu.statcgroup.clone_children                                             cpu.cfs_period_us     notify_on_releasecgroup.event_control                                              cpu.cfs_quota_us      taskscgroup.procs                                                      cpu.rt_period_uscpuacct.stat                                                      cpu.rt_runtime_us[root@yuji docker]# cd 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08#修改CPU使用时间限制[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# echo "33000" >cpu.cfs_quota_us[root@yuji 059823a1abbe2ac6ed35599ca0d3d68049e49263ff9add8f65cc55daa094ec08]# cat cpu.cfs_quota_us33000​#此时再进入test1容器执行之前创建好的脚本,进行压力测试[root@yuji ~]# docker exec -it test1 bash[root@059823a1abbe /]# ./cpu.sh​#再开一个终端,查看cpu使用率[root@localhost ~]# topPID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND4635 root      20   0   11688   1096    916 R  33.3  0.1   1:27.62 cpu.sh​​#容器的CPU使用时间限制设为33000,而调度周期为100000,表示容器占用33000/100000=33%的CPU。

1-10.png

1-11.png

1-12.png

3.2 设置CPU资源占用比(设置多个容器时才有效)

Docker 通过 --cpu-shares 指定CPU份额,默认值为1024,值为1024的倍数。

(1)创建两个容器,设置CPU资源占用比

#先删除所有容器[root@yuji ~]# docker rm -f $(docker ps -aq)9c48e09ea1567c7e024b557e​#创建两个容器为c1和c2#只有这2个容器的情况下,cpu资源分摊给这两个容器,512:1024等于1:2,一个占1/3,一个占2/3。[root@yuji ~]# docker run -itd --name c1 --cpu-shares 512 centos:7WARNING: IPv4 forwarding is disabled. Networking will not work.300b50f13ebef4921029e352f5850b1c81f8f8e28827a8d11f20e55eec94642b[root@yuji ~]# docker run -itd --name c2 --cpu-shares 1024 centos:7WARNING: IPv4 forwarding is disabled. Networking will not work.7a999b00c9eef7fdb916c2914087809e7eba55b1c52aaaabeeda16a4006f57a9[root@yuji ~]# docker ps -aCONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES7a999b00c9ee   centos:7   "/bin/bash"   4 seconds ago   Up 3 seconds             c2300b50f13ebe   centos:7   "/bin/bash"   6 seconds ago   Up 5 seconds             c1

2-1.png

(2)分别进入两个容器,进行压力测试

#宿主机开启路由转发功能,使容器能够连通外网[root@yuji ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf[root@yuji ~]# sysctl -pnet.ipv4.ip_forward = 1​#进入c1容器,进行压力测试docker exec -it c1 bashyum install -y epel-release    #下载epel源yum install -y stress          #安装stress工具stress -c 4   #产生四个进程,每个进程都反复不停地计算随机数的平方根​#进入c2容器,进行压力测试docker exec -it c2 bashyum install -y epel-release    #下载epel源yum install -y stress          #安装stress工具stress -c 4   #产生四个进程,每个进程都反复不停的计算随机数的平方根

2-2.png

进入c1容器,进行压力测试:

2-3.png

2-4.png

2-5.png

进入c2容器,进行压力测试:

2-6.png

2-7.png

2-8.png

(3)查看容器运行状态,观察CPU使用占比

#再打开一个终端,查看容器运行状态(动态更新)[root@yuji ~]# docker stats     #可以看到CPU使用占比大约是1:2CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O        PIDS7a999b00c9ee   c2        266.52%   188.9MiB / 1.938GiB   9.52%     32.8MB / 152kB   1.91MB / 50MB    7300b50f13ebe   c1        133.03%   203.1MiB / 1.938GiB   10.24%    33.7MB / 603kB   108MB / 51.4MB   7​#因为宿主机有4核,所以CPU总百分比是400%。#c1:c2 = 133.03%:266.52% ≈ 1:2

2-9.png

3.3 设置容器绑定指定的CPU(绑核)

注意:CPU编号从0开始。 编号1、3代表第二个核和第四个核 。

#先为虚拟机分配4个CPU核数​#创建容器c3时,绑定1号和3号这两个CPU[root@yuji ~]# docker run -itd --name c3 --cpuset-cpus 1,3 centos:7 /bin/bash​#进入容器,进行压力测试docker exec -it c3 bashyum install -y epel-release    #下载epel源yum install -y stress          #安装stress工具stress -c 4   #产生四个进程,每个进程都反复不停地计算随机数的平方根​#退出容器,执行top命令再按1查看CPU使用情况[root@yuji ~]# top    #可以看到CPU1和CPU3占满,其他CPU使用率为0top - 01:12:49 up  4:01,  3 users,  load average: 3.47, 2.96, 2.49Tasks: 183 total,   6 running, 177 sleeping,   0 stopped,   0 zombie%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu1  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem :  2031912 total,   150852 free,   635800 used,  1245260 buff/cacheKiB Swap:  4194300 total,  4194236 free,       64 used.  1138692 avail Mem

3-1.png

3-2.png

3-3.png

3-4.png

四、对内存使用的限制

4.1 限制容器可以使用的最大内存

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

#-m(--memory=)选项用于限制容器可以使用的最大内存。​#创建容器c4,并限制容器可以使用的最大内存为512m[root@yuji ~]# docker run -itd --name c4 -m 512m centos:7 /bin/bash​#查看容器状态,可以看到c4可以使用的最大内存是512M[root@yuji ~]# docker statsCONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O         PIDS437180fc6266   c4        0.00%     396KiB / 512MiB       0.08%     648B / 0B        0B / 0B           1ebcc06da3a03   c3        0.00%     174.2MiB / 1.938GiB   8.78%     32.8MB / 196kB   47.7MB / 50.6MB   17a999b00c9ee   c2        0.00%     101.7MiB / 1.938GiB   5.13%     32.9MB / 152kB   1.91MB / 50MB     2300b50f13ebe   c1        0.00%     113MiB / 1.938GiB     5.69%     33.7MB / 603kB   108MB / 51.4MB    1

4-1.png

4-2.png

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 yy01 -m 512m --memory-swap=1g centos:7 bash​​#--memoryswap值和 -m 的值相同,表示容器无法使用swapdocker run -itd --name yy02 -m 512m --memory-swap=512m centos:7 bash​​# --memory-swap 的值设置为0或者不设置,则容器可以使用的 swap 大小为 -m 值的两倍。docker run -itd --name yy03 -m 512m centos:7 bash​​# --memory-swap 值为 -1,它表示容器程序使用的内存受限,但可以使用的swap空间使用不受限制(宿主机有多少swap 容器就可以使用多少)。docker run -itd --name yy04 -m 512m --memory-swap=-1 centos:7 bash

4-3.png

五、对磁盘IO的配置控制(blkio)的限制

--device-read-bps:限制某个设备上的读速度bps ( 数据量),单位可以是kb、mb (M)或者gb。

--device-write-bps : 限制某个设备上的写速度bps ( 数据量),单位可以是kb、mb (M)或者gb。

--device-read-iops :限制读某个设备的iops (次数)

--device-write-iops :限制写入某个设备的iops ( 次数)

 

--device-read-bps:限制某个设备上的读速度bps ( 数据量),单位可以是kb、mb (M)或者gb。
 例: docker run -itd --name test9 --device-read-bps /dev/sda:1M centos:7 /bin/bash
 #表示该容器每秒只能读取1M的数据量
 ​
 --device-write-bps : 限制某个设备上的写速度bps ( 数据量),单位可以是kb、mb (M)或者gb。
 例: docker run -itd --name test10 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
 #表示该容器每秒只能写入1M的数据量
 ​
 --device-read-iops :限制读某个设备的iops (次数)
 --device-write-iops :限制写入某个设备的iops ( 次数)

5.1 创建容器,不限制写速度

 

#创建容器tt01,不限制写入速度
 docker run -it --name tt01 centos:7 /bin/bash
 ​
 #通过dd来验证写速度,拷贝50M的数据
 dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct   #添加oflag参数以规避掉文件系统cache
 ​
 #创建容器tt01,不限制写入速度
 [root@yuji ~]# docker run -it --name tt01 centos:7 /bin/bash
 #通过dd来验证写速度,拷贝50M的数据到容器中
 [root@a62f5b811e58 /]# dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct   #添加oflag参数以规避掉文件系统cache
 5+0 records in
 5+0 records out
 52428800 bytes (52 MB) copied, 0.0948474 s, 553 MB/s
 ​
 #没有限制写速度的情况下,写入很快,0.09秒的时间内已写入50M的数据,写入速度为553M/s。

5-1.png

5.2 创建容器,并限制写速度

 

#创建容器,并限制写入速度为1MB/s,即每秒只能写入1MB的数据量。
 [root@yuji ~]# docker run -it --name tt02 --device-write-bps /dev/sda:1mb centos:7 bash
 #通过dd来验证写速度,拷贝50M的数据到容器中
 [root@655f6cca0175 /]# dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct  #添加oflag参数以规避掉文件系统cache
 5+0 records in
 5+0 records out
 52428800 bytes (52 MB) copied, 50.0048 s, 1.0 MB/s
 ​
 #写入50M的数据,需要50s左右,因为限制了容器的写速度是 1.0 MB/s。

5-2.png

六、清除docker占用的磁盘空间

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

示例:

 

#查看容器
 [root@yuji ~]# docker ps -a
 CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                      PORTS     NAMES
 655f6cca0175   centos:7   "bash"        10 minutes ago   Exited (0) 4 minutes ago              tt02
 a62f5b811e58   centos:7   "/bin/bash"   19 minutes ago   Exited (0) 11 minutes ago             tt01
 437180fc6266   centos:7   "/bin/bash"   36 minutes ago   Up 36 minutes                         c4
 ebcc06da3a03   centos:7   "/bin/bash"   50 minutes ago   Up 50 minutes                         c3
 #清理磁盘,删除关闭的容器、无用的数据卷和网络。
 [root@yuji ~]# docker system prune -a
 WARNING! This will remove:                                   #提示
   - all stopped containers                                   #删除清理所有停止的容器
   - all networks not used by at least one container          #删除未被使用的网络
   - all images without at least one container associated to them  #未被使用的镜像
   - all build cache                                         #删除已建立的缓存
 ​
 Are you sure you want to continue? [y/N] y                #是否确定删除
 Deleted Containers:
 655f6cca01754d27a080e01b64aa26c4f96642ab5b5931b186ad04082a98430f
 a62f5b811e584cc6e8d344830d5df9ddcbdd72761966989245b0c52f6abb9a4a
 ......
 Total reclaimed space: 451MB

 ​
 #再次查看容器,只剩下启动中的容器
 [root@localhost ~]# docker ps -a
 CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
 525d77ff7423   centos:7   "/bin/bash"   3 minutes ago    Up 3 minutes              c6
 fb2ee21e0468   centos:7   "/bin/bash"   12 minutes ago   Up 12 minutes             c4
 81e3ea8f526e   centos:7   "/bin/bash"   18 minutes ago   Up 18 minutes             c3

6-1.png

6-2.png

总结

1.对cpu的限制参数

 

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

2.对内存的限制

 

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

3.对磁盘IO的限制

 

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

相关文章:

【云原生】Docker Cgroups资源控制管理

目录 一、cgroups简介 cgroups有四大功能: 二、cpu时间片的概念 三、对CPU使用的限制 3.1 设置CPU使用率上限 (1)查看容器的默认CPU使用限制 (2)进行压力测试 (3)创建容器时设置CPU使用时…...

k8s部署prometheus

1、prometheus部署yml文件地址 github地址 2、下载yml文件 rootiZj6cd9joygowsf7am5hryZ:~# git clone https://github.com/redhatxl/k8s-prometheus-grafana.git Cloning into k8s-prometheus-grafana... remote: Enumerating objects: 21, done. remote: Total 21 (delta 0)…...

飞书小程序开发

1.tt.showModal后跳转页面 跳转路径要为绝对路径,相对路径跳转无响应。 2.手机息屏后将不再进入onload()生命周期,直接进入onshow()生命周期。 onLoad()在页面初始化的时候触发,一个页面只调用一次。 onShow()在切入前台时就会触发&#x…...

Revit 3D高效处理:cad exchanger sdk 3.21 Crack

3D 格式概述:Revit Revit 已成为寻求高效、准确的建筑信息建模的专业人士的首选解决方案。在这篇引人入胜的功能概述中了解 Revit 的特性和影响。 什么是Revit? Autodesk Revit 是一款流行的 CAD 软件,重点关注 BIM,被建筑师、工…...

【已解决】Linux中启动docker 出现 ‘ Failed to start docker.service: Unit not found. ’ 错误

启动docker 出现 ‘ Failed to start docker.service: Unit not found. ’ 错误 这是因为缺少 rhel-push-plugin.socket 单元,该单元是rhel-push-plugin软件包的一部分。所以我们执行以下指令就可以成功解决: curl -sSL https://get.docker.com/ | sh 执…...

【学习日记】【FreeRTOS】时间片的实现

前言 本文以野火的教程和代码为基础,对 FreeRTOS 中时间片的概念作了解释,并且给出了实现方式,同时发现并解决了野火教程代码中的 bug。 一、时间片是什么 在前面的文章中,我们已经知道任务根据不同的优先级被放入就绪列表中不…...

CentOS Docker仓库和代理配置

无法直接访问外部网络时,除了Host自己的全局代理设置之外,需要单独给Docker Client和Instance设置代理。 如执行docker run时遇到下面的错误 docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 3.216.…...

Lnton羚通算法算力云平台在环境配置中Windows10终端和VSCode下如何打开Anaconda-Prompt

在Windows 10的终端和VSCode中,可以直接打开Anaconda Prompt。下面是两种方法: Windows 10终端:在开始菜单中搜索"Anaconda Prompt",然后点击打开。这将启动Anaconda Prompt终端,你可以在其中执行conda相关命…...

Python web实战之细说Django的集成测试

关键词: Python Web开发、Django、集成测试、实战、测试驱动开发、自动化测试、Selenium、测试框架、测试用例、代码覆盖率、持续集成 今天给大家分享一下Python Web开发——Django的集成测试,如何利用集成测试来提高代码质量、减少bug。 1. 什么是集成…...

Laravel 模型的作用域 模型的访问器和修改器 ⑨

作者 : SYFStrive 博客首页 : HomePage 📜: THINK PHP 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f44…...

每日一学——交换机

交换机是一种网络设备,用于连接多台计算机和其他网络设备,以实现数据的交换和传输。它通过将数据包在不同端口之间转发,将数据从一个设备发送到目标设备。交换机可以提供高速、可靠和安全的局域网连接。 交换机的工作原理是根据目标MAC地址来…...

数学建模大全及优缺点解读

分类模型 1、距离聚类(系统聚类)(常用,需掌握) 优点: ①将一批样本数据按照他们在性质上的亲密程度在没有先验知识的情况下自动进行分类 ②是一种探索性的分析方法,分类结果不一定相同 例如&am…...

C++简介

文章目录 C简介C版本C11例子 C14例子 C17C20例子 C简介 C是一种高级编程语言,它是对C语言的扩展和增强。C由Bjarne Stroustrup于1980年发明,主要用于系统级编程、游戏开发、嵌入式系统等领域。 C具有许多特性,其中最重要的是面向对象编程&a…...

【广州华锐互动】3D空间编辑器:一款简洁易用的VR/3D在线编辑工具

随着虚拟现实技术的不断发展,数字孪生技术的应用已经被广泛应用于产品设计和制作中,能充分发挥企业应用3D建模的优势,凸显了三维设计的价值,在生产阶段也能够充分发挥3D模型的作用。 如今,广州华锐互动开发的3D空间编辑…...

golang云原生项目☞redis配置

配置redis适用与golang云原生架构。包括redis与数据库一致性等重要内容 1、编写redis配置文件、使用viper读取 配置文件 db.yml redis:addr: 127.0.0.1port: 6379password: tiktokRedisdb: 0 # 数据库编号读取配置文件 var (config viper.Init("db")zapL…...

C++ malloc/free/new/delete详解(内存管理)

C malloc/free/new/delete详解(内存管理) malloc/free典型用法内存分配实现过程brk和mmap申请小于128k的内存申请大于128k的内存释放内存brk和mmap的区别 new/delete典型用法 内存分配实现过程new/delete和malloc/free的区别malloc对于给每个进程分配的内…...

SpringBoot中Mapper.xml的入参方式

在SpringBoot开发过程中,我们使用 ***Mapper.xml***Mapper.java 来封装对数据库表的 CURD 操作,正常每张表会有一组对应的文件。 一、Mapper常见用法 下面例举一个查询操作: 数据表t_sap_customer,表中有字段id、code、name、c…...

回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图&#…...

浅析Python爬虫ip程序延迟和吞吐量影响因素

作为一名资深的爬虫程序员,今天我们很有必要来聊聊Python爬虫ip程序的延迟和吞吐量,这是影响我们爬取效率的重要因素。这里我们会提供一些实用的解决方案,让你的爬虫程序飞起来! 网络延迟 首先,让我们来看看网络延迟对…...

【100天精通python】Day43:python网络爬虫开发_爬虫基础(urlib库、Beautiful Soup库、使用代理+实战代码)

目录 1 urlib 库 2 Beautiful Soup库 3 使用代理 3.1 代理种类 HTTP、HTTPS 和 SOCKS5 3.2 使用 urllib 和 requests 库使用代理 3.3 案例:自建代理池 4 实战 提取视频信息并进行分析 1 urlib 库 urllib 是 Python 内置的标准库,用于处理URL、发送…...

Linux:安全技术与防火墙

目录 一、安全技术 1.安全技术 2.防火墙的分类 3.防水墙 4.netfilter/iptables关系 二、防火墙 1、iptables四表五链 2、黑白名单 3.iptables命令 3.1查看filter表所有链 iptables -L ​编辑3.2用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.3 清空所有链…...

Confluent kafka 异常退出rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack

rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack 根据网上的例子,做了一个测试程序。 C# 操作Kafka_c# kafka_Riven Chen的博客-CSDN博客 但是执行下面一行时,弹出上面的异常,闪退。 consumer.Subscribe(queueName) 解决方案&…...

最新ChatGPT网站程序源码+AI系统+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧&#xff01…...

chatGPT-对话柏拉图

引言: 古希腊哲学家柏拉图,在他的众多著作中,尤以《理想国》为人所熟知。在这部杰作中,他勾勒了一个理想的政治制度,提出了各种政体,并阐述了他对于公正、智慧以及政治稳定的哲学观点。然而,其…...

Java项目-苍穹外卖-Day04

公共字段自动填充 这些字段在每张表基本都有,手动进行填充效率低,且后期维护更改繁琐 使用到注解AOP主要 先答应一个AutoFill注解 再定义一个切面类进行通知 对应代码 用到了枚举类和反射 package com.sky.aspect; /*** 自定义切面类&#xff0c…...

SQL递归获取完整的树形结构数据

在 SQL 中,WITH RECURSIVE 用于创建递归查询,它允许在查询中引用自身。这种查询通常用于处理具有层次结构的数据,例如树形结构。 以下是使用 WITH RECURSIVE 创建递归查询的一般语法: WITH RECURSIVE [alias] ([column1], [colu…...

如何使用营销活动,提升小程序用户的参与度

在当今数字化时代,小程序已成为企业私域营销的重要一环。然而,仅仅拥有小程序还不足以吸引用户的兴趣和参与。营销活动作为推动用户参与的有效手段,可以在激烈的市场竞争中脱颖而出。本文将深入探讨如何使用营销活动,提升小程序用…...

IDEA中使用Docker插件构建镜像并推送至私服Harbor

一、开启Docker服务器的远程访问 1.1 开启2375远程访问 默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问 # 首先查看docker配置文件所在位置 systemctl status docker# 会输出如下内容: ● docker.service - Docker Ap…...

第7章 高性能门户首页构建

mini商城第7章 高性能门户首页构建 一、课题 高性能门户建设 二、回顾 1、了解文件存储系统的概念 2、了解常用文件服务器的区别 3、掌握Minio的应用 三、目标 1、OpenResty 百万并发站点架构 OpenResty 特性介绍 搭建OpenResty Web站点动静分离方案剖析 2、多级缓存架…...

用加持了大模型的 Byzer-Notebook 做数据分析是什么体验

Byzer-Notebook 是专门为 SQL 而研发的一款 Web Notebook。他的第一公民是 SQL,而 Jupyter 则是是以 Python 为第一公民的。 随着 Byzer 引擎对大模型能力的支持日渐完善, Byzer-Notebook 也在不自觉中变得更加强大。我和小伙伴在聊天的过程中才发现他已…...

网页设计搜题软件/seo优化快速排名

H5推广的形式中有一个方式是在其中加入明星互动,从刷屏朋友圈的“吴亦凡入伍”,到如今许多的企业品牌都喜欢利用明星在H5中进行互动推广。比如曼妥思-潮清凉:与张艺兴连线视频,碧欧泉:彭于晏需要你的帮助,桂…...

哪里有南宁网站建设/网址注册

值得注意的是,对于一个纯python程序,更适合使用要调用的c程序。如果python程序包含其他第三方库,调用很可能出错,它不是容易找到原因。通常一个大型python项目,如SSD目标探测、等等,需要调用很多第三方库,和多个模块是相互交织在一起的,虽然当你配置的路径与python项目环境,相对…...

wordpress admin慢/昆明做网站的公司

1、什么是alpha?超额收益就是alpha。超额收益是相对一个基准来说的。那么这个基准是什么?2、基准是什么?这就涉及联合假设问题(joint hypothesis problem):几乎所有的资产定价模型都假设资产市场是有效的,因此这些模型…...

找做金融的网站/seo关键词排名优化怎样

//游戏开发之面向对象 //在js的开发模式中有两种模式:函数式面向对象 //1.es5 // 拓展一:函数的申明和表达式之间的区别 // 函数的申明: // function funA(){ // // } // 表达式的写法:(推荐) // let funBfunction(){ // // } // …...

宁波电信网站备案/交易链接

DIV布局整理: 1、对于布局要使用DIVCSS,使页面中的结构与表现完全分离,结构位于html文件中,表现位于css文件中 2、对于要显示数据,特别是表格的列表形状数据的地方可以使用表格,此时用DIV可能更不好. 3、CSS里多使用Class少使用id(对于特定元…...

wordpress pinboard/新闻最新热点

对比git diff命令之前,我们先新建一个test.txt文本,先后执行如下命令 # 第一次编辑文本,新增第一行内容 first content. # 执行git命令-提交到版本库 $ git add test.txt $ git commit -m "first submit" # 第二次编辑文本,新增第二…...