探究如何在Linux系统中修改进程资源限制:四种方法调整进程限制,让你的系统高效运行(包含应用层getrlimit和setrlimit API)
探究如何在Linux系统中修改进程资源限制
- 1.进程资源限制的概念
- 2.修改进程资源限制的意义与应用场景
- 1.软限制与硬限制
- 2.常见资源限制类型
- Linux中的资源限制
- 1.ulimit命令
- a. 语法及选项
- b. 示例与应用
- 2./etc/security/limits.conf配置文件
- a. 配置文件结构
- b.示例与应用
- 3. 使用cgroups(控制组)
- a. cgroups简介
- b. 设置cgroups资源限制
- c. 示例与应用
- 4. 应用层使用getrlimit和setrlimit API
- 功能描述
- 函数原型
- 参数:
- 返回说明
- 示例
- 四、实战篇:优化系统资源管理
- 识别资源瓶颈
- 调整不同进程的资源限制
- 监控资源使用情况
- 避免资源耗尽
- 五、注意事项
摘要:本文将详细介绍如何在Linux系统中修改进程资源限制,帮助您掌握一些关键技术,从而更好地管理和优化系统资源。文章内容将涵盖基本概念、方法和实践示例。
一、简介
1.进程资源限制的概念
在Linux系统中,进程资源限制是一种管理策略,用于控制进程使用系统资源的上限。这种机制可以防止某个进程占用过多资源,从而影响其他进程的正常运行。进程资源限制包括CPU时间、内存、打开文件数等多种资源类型。
2.修改进程资源限制的意义与应用场景
修改进程资源限制具有以下几个意义:
a. 系统资源管理:通过对进程资源的限制,管理员可以更好地对系统资源进行分配与管理,确保关键进程获得足够的资源,防止低优先级进程占用过多资源。
b. 提高系统稳定性:限制进程资源能有效避免资源耗尽,从而防止系统崩溃。
c. 提高应用性能:合理分配资源,避免资源竞争,可以在一定程度上提高应用的性能。
常见的应用场景有:
- 多用户环境中限制单个用户占用资源
- 服务器上限制不同服务的资源使用,以避免某个服务耗尽系统资源
- 开发环境中限制开发人员的测试程序对系统资源的使用
Linux中的资源限制
1.软限制与硬限制
在Linux系统中,进程资源限制分为软限制(soft limit)和硬限制(hard limit)两种。
- 软限制:这是进程实际受到的资源限制。当进程试图超过这个限制时,系统通常会产生一个警告,但不会强制终止进程。软限制可以在需要时被提高,但不能超过硬限制。
- 硬限制:这是进程资源限制的最大值,一旦达到这个限制,进程将无法继续申请更多资源。硬限制只能由具有特权的用户(如root用户)修改。
2.常见资源限制类型
以下是Linux系统中常见的进程资源限制类型:
- CPU时间(cpu time):进程可以使用的CPU时间的最大值。
- 内存使用(memory usage):进程可以使用的最大内存量。
- 打开文件数(open files):进程可以同时打开的文件数量上限。
- 并发线程数(threads):进程可以创建的最大线程数。
- 进程数(processes):用户可以创建的最大进程数。
- 栈大小(stack size):进程栈的最大大小。
- 数据段大小(data segment size):进程数据段的最大大小。
- 锁定内存大小(locked memory):进程可以锁定的内存大小。
这些限制可以单独或组合使用,以实现更精细的资源管理。在接下来的部分,我们将介绍如何在Linux中修改这些进程资源限制。
Linux中的资源限制
1.ulimit命令
a. 语法及选项
ulimit命令是一个常用的shell内置命令,用于查看和设置进程资源限制。ulimit的基本语法如下:
ulimit [-HS] [-a] [-t] [-f] [-d] [-s] [-c] [-m] [-l] [-p] [-n] [limit]
常用选项说明:
-H:设置或显示硬限制。
-S:设置或显示软限制。
-a:显示所有资源限制。
-t:设置或显示CPU时间限制。
-f:设置或显示文件大小限制。
-d:设置或显示数据段大小限制。
-s:设置或显示栈大小限制。
-c:设置或显示核心文件大小限制。
-m:设置或显示内存使用限制。
-l:设置或显示锁定内存大小限制。
-p:设置或显示进程数限制。
-n:设置或显示打开文件数限制。b. 示例与应用
查看当前进程的所有资源限制:
ulimit -a
设置当前进程的打开文件数限制为2048(软限制):
ulimit -Sn 2048
设置当前进程的CPU时间限制为3600秒(硬限制):
ulimit -Ht 3600
/etc/security/limits.conf配置文件
2./etc/security/limits.conf配置文件
a. 配置文件结构
/etc/security/limits.conf是一个全局配置文件,用于设置系统范围内的用户和用户组资源限制。配置文件的每一行表示一个限制规则,包含四个字段:用户或用户组名、限制类型(硬限制或软限制)、资源类型和限制值。
b.示例与应用
为用户alice设置最大打开文件数限制(硬限制为4096,软限制为2048):
alice hard nofile 4096 alice soft nofile 2048
为用户组developers设置最大进程数限制(硬限制为1024,软限制为512):
@developers hard nproc 1024 @developers soft nproc 512
3. 使用cgroups(控制组)
a. cgroups简介
cgroups(Control Groups)是Linux内核中的一项功能,用于对进程进行分组管理和限制。cgroups可以实现对CPU、内存、磁盘I/O等资源的细粒度控制,提供更强大的资源管理能力。
cgroups通过文件系统(通常挂载在/sys/fs/cgroup目录下)的方式对资源限制进行配置,支持动态调整和实时监控。此外,cgroups还支持多层次的进程组织结构,可以根据不同的应用场景设定不同级别的资源限制。b. 设置cgroups资源限制
要使用cgroups设置资源限制,请按照以下步骤操作:
检查系统是否支持cgroups:运行lssubsys -a命令,查看系统支持的cgroup子系统。
创建cgroup:创建一个新的cgroup,以便将进程添加到该组并限制其资源。例如,创建一个名为my_cgroup的cgroup,可以在/sys/fs/cgroup/cpu目录下创建一个名为my_cgroup的子目录。c. 示例与应用
控制组(cgroups)是一种Linux内核功能,可以限制、记录和隔离进程的资源使用。管理员可以使用cgroups来管理进程的CPU、内存、磁盘和网络等资源,从而提高系统性能和安全性。下面是一个使用cgroups修改进程资源的示例:
创建控制组
首先,我们需要创建一个控制组,用于管理要限制的进程。可以使用以下命令来创建一个名为mygroup的控制组:
sudo cgcreate -g cpu,memory:/mygroup
这将创建一个包含CPU和内存子系统的控制组/mygroup。
添加进程到控制组
接下来,我们需要将要限制的进程添加到控制组中。可以使用以下命令将pid为1234的进程添加到mygroup控制组中:
sudo cgclassify -g cpu,memory:/mygroup 1234
这将将进程1234添加到/mygroup控制组中。
限制资源使用
现在,我们可以使用cgroups来限制进程的资源使用。例如,可以使用以下命令将mygroup控制组中的进程的CPU使用率限制为50%!:(MISSING)
sudo cgset -r cpu.cfs_quota_us=50000 mygroup
这将限制mygroup控制组中的进程使用50%!的(MISSING)CPU时间。类似地,我们可以使用其他选项来限制内存、磁盘和网络资源的使用。
监控资源使用
最后,我们可以使用cgroups来监控进程的资源使用。例如,可以使用以下命令查看mygroup控制组中进程的CPU使用情况:
sudo cgget -r cpuacct.usage mygroup
这将显示mygroup控制组中所有进程的CPU使用时间。
总之,cgroups是Linux系统中一个非常有用的功能,可以用于限制、记录和隔离进程的资源使用。管理员可以使用cgroups来管理进程的CPU、内存、磁盘和网络等资源,从而提高系统性能和安全性。使用cgroups可以灵活地控制进程的资源使用和监控,从而更好地管理系统和进程。
4. 应用层使用getrlimit和setrlimit API
功能描述
获取或设定资源使用限制。每种资源都有相关的软硬限制,软限制是内核强加给相应资源的限制值,硬限制是软限制的最大值。非授权调用进程只可以将其软限制指定为0~硬限制范围中的某个值,同时能不可逆转地降低其硬限制。授权进程可以任意改变其软硬限制。RLIM_INFINITY的值表示不对资源限制。
函数原型
#include <sys/resource.h>int getrlimit(int resource, struct rlimit \*rlim);int setrlimit(int resource, const struct rlimit \*rlim);
参数:
resource:可能的选择有以下几种
RLIMIT_AS //进程的最大虚内存空间,字节为单位。
RLIMIT_CORE //内核转存文件的最大长度。
RLIMIT_CPU //最大允许的CPU使用时间,秒为单位。当进程达到软限制,内核将给其发送SIGXCPU信号,这一信号的默认行为是终止进程的执行。然而,可以捕捉信号,处理句柄可将控制返回给主程序。如果进程继续耗费CPU时间,核心会以每秒一次的频率给其发送SIGXCPU信号,直到达到硬限制,那时将给进程发送 SIGKILL信号终止其执行。
RLIMIT_DATA //进程数据段的最大值。
RLIMIT_FSIZE //进程可建立的文件的最大长度。如果进程试图超出这一限制时,核心会给其发送SIGXFSZ信号,默认情况下将终止进程的执行。
RLIMIT_LOCKS //进程可建立的锁和租赁的最大值。
RLIMIT_MEMLOCK //进程可锁定在内存中的最大数据量,字节为单位。
RLIMIT_MSGQUEUE //进程可为POSIX消息队列分配的最大字节数。
RLIMIT_NICE //进程可通过setpriority() 或 nice()调用设置的最大完美值。
RLIMIT_NOFILE //指定比进程可打开的最大文件描述词大一的值,超出此值,将会产生EMFILE错误。
RLIMIT_NPROC //用户可拥有的最大进程数。
RLIMIT_RTPRIO //进程可通过sched_setscheduler 和 sched_setparam设置的最大实时优先级。
RLIMIT_SIGPENDING //用户可拥有的最大挂起信号数。
RLIMIT_STACK //最大的进程堆栈,以字节为单位。
rlim:描述资源软硬限制的结构体,原型如下
struct rlimit {rlim\_t rlim\_cur; //soft limitrlim\_t rlim\_max; //hard limit};
soft limit是指内核所能支持的资源上限。比如对于RLIMIT_NOFILE(一个进程能打开的最大文件数,内核默认是1024),soft limit最大也只能达到1024。对于RLIMIT_CORE(core文件的大小,内核不做限制),soft limit最大能是unlimited。
hard limit在资源中只是作为soft limit的上限。当你设置hard limit后,你以后设置的soft limit只能小于hard limit。要说明的是,hard limit只针对非特权进程,也就是进程的有效用户ID(effective user ID)不是0的进程。具有特权级别的进程(具有属性CAP_SYS_RESOURCE),soft limit则只有内核上限。
返回说明
成功执行时,返回0。
失败返回-1,errno被设为以下的某个值
EFAULT
:rlim指针指向的空间不可访问
EINVAL
:参数无效
EPERM
:增加资源限制值时,权能不允许示例
当我们需要在Linux系统中修改进程资源限制时,可以使用getrlimit和setrlimit API来设置资源限制。下面是一个使用getrlimit和setrlimit API修改系统资源的示例:
#include <sys/resource.h> #include <iostream> #include <cstring>int main() {const rlim_t kStackSize = 64 * 1024 * 1024; // 64MBstruct rlimit rl;int result;// 获取当前的资源限制result = getrlimit(RLIMIT_STACK, &rl);if (result == -1) {std::cerr << "Failed to get resource limit\n";return 1;}// 修改资源限制if (rl.rlim_cur < kStackSize) {rl.rlim_cur = kStackSize;result = setrlimit(RLIMIT_STACK, &rl);if (result == -1) {std::cerr << "Failed to set resource limit\n";return 1;}}// 执行需要大内存栈的代码char largeStack[kStackSize];std::memset(largeStack, 0, kStackSize);return 0; }
在这个示例中,我们将栈大小的资源限制设置为64MB(kStackSize),然后使用getrlimit和setrlimit API来修改这个资源限制。首先,我们使用getrlimit函数来获取当前栈大小的资源限制。然后,我们检查当前资源限制是否小于我们需要的资源大小。如果当前资源限制小于我们需要的资源大小,我们使用setrlimit函数来修改栈大小的资源限制。
最后,在我们需要大内存栈的代码块中,我们分配了64MB的内存。
总之,使用getrlimit和setrlimit API来修改系统资源是Linux C++编程中的一个重要技能,可以帮助我们优化系统资源使用。在使用这些API时,我们需要了解当前的资源限制,修改需要的资源限制,并在修改后检查资源限制是否生效。
四、实战篇:优化系统资源管理
在Linux系统中,管理员可以使用控制组(cgroups)和其他工具来优化系统资源管理,从而提高系统性能和可靠性。以下是一些实战篇的建议:
识别资源瓶颈
首先,管理员需要了解系统中存在的资源瓶颈,例如CPU、内存、磁盘和网络等。可以使用一些工具,如top、htop、iostat和vmstat等,来了解系统资源的使用情况。管理员可以在这些工具中查看CPU、内存、磁盘和网络等方面的数据,以确定系统资源瓶颈所在。
调整不同进程的资源限制
管理员可以使用cgroups来调整不同进程的资源限制,以确保系统资源的平衡使用。例如,可以将CPU和内存等资源分配给不同的进程,以避免某个进程占用过多的资源,导致其他进程受到影响。可以使用一些工具,如cgcreate、cgclassify和cgset等,来创建控制组、添加进程和设置资源限制。
监控资源使用情况
管理员需要定期监控系统资源使用情况,以确保资源使用保持平衡。可以使用一些工具,如cgget、top、htop、iostat和vmstat等,来监控系统资源的使用情况。管理员可以在这些工具中查看CPU、内存、磁盘和网络等方面的数据,以确保资源使用情况正常。
避免资源耗尽
最后,管理员需要避免系统资源耗尽,以确保系统的可靠性和稳定性。可以使用一些策略,如动态资源分配、资源预留和资源回收等,来避免资源耗尽。例如,可以根据系统负载情况动态分配资源,预留资源给关键进程,以及回收不需要的资源等。
总之,优化系统资源管理是Linux系统管理中一个非常重要的任务。管理员可以使用控制组和其他工具来调整进程的资源限制,监控资源使用情况,避免资源耗尽等,以确保系统资源使用平衡和系统的可靠性。
五、注意事项
在Linux系统中修改进程资源限制时,需要注意以下几个方面:
确认当前的资源限制
在修改进程资源限制之前,需要确认当前的资源限制。可以使用命令ulimit -a来查看当前的资源限制。
确认修改的范围
在修改进程资源限制之前,需要确认修改的范围。可以使用命令ulimit -a -H和ulimit -a -S来查看硬限制和软限制,以便确认修改的范围。
确认修改的值
在修改进程资源限制之前,需要确认修改的值。可以使用cgroups和其他工具,如getrlimit和setrlimit API,来设置资源限制。
确认修改的持久性
在修改进程资源限制之后,需要确认修改的持久性。可以使用/etc/security/limits.conf配置文件来设置永久性的资源限制。
确认修改的影响
在修改进程资源限制之后,需要确认修改的影响。可以使用一些工具,如top、htop、iostat和vmstat等,来监控系统资源的使用情况,以确保资源使用情况正常。
总之,在Linux系统中修改进程资源限制时,需要确认当前的资源限制、修改的范围、修改的值、修改的持久性和修改的影响。可以使用多种工具来修改进程资源限制,如ulimit命令、/etc/security/limits.conf配置文件、cgroups和getrlimit和setrlimit API等。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
探究如何在Linux系统中修改进程资源限制:四种方法调整进程限制,让你的系统高效运行(包含应用层getrlimit和setrlimit API)
探究如何在Linux系统中修改进程资源限制1.进程资源限制的概念2.修改进程资源限制的意义与应用场景1.软限制与硬限制2.常见资源限制类型Linux中的资源限制1.ulimit命令a. 语法及选项b. 示例与应用2./etc/security/limits.conf配置文件a. 配置文件结构b.示例与应用3. 使用cgroups…...
![](https://img-blog.csdnimg.cn/4a70e874f4704d1abb7ea34bb7c22916.png)
9.5. 机器翻译与数据集
笔记 9.5. 机器翻译与数据集 — 动手学深度学习 2.0.0 documentation 1.下载文件 读文件 2.处理数据 在所有标点符号前面加空格 后面用于分割 因为法语英语可能有半角全角的字符区分用utf编码的方式统一成半角字符的空格 3.因为分隔用的是空格split 所有vocab是没有空格的 …...
![](https://img-blog.csdnimg.cn/img_convert/f28c52a40c66f11b35126739566bca58.jpeg)
跟着凯新生物2 Arm PEG Biotin,2-Branched PEG Biotin,生物素-聚乙二醇-二臂/支,学试剂知识
中英文名:2 Arm/Branched PEG Biotin,2 ArmPEG Biotin,二臂/支 PEG 生物素一、Product specifications: 1.CAS No:N/A 2.Packaging specification:10mg,25mg,50mg, flexible packagi…...
![](https://img-blog.csdnimg.cn/bf7ec763a130472096d37de6a92a6732.png)
react组件进阶(四)
文章目录1. 组件通讯介绍2. 组件的 props3. 组件通讯的三种方式3.1 父组件传递数据给子组件3.2 子组件传递数据给父组件3.3 兄弟组件4. Context5. props 深入5.1 children 属性5.2 props 校验5.3 props 的默认值6. 组件的生命周期6.1 组件的生命周期概述6.2 生命周期的三个阶段…...
![](https://img-blog.csdnimg.cn/img_convert/d9847aa9f47a456d5f8a6643cae112d9.jpeg)
阿维塔城区NCA智驾导航辅助,复杂路口,全面胜任
阿维塔11城区NCA智驾导航辅助将于3月在上海、深圳等城市分阶段开启体验,以看得清、判得准、控得稳的“智驾”,进一步巩固业界智能天花板的地位。智能驾驶里程碑,拨杆两下开启都市安适旅程作为AVATRANS智能领航系统的重要组成部分,…...
![](https://img-blog.csdnimg.cn/ab8f0f65939049ddbfcdaaf14bd8ae26.png)
[Pandas] div()函数
div()方法将DataFrame中的每个值除以指定的值,并返回一个计算处理后的Dataframe结果 DataFrame.div()函数其实是除法运算,表格中的每个数据都是被除数 导入数据 import pandas as pd df pd.DataFrame({"col1":[5, 3, None, 4], "col2…...
![](https://www.ngui.cc/images/no-images.jpg)
c++并发与多线程
c并发与多线程 子线程结束,主线程不能结束,否则会出错,和java不一样。 可以用join的方式让主线程等待子线程执行结束。 quickStart 线程相关头文件 #include <thread> 使用全局函数构造一个线程对象 #include <iostream> #…...
![](https://img-blog.csdnimg.cn/a90effcf11da4be4bd1d4c21deb5e42c.jpeg)
Vinylsulfone PEG Biotin,Biotin-PEG-VS,生物素聚乙二醇乙烯砜,VS基团容易与游离巯基发生反应
●中文名:乙烯砜PEG生物素,生物素聚乙二醇乙烯砜 ●英文名:Vinylsulfone PEG Biotin, VS-PEG-Biotin,Vinyl sulfone-PEG-Biotin,Biotins-PEG-sulfone Vinyl●产品理化指标: CAS号:N/A 分子量&am…...
![](https://img-blog.csdnimg.cn/d2d7272c83e1412cac95c3f8be0aca16.png)
论文学习——Tune-A-Video
Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation Abstract 本文提出了一种方法,站在巨人的肩膀上——在大规模图像数据集上pretrain并表现良好的 text to image 生成模型——加入新结构并进行微调,训练出一套 …...
![](https://img-blog.csdnimg.cn/f87b822287a7493fa7630d597745fcfe.png)
C++类与对象part1
目录 1.类的6个默认函数 2.构造函数(相当于init) 3.析构函数 (相当于destroy) 4.拷贝构造函数 赋值运算符重载 运算符重载 赋值运算符重载 引入: 你知道为什么cout可以自动识别类型吗? 其实cout是一…...
![](https://www.ngui.cc/images/no-images.jpg)
记一次抓取网页内容
已打码 // UserScript // name --------- // namespace http://tampermonkey.net/ // version 0.1 // description https://---------oups/{id}/topics?scopeall&count20&begin_time2022-09-01T00%3A00%3A00.000%2B0800&end_time2022-10-01T00%…...
![](https://img-blog.csdnimg.cn/img_convert/17654c2a7bbe24f235c038b6bc6c7755.png)
parasoft帮助史密斯医疗通过测试驱动开发提供安全、高质量的医疗设备
parasoft是一家专门提供软件测试解决方案的公司,Parasoft通过其经过市场验证的自动化软件测试工具集成套件,帮助企业持续交付高质量的软件。Parasoft的技术支持嵌入式、企业和物联网市场,通过将静态代码分析和单元测试、Web UI和API测试等所有…...
![](https://img-blog.csdnimg.cn/d6cbceb9cf564574bd0cad74cb047398.png)
SpringBoot整合Oauth2开放平台接口授权案例
<!-- SpringBoot整合Web组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId>&l…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux_创建用户
创建一个名为hello的用户,并指定/home/hello为根目录useradd -d /home/hello -m hello 设置密码 ,密码会输入两次,一次设置密码,一次确认密码,两次密码要输入的一样passwd hellouseradd的常用参数含义-d指定用户登入时的主目录&am…...
![](https://img-blog.csdnimg.cn/f25dec5be4e549f3b71b71626e2b2c1d.png)
RDD(弹性分布式数据集)总结
文章目录一、设计背景二、RDD概念三、RDD特性四、RDD之间的依赖关系五、阶段的划分六、RDD运行过程七、RDD的实现一、设计背景 1.某些应用场景中,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。如:迭代式算法…...
![](https://img-blog.csdnimg.cn/img_convert/c80dfe51f82e7901659629f3c6738331.png)
服务器版RstudioServer安装与配置详细教程
Docker部署Rstudio server 背景:如果您想在服务器上运行RstudioServer,可以按照如下方法进行操作,笔者测试时使用腾讯云服务器(系统centos7),需要在管理员权限下运行 Rstudio 官方提供了使用不同 R 版本的 …...
![](https://www.ngui.cc/images/no-images.jpg)
如何在Java中将一个列表拆分为多个较小的列表
在Java中,有多种方法可以将一个列表拆分为多个较小的列表。在本文中,我们将介绍三种不同的方法来实现这一目标。 方法一:使用List.subList()方法 List接口提供了一个subList()方法,它可以用来获取列表中的一部分元素。我们可以使…...
![](https://img-blog.csdnimg.cn/12d3c32a656342909bf75cbb47ae0d8c.png)
TryHackMe-Inferno(boot2root)
Inferno 现实生活中的机器CTF。该机器被设计为现实生活(也许不是?),非常适合刚开始渗透测试的新手 “在我们人生旅程的中途,我发现自己身处一片黑暗的森林中,因为直截了当的道路已经迷失了。我啊…...
![](https://www.ngui.cc/images/no-images.jpg)
微信原生开发中 JSON配置文件的作用 小程序中有几种JSON配制文件
关于json json是一种数据格式,在实际开发中,JSON总是以配制文件的形式出现,小程序与不例外,可对项目进行不同级别的配制。Q:小程序中有几种配制文件A:小程序中有四种配制文件分别是:project.config.json si…...
![](https://www.ngui.cc/images/no-images.jpg)
【python】为什么使用python Django开发网站这么火?
关注“测试开发自动化” 弓中皓,获取更多学习内容) Django 是一个基于 Python 的 Web 开发框架,它提供了许多工具和功能,使开发者可以更快地构建 Web 应用程序。以下是 Django 开发中的一些重要知识点: MTV 模式&#…...
![](https://img-blog.csdnimg.cn/3b8eac671492422a956eba00f1006f91.png)
Java设计模式(五)—— 责任链模式
责任链模式定义如下:使多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。 适合使用责任链模式的情景如下: 有许多对…...
![](https://www.ngui.cc/images/no-images.jpg)
VMLogin:虚拟浏览器提供的那些亮眼的功能
像VMLogin这样的虚拟浏览器具有多种功能,如安全的浏览环境、可定制的设置、跨平台的兼容性、更快的浏览速度、广告拦截等等。 虚拟浏览器的不同功能可以为您做什么? 使用虚拟浏览器是浏览互联网和完成其他任务的安全方式,没有风险。您可以在…...
![](https://www.ngui.cc/images/no-images.jpg)
第一个错误的版本
题目 你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。 假设你有 n 个版本 [1, 2, …, n],你想找出…...
![](https://img-blog.csdnimg.cn/623115940ca04093afd6b959a57fcadd.png)
2023爱分析·AIGC市场厂商评估报告:拓尔思
AIGC市场定义 市场定义: AIGC,指利用自然语言处理技术(NLP)、深度神经网络技术(DNN)等人工智能技术,基于与人类交互所确定的主题,由AI算法模型完全自主、自动生成内容,…...
![](https://www.ngui.cc/images/no-images.jpg)
MobTech|场景唤醒的实现
什么是场景唤醒? 场景唤醒是moblink的一项核心功能,可以实现从打开的Web页面,一键唤醒App,并恢复对应的场景。 场景是指用户在App内的某个特定页面或状态,比如商品详情页、活动页、个人主页等。每个场景都有一个唯一…...
![](https://img-blog.csdnimg.cn/5eda415957624e09a51921216ee7bd47.jpeg)
不在路由器上做端口映射,如何访问局域网内网站
假设现在外网有一台ADSL直接拨号上网的电脑,所获得的是公网IP。然后它想访问局域网内的电脑上面的网站,那么就需要在路由器上做端口映射。在路由器上做端口映射的具体规则是:将所有发向自己端口的数据,都转发到内网的计算机。 访…...
![](https://img-blog.csdnimg.cn/img_convert/8ca91fed20fffd0a9ce41456b803c1ef.png)
ChatGPT 辅助科研写作
前言 总结一些在科研写作中 ChatGPT 的功能,以助力提升科研写作的效率。 文章目录前言一、ChatGPT 简介1. ChatGPT 普通版与 Plus 版的区别1)普通账号2)Plus账号二、New Bing 简介1. 快速通过申请三、辅助学术写作1. 改写论文表述2. 语言润色…...
![](https://img-blog.csdnimg.cn/img_convert/1bd45ed34baf757d07012e09a5d40142.png)
MySQL最大建议行数 2000w,靠谱吗?
本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点,欢迎star~ Github地址 1 背景 作为在后端圈开车的多年…...
![](https://img-blog.csdnimg.cn/80840d0c54704fcd951104a452692bee.png)
【Tomcat 学习】
Tomcat 学习 笔记记录一、Tomcat1. Tomcat目录2. Tomcat启动3. Tomcat部署项目4. 解决Tomcat启动乱码问题5. JavaWeb项目创建部署6. 打war包发布项目7. Tomcat配置文件8. Tomcat配置虚拟目录(不用在webapps目录下)9. Tomcat配置虚拟主机10. 修改web项目默认加载资源路径一、Tom…...
![](https://img-blog.csdnimg.cn/img_convert/c2e49115ba7224f14f12d04e86e7c71f.png)
重装系统如何做到三步装机
小白三步版在给电脑重装系统的过程中,它会提供系统备份、还原和重装等多种功能。下面也将介绍小白三步版的主要功能,以及使用技巧和注意事项。 主要功能 系统备份和还原:小白三步版可以帮助用户备份系统和数据,以防止重要数据丢失…...
![](https://img-blog.csdnimg.cn/20181105212743555.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2l0Y2F0c19jbg==,size_16,color_FFFFFF,t_70)
万网主机建设网站流程/攀枝花seo
问题: 1、如何仅用队列结构实现栈结构? 2、如何仅用栈结构实现队列结构? 实现思路: 1、使用两个队列结构Queue1和Queue2 ,push操作一样,添加push()到Queue1,pop()核心是把 Queue1 除最后添加的元素"剪切"…...
![](/images/no-images.jpg)
wordpress js上传图片/seo公司多少钱
我们建立一个工程后,会在Supporting files下面看到一个"工程名-Info.plist"的文件,这个是对工程做一些运行期配置的文件,很重要,不能删除。 下面就对其key值和其对应的value值进行解读: Localiztion native development…...
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
个人引擎网站什么做/北京百度快速优化排名
题目链接:http://codeforces.com/problemset/problem/1166/E 说明 LCM(一个集合) 为这个集合中所有元素的最小公倍数。如果$A \subseteq B,LCM(A) \leq LCM(B)$。 题目大意 给定由 n 个整数组成的集合 A 。现给定 m 组集合,每个集合 Si 都是 …...
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
外贸网站 英文/最快的新闻发布平台
Flex Builder3 的长处是代码的写作,flash的长处是前台界面的制作,如何将这两者的长处结合起来,做到Flex builder 中写代码,然后导入到Flash cs4中,本文用到的产品是flex builder3 ,flash cs 4这两种工具使用flex builder 3做一个SWC类库新建一个flex library Project ,然后新建…...
![](https://img-blog.csdnimg.cn/img_convert/394ec42141120be5b4bef297d5bf257a.png)
vuejs 做网站 性能/整站优化 快速排名
插件简介这是一款相当实用的jQuery焦点图动画插件,它的特点是焦点图下方会有每一张图片的缩略图,点击缩略图即可快速切换到任意一张图片。另外一个特点是每一张图片切换时会出现多种过渡动画,这样让图片切换不那么单调。而且你可以用鼠标拖拽…...
![](/images/no-images.jpg)
电商网站方案建设/白帽seo是什么
导入第三方库时提醒找不到 在安装指令包名前加types/ npm install types/XXX npm install types/react-transition-group引入本地图片时 不能直接在src中写路径 import logo from ../assets/images/home/logo.png<img className{"logoStyle"} src{logo} alt&q…...