docker-简单说说cgroup
前面我们简单说了下namespace, 现在我们来接着简单说说cgroup。通过docker-简单说说namespace文章我们知道: namespace 是为了隔离进程组之间的资源,那cgroup就是为了对进程组的监控和限制资源。Cgroup 可以限制进程组使用的资源数量和分配(包括CPU、内存、网络带宽、磁盘I/O等),并将它们隔离到一个或多个分层的分组中,以实现对进程、任务或用户组的资源限制。这使得 Cgroup 成为用于容器隔离的关键技术,并可以帮助保护系统免受不安全或恶意代码的破坏
什么是cgroup?
cgroup(control groups)是Linux下的一种将进程按组进行管理的机制,在用户层看来,cgroup技术就是把系统中的所有进程组织成一颗一颗独立的树,每棵树都包含系统的所有进程,树的每个节点是一个进程组,而每颗树又和一个或者多个subsystem关联,树的作用是将进程分组,而subsystem的作用就是对这些组进行操作。
主要功能
它主要提供了如下功能:
- Resource limitation: 限制资源使用,比如内存使用上限以及文件系统的缓存限制。
- Prioritization: 优先级控制,比如:CPU利用和磁盘IO吞吐。
- Accounting: 一些审计或一些统计,主要目的是为了计费。
- Control: 挂起进程,恢复执行进程。
核心概念
1- subsystem
cgroup中的subsystem就是一个资源调度控制器(Resource Controller)。subsystem被关联到一颗cgroup 树上,就会在树上节点做具体操作(用来调度或者限制进程的资源)。比如CPU子系统可以控制CPU时间分配,内存子系统可以限制cgroup内存使用量
2- hierarchy
hierarchy由一系列cgroup以一个树状结构排列而成,树的每个节点就是一个进程组,每个hierarchy通过绑定对应的subsystem进行资源调度。hierarchy中的cgroup节点可以包含零或多个子节点,子节点继承父节点的属性。
3- task
在Cgroup中,task就是系统的一个进程
操作
本文使用环境centos3.10.0 , cgroup v1
如何查看当前系统支持哪些subsystem
[root@linjian ~]# cat /proc/cgroups
#subsys_name hierarchy num_cgroups enabled
cpuset 6 9 1
cpu 5 81 1
cpuacct 5 81 1
memory 8 79 1
devices 11 78 1
freezer 10 9 1
net_cls 3 9 1
blkio 2 78 1
perf_event 7 9 1
hugetlb 4 9 1
pids 9 78 1
net_prio 3 9 1
subsys_name: subsystem的名字
hierarchy: subsystem关联的cgroup树的id,如果多个subsystem关联到同一颗cgroup树,那么他们的hierarchy数据一样。
当以下情况,hierarchy 字段将为0:
- 当前subsystem没有和任何cgroup树绑定
- 当前subsystem已经和cgroup v2的树绑定
- 当前subsystem没有被内核开启
num_cgroups:subsystem关联cgroup树中进程组的个数(树上节点的个数)。
enabled:1:开启,0:关闭
查看cgroup是否开启
[root@linjian ~]# uname -r
3.10.0-1160.24.1.el7.x86_64
[root@linjian ~]# cat /boot/config-3.10.0-1160.24.1.el7.x86_64 | grep CGROUP
CONFIG_CGROUPS=y # y 已经开启了
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_NETPRIO_CGROUP=y
查看cgroup 使用版本
stat -fc %T /sys/fs/cgroup/ 如果v2,输出为 cgroup2fs ;v1 输出 tmpfs
[root@linjian ~]# stat -fc %T /sys/fs/cgroup/
tmpfs
查看当前进程属于哪些cgroup
[root@linjian ~]# cat /proc/$$/cgroup
11:devices:/user.slice
10:freezer:/
9:pids:/user.slice
8:memory:/user.slice
7:perf_event:/
6:cpuset:/
5:cpuacct,cpu:/user.slice
4:hugetlb:/
3:net_prio,net_cls:/
2:blkio:/user.slice
1:name=systemd:/user.slice/user-0.slice/session-1422.scope
冒号隔开
第一个:cgroup树的ID与/proc/cgroups文件中的ID一一对应。
第二个:和cgroup树绑定的所有subsystem(多个subsystem用逗号隔开)。如果name=systemd,表示没有和任何subsystem绑定。
第三个:进程在cgroup树中的路径(挂载点的相对路径),即进程所属的cgroup。
查看目前Linux支持的subsystem(12种)
[root@linjian ~]# ls -lh /sys/fs/cgroup
total 0
drwxr-xr-x 5 root root 0 Dec 26 23:00 blkio
lrwxrwxrwx 1 root root 11 Dec 26 23:00 cpu -> cpu,cpuacct
lrwxrwxrwx 1 root root 11 Dec 26 23:00 cpuacct -> cpu,cpuacct
drwxr-xr-x 8 root root 0 Jan 2 10:01 cpu,cpuacct
drwxr-xr-x 3 root root 0 Dec 26 23:00 cpuset
drwxr-xr-x 5 root root 0 Dec 26 15:02 devices
drwxr-xr-x 3 root root 0 Dec 26 23:00 freezer
drwxr-xr-x 3 root root 0 Dec 26 23:00 hugetlb
drwxr-xr-x 6 root root 0 Jan 2 10:01 memory
lrwxrwxrwx 1 root root 16 Dec 26 23:00 net_cls -> net_cls,net_prio
drwxr-xr-x 3 root root 0 Dec 26 23:00 net_cls,net_prio
lrwxrwxrwx 1 root root 16 Dec 26 23:00 net_prio -> net_cls,net_prio
drwxr-xr-x 3 root root 0 Dec 26 23:00 perf_event
drwxr-xr-x 5 root root 0 Dec 26 23:00 pids
drwxr-xr-x 5 root root 0 Dec 26 23:00 systemd
- cpu :限制cgroup的CPU使用率。
- cpuacct :统计cgroup的CPU的使用率。
- cpuset:绑定cgroup到指定CPUs和NUMA节点。
- memory :统计和限制cgroup的内存的使用率,包括process memory, kernel memory, 和swap。
- devices :限制cgroup创建(mknod)和访问设备的权限。
- freezer :suspend和restore一个cgroup中的所有进程。
- net_cls :将一个cgroup中进程创建的所有网络包加上一个classid标记,用于tc和iptables。 只对发出去的网络包生效,对收到的网络包不起作用。
- blkio :限制cgroup访问块设备的IO速度。
- perf_event :对cgroup进行性能监控
- net_prio :针对每个网络接口设置cgroup的访问优先级。
- hugetlb :限制cgroup的huge pages的使用量。
- pids :限制一个cgroup及其子孙cgroup中的总进程数。
cgroup操作
挂载cgroup
[root@linjian home]# mkdir cgroupTest
[root@linjian home]# cd cgroupTest/
[root@linjian cgroupTest]# ls
[root@linjian cgroupTest]# mkdir demo01
# 创建一颗新的cgroup树,然后挂载到demo01目录
[root@linjian cgroupTest]# mount -t cgroup -o none,name=demo01 demo01 ./demo01
[root@linjian cgroupTest]# cd demo01/
[root@linjian demo01]# ls -lha
total 4.0K
drwxr-xr-x 2 root root 0 Jan 3 20:47 .
drwxr-xr-x 3 root root 4.0K Jan 3 20:44 ..
-rw-r--r-- 1 root root 0 Jan 3 20:47 cgroup.clone_children
--w--w--w- 1 root root 0 Jan 3 20:47 cgroup.event_control
-rw-r--r-- 1 root root 0 Jan 3 20:47 cgroup.procs
-r--r--r-- 1 root root 0 Jan 3 20:47 cgroup.sane_behavior
-rw-r--r-- 1 root root 0 Jan 3 20:47 notify_on_release
-rw-r--r-- 1 root root 0 Jan 3 20:47 release_agent
-rw-r--r-- 1 root root 0 Jan 3 20:47 tasks
[root@linjian demo01]# wc -l cgroup.procs
131 cgroup.procs
创建/删除cgroup
[root@linjian demo01]# mkdir cgroupT01 // 创建子cgroup
[root@linjian demo01]# cd cgroupT01/
[root@linjian cgroupT01]# ls
cgroup.clone_children cgroup.event_control cgroup.procs notify_on_release tasks
[root@linjian cgroupT01]# wc -l cgroup.procs
0 cgroup.procs
[root@linjian cgroupT01]# cd ..
[root@linjian demo01]# rmdir cgroupT01 // 删除
[root@linjian demo01]# ls
cgroup.clone_children cgroup.event_control cgroup.procs cgroup.sane_behavior notify_on_release release_agent tasks
限制进程数
客户端1
[root@linjian ~]# mount|grep pids
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
[root@linjian ~]# cd /sys/fs/cgroup/pids/
[root@linjian pids]# mkdir limitTest
[root@linjian pids]# cd limitTest/
[root@linjian limitTest]# ls
cgroup.clone_children cgroup.event_control cgroup.procs notify_on_release pids.current pids.max tasks
[root@linjian limitTest]# cat pids.max
max
[root@linjian limitTest]# cat pids.current
0
[root@linjian limitTest]# echo 1 > pids.max
[root@linjian limitTest]# echo $$ > cgroup.procs
pids.current: 表示当前cgroup及其所有子孙cgroup中现有的总的进程数量
pids.max: 当前cgroup及其所有子孙cgroup中所允许创建的总的最大进程数量
客户端2
[root@linjian ~]# cd /sys/fs/cgroup/pids/
[root@linjian pids]# mkdir limitTest
[root@linjian pids]# cd limitTest/
[root@linjian limitTest]# ls
cgroup.clone_children cgroup.event_control cgroup.procs notify_on_release pids.current pids.max tasks
[root@linjian limitTest]# cat pids.max
max
[root@linjian limitTest]# cat pids.current
0
客户端1
# 创建新进程失败
[root@linjian limitTest]# ls
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
-bash: fork: retry: No child processes
限制内存使用
[root@linjian ~]# mount|grep memory
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
[root@linjian ~]# cd /sys/fs/cgroup/memory
# 创建子group
[root@linjian memory]# mkdir limitTest
[root@linjian memory]# cd limitTest/
[root@linjian limitTest]# ls
cgroup.clone_children memory.kmem.limit_in_bytes memory.kmem.tcp.usage_in_bytes memory.memsw.max_usage_in_bytes memory.soft_limit_in_bytes tasks
cgroup.event_control memory.kmem.max_usage_in_bytes memory.kmem.usage_in_bytes memory.memsw.usage_in_bytes memory.stat
cgroup.procs memory.kmem.slabinfo memory.limit_in_bytes memory.move_charge_at_immigrate memory.swappiness
memory.failcnt memory.kmem.tcp.failcnt memory.max_usage_in_bytes memory.numa_stat memory.usage_in_bytes
memory.force_empty memory.kmem.tcp.limit_in_bytes memory.memsw.failcnt memory.oom_control memory.use_hierarchy
memory.kmem.failcnt memory.kmem.tcp.max_usage_in_bytes memory.memsw.limit_in_bytes memory.pressure_level notify_on_release
[root@linjian limitTest]#
# 查看使用的情况
[root@linjian limitTest]# cat memory.usage_in_bytes
0
# 查看限定额度
[root@linjian limitTest]# cat memory.limit_in_bytes
9223372036854771712
# 限定64k
[root@linjian limitTest]# echo 64k > memory.limit_in_bytes
限制cpu使用
[root@linjian memory]# mount|grep cpu
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct,cpu)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
[root@linjian memory]# cd /sys/fs/cgroup/cpu,cpuacct
[root@linjian cpu,cpuacct]# mkdir limitTest
[root@linjian cpu,cpuacct]# cd limitTest/
[root@linjian limitTest]# ls
cgroup.clone_children cgroup.procs cpuacct.usage cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_release
cgroup.event_control cpuacct.stat cpuacct.usage_percpu cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat tasks
[root@linjian limitTest]# cat cpu.cfs_quota_us
-1
# 设置只能使用1个cpu的20%的时间
[root@linjian limitTest]# echo 20000 > cpu.cfs_quota_us
[root@linjian limitTest]# cat cpu.cfs_quota_us
20000
[root@linjian limitTest]# echo $$
12649
[root@linjian limitTest]# echo 12649 > cgroup.procs
[root@linjian limitTest]# while :; do echo limitTest > /dev/null; done
客户端2
# 可以看到已经占满了
[root@linjian ~]# top
top - 21:43:19 up 8 days, 6:42, 8 users, load average: 0.01, 0.02, 0.05
Tasks: 135 total, 2 running, 133 sleeping, 0 stopped, 0 zombie
%Cpu(s): 8.0 us, 4.7 sy, 0.0 ni, 86.8 id, 0.0 wa, 0.0 hi, 0.5 si, 0.0 st
KiB Mem : 3880104 total, 112104 free, 1317032 used, 2450968 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 2281320 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12649 root 20 0 115648 2196 1716 R 20.3 0.1 0:07.64 bash
[root@linjian ~]# cat /sys/fs/cgroup/cpu,cpuacct/limitTest/cpu.stat
nr_periods 462 #表示过去了多少个cpu.cfs_period_us里面配置的时间周期
nr_throttled 460 # 在上面的这些周期中,有多少次是受到了限制
throttled_time 36266699145 # cgroup中的进程被限制使用CPU持续了多长时间(纳秒)
cgroup和namespace区别
namespace:为了隔离进程组之间的资源
cgroup:为了对一组进程进行的资源监控和限制。
相关文章:
docker-简单说说cgroup
前面我们简单说了下namespace, 现在我们来接着简单说说cgroup。通过docker-简单说说namespace文章我们知道: namespace 是为了隔离进程组之间的资源,那cgroup就是为了对进程组的监控和限制资源。Cgroup 可以限制进程组使用的资源数量和分配&a…...
印象笔记04: 如何将印象笔记超级会员价值最大化利用?
印象笔记04: 如何将印象笔记超级会员价值最大化利用? 为什么有这个问题 我不知道有没有人一开始接触印象笔记觉得非常好。奈何只能两个设备同步,局限太多。而会员活动比较优惠——就开了会员。而且我开了十年……。只能开发一下看看怎么最大…...
我的JDK动态代理流程
我的JDK动态代理流程 我梳理的动态代理流程大约是: 如果每一个框架都有自己的BPP,且自己的BPP中都有自己的wrapIfNecessory,那样可能就是一个BPP一个代理类。但通常应该都是各自的框架以提供 Advisior(切面)的方式&am…...
uniapp Vue3 面包屑导航 带动态样式
上干货 <template><view class"bei"><view class"container"><view class"indicator"></view><!-- 遍历路由列表 --><view v-for"(item, index) in routes" :key"index" :class&quo…...
openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作
文章目录 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作174.1 事务隔离说明174.2 写入和读写操作174.3 并发写入事务的潜在死锁情况 openGauss学习笔记-174 openGauss 数据库运维-备份与恢复-导入数据-管理并发写入操作 174.1 事务隔离说…...
数据分析可被划分为4个重要的类别
1、描述型:发生了什么? 全面、准确、实时的数据有效的可视化 2、诊断型:为什么会发生? 能够深入了解问题的根本原因隔离所有混淆信息的能力 3、预测型:可能发生什么? 通过历史数据来预测特定的结果通过…...
爆火小游戏敲木鱼流量主小程序源码系统+完整的代码包以及安装搭建教程
随着移动互联网的快速发展,小程序已成为一种新的应用形态,深入到人们生活的方方面面。其中,小游戏由于其简单、有趣的特点,吸引了大量用户,也成为了许多开发者的首选。敲木鱼小游戏,以其独特的玩法和轻松的…...
Invoke和BeginInvoke的区别
Invoke和BeginInvoke的区别 本文导读:BeginInvoke() 调用时,当前线程会启用线程池中的某个线程来执行此方法,当前线程不被阻塞,继续运行后面的代码, Invoke() 调用时,会阻塞当前线程,等到 Invo…...
3 分钟为英语学习神器 Anki 部署一个专属同步服务器
Anki 介绍 Anki 是一款基于间隔重复(Spaced Repetition)原理的学习软件,想象一下,你的大脑就像是一个需要定期维护的精密仪器。间隔重复就好比是一种精准的维护计划,它通过在最佳时刻复习信息,来确保知识在…...
<HarmonyOS第一课>应用程序框架
【习题】应用程序框架 目录 判断题 单选题 多选题 判断题 1. 一个应用只能有一个UIAbility。错误 正确(True)错误(False) 2. 创建的Empty Ability模板工程,初始会生成一个UIAbility文件。正确 正确(True)错误(False) 3. 每调用一次router.pushUrl()方法&…...
SQL 解析 — 如何轻松实现新增语句
KaiwuDB 支持多种不同类型的 SQL 语句,例如 create、insert 等。本文将介绍在 KaiwuDB SQL Parser(下文统称解析器)中添加新语句的过程及其实现。我们将了解如何使用 goyacc 工具更新解析器,以及执行器和查询计划器(pl…...
Android集成OpenSSL实现加解密-集成
导入so 将编译生成的 OpenSSL 动态库文件(.so 文件)复制到你的 Android 项目的 libs 目录中 导入头文件 将编译生成的include文件夹导入到项目中 build.gradle添加配置 defaultConfig {……testInstrumentationRunner "androidx.test.runner…...
代码随想录算法训练营Day18|513.找树左下角的值、112. 路径总和、113. 路径总和ii、106.从中序与后序遍历序列构造二叉树
目录 513.找树左下角的值 前言 层序遍历 递归法 112. 路径总和 前言 递归法 113. 路径总和ii 前言 递归法 106.从中序与后序遍历序列构造二叉树 前言 思路 递归法 总结 513.找树左下角的值 题目链接 文章链接 前言 本题要求得到二叉树最后一行最左边的值…...
【蓝桥备赛】技能升级——二分查找
题目链接 技能升级 个人思路 需要给n个技能添加技能点,无论技能点加成如何衰减,每次始终都是选择当前技能加点加成最高的那一项技能,所以最后一次的加点一定也是加在当时技能攻击加成最高的那个。此时,我们去寻找最后一次的加点…...
zyqn-arm软中断设置
所有SGI都是边缘触发的,sgi的灵敏度类型是固定的,不能改变。 软中断初始化流程 1、初始化异常处理 2、初始化中断控制器 3、注册异常处理回调函数到CPU 4、连接软中断信号与注册软中断回调函数 5、使能中断控制器中的软中断中断 6、使能异常处理 …...
k8s---pod基础下
k8s的pod与docker重启策略的区别 k8s的重启策略 always deployment的yaml文件只能是always,pod的yaml三种模式都可以。不论正常退出还是非正常退出都重启。OnFailure:正常退出不重启,非正常退出会重启Never:正常退出和非正常退出…...
玩转朋友圈!这样运营朋友圈吸睛又吸金!
朋友圈已成为现代社交媒体中不可或缺的平台,并且有很大的潜力用于营销和推广。那么如何才能让朋友圈在众多用户中脱颖而出,吸引眼球并提升商业效益呢?主要从以下几点出发: 首先,要想吸引关注,您需要在朋友…...
react学习
目录 一、react基础 5.loadsh使用排序8.ref获取DOM对象10.props使用*13.UseEffect 二、 react使用redux三、美团外卖项目完成页面制作使用redux渲染页面使用react-router-dom评价 一、react基础 jsx 大括号的作用 {count} {userLlist.map((item)>{return <li key{item…...
vue-cli项目中vue.config.js的配置
vue-cli项目中vue.config.js的配置 一、直接上代码 一、直接上代码 let path require(path) let glob require(glob)function resolve(dir) {return path.join(__dirname, src/${dir}) }module.exports {pages: {index: {// page 的入口entry: src/main.js,// 模板来源temp…...
Github 2024-01-04 开源项目日报 Top10
根据Github Trendings的统计,今日(2024-01-04统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3C项目2TypeScript项目2Java项目2Jupyter Notebook项目1Go项目1 系统设计指南 创建周期ÿ…...
使用GPTs+Actions自动获取第三方数据
目录 安装插件与GPT对话联网插件首先,创建GPTs。 Voxscript 官网:https://voxscript.awt.icu/index.htmlOpenAI Schema:https://voxscript.awt.icu/swagger/v1/swagger.yamlServer URL: servers: url: https://voxscript.awt.icu安装插件 要使用这个插件&...
git提交操作(不包含初始化仓库)
1.进入到本地的git仓库 查看状态 git status 如果你之前有没有成功的提交,直接看第5步。 2.追踪文件 git add . 不要提交大于100M的文件,如果有,看第5步 3.提交评论 git commit -m "你想添加的评论" 4.push (push之前可以再…...
使用YOLOv8和Grad-CAM技术生成图像热图
目录 yolov8导航 YOLOv8(附带各种任务详细说明链接) 概述 环境准备 代码解读 导入库 定义letterbox函数 调整尺寸和比例 计算填充 应用填充 yolov8_heatmap类定义和初始化 后处理函数 绘制检测结果 类的调用函数 热图生成细节 参数解释 we…...
Vue: 多个el-select不能重复选择相同属性
一、场景 1.需求: 用户可自由选择需要修改的对象并同时修改多个属性,需要校验修改对象不能重复选择,但是可供修改属性是固定的 2.目标效果: 二、实现 1.主要代码: <template><el-selectv-model"se…...
金色麦芒的2023
2023年即将过去,回首这一年,我深感自己在技术和职业生涯中取得了巨大的进步。这一年里,我不仅在技术层面有了更深入的掌握,也在个人成长和职业规划上有了更明确的方向。 首先,在技术层面,我今年最大的收获是…...
java设计模式学习之【策略模式】
文章目录 引言策略模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用计算示例代码地址 引言 设想你正在玩一个策略游戏,每一个决策都会导致不同的游戏结局。同样地,在软件开发中,我们常常需要根据不同的场景或条件选择不同…...
Mybatis SQL构建器类 - SqlBuilder and SelectBuilder (已经废弃)
在3.2版本之前,我们采用了一种略有不同的方法,通过利用ThreadLocal变量来掩盖一些使Java DSL有点繁琐的语言限制。然而,这种方法现在已被弃用,因为现代框架已经普及了使用构建器模式和匿名内部类的概念。因此,SelectBu…...
【Linux】不常用命令记录
查看开启的网络端口 1、使用netstat命令“netstat -tuln”,该命令将显示所有当前监听的TCP和UDP端口; 2、使用ss命令“ss -tuln”,用于显示当前监听的TCP和UDP端口; 3、使用lsof命令“lsof -i”,将显示当前打开的网络…...
【docker】安装docker环境并启动容器
一、安装docker 这里以centos系统为例安装docker环境 # 删除已有安装包 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-enginesudo yum install -y yum-utils # 设置源 y…...
AIOps探索 | 基于大模型构建高效的运维知识及智能问答平台(2)案例分享
原作者:擎创科技产品专家 布博士 案例分享 所需要的软件列表 本次案例的实现,全部采用开源或SAAS的产品来提供,并不涉及到私有化部署的软件产品。软件列表如下所示,如何申请apikey请自行研究,在这里不再详细说明&…...
免费的网站推广 外贸/网络优化的三个方法
php Undefined index和Undefined variable的解决方法$act$_POST[act];用以上代码总是提示Notice: Undefined index: act in F:\windsflybook\post.php on line 18另外,有时还会出现引用内容Notice: Undefined variable: Submit ......等一些这样的提示原因ÿ…...
青岛标志设计公司/优化师是干嘛的
XSS XSS全称跨站脚本攻击(Cross Site Scripting),顾名思义,就是通过向某网站写入js脚本来实现攻击。如果熟悉或了解SQL注入的话,这么一说大概就十分清楚了。 如果是刚接触web开发的同学,可能乍想不明白,自己的网站&…...
个人网站建设方案书模板/营销技巧有哪些
如果你忘记了mysql密码几乎是没有什么好办法可以直接修改密码了,但我们可以在my.ini把加上skip-grant-tables,然后重启mysql就不需要密码了,这时我们再修改root密码,最后再把skip-grant-tables删除重启即可。 首先,很…...
深圳建网站兴田德润优秀/北京推广
Adobe Photoshop是目前最流行的平面设计软件之一。可以说,只要你接触平面设计,那么无论早晚,你都要和它打交道。关于Photoshop,要说的实在太多太多,但不论你想让它成为你的左膀右臂,或者仅仅是用它来做一些…...
网站做好了怎么做后台/独立站
最近在整理之前工作的文件,发现大概有50个小时的专家call & 会议录音啥的,于是就研究了一下如何批量把长语音转成格式优美的文字文档。 当然做事情之前先来知乎搜了搜有没有现成的解决方案可用,于是发现了这个问题,但一楼说的…...
威海网站开发制作/上海网站建设方案
快速排序是一种分治的排序算法,其主要思想是通过选择一个基准数,将数组划分成两个子序列,左边的数都比基准数小,右边的数都比基准数大,然后对这两个子序列分别进行快速排序,以此达到最终排序的目的。 在Jav…...