Linux服务器脚本资源控制

米饭8个月前行业资讯537

在Linux服务器上,脚本资源控制通常涉及对计算资源(如CPU、内存、磁盘I/O和网络带宽)的管理和限制。资源控制可以通过脚本来实现,通常结合Linux的工具和命令来进行。以下是几种常见的资源控制方法。


1. 限制CPU使用(cpulimit 和 nice)

cpulimit: cpulimit 是一个用于限制进程CPU使用率的工具。可以通过它限制某个进程的CPU占用。


安装:

sudo apt-get install cpulimit  # Debian/Ubuntu
sudo yum install cpulimit      # CentOS/RHEL

使用示例:

cpulimit -l 50 -p 12345  # 限制进程ID为12345的进程CPU使用率不超过50%
cpulimit -l 40 -e myapp   # 限制名为myapp的进程CPU使用率不超过40%

nice 和 renice: nice 命令用于调整进程的优先级。默认情况下,进程的优先级为 0,通过调整 nice 值可以设置优先级。较低的 nice 值(负数)优先级较高,较高的 nice 值(正数)优先级较低。

设置进程优先级(nice):

nice -n 10 command_to_run # 启动命令时设置优先级为10

更改运行中的进程优先级(renice):

renice 10 -p 12345 # 将进程ID为12345的优先级调整为10

2. 限制内存使用(ulimit 和 cgroups)

ulimit: ulimit 是一个Shell内置命令,用于限制当前会话或进程的资源使用(如最大文件大小、最大内存、最大进程数等)。通过设置 ulimit,可以防止某个进程占用过多资源,避免系统不稳定。


查看当前进程资源限制:

ulimit -a

设置内存限制:

 
ulimit -v 1048576 # 限制进程使用最大虚拟内存为1GB 
ulimit -m 1048576 # 限制进程使用最大物理内存为1GB

cgroups(Control Groups): cgroups是一种更高级的资源控制方法,可以精确地限制和管理进程组的资源使用(包括CPU、内存、磁盘和网络带宽等)。它适用于大规模的资源管理。

设置内存限制:

sudo cgcreate -g memory:/mygroup   # 创建一个cgroup
sudo cgset -r memory.limit_in_bytes=1G mygroup  # 设置内存限制为1GB
sudo cgexec -g memory:/mygroup command_to_run  # 启动命令,受内存限制

3. 限制磁盘I/O(ionice

  • ionice: ionice 用于调整进程的磁盘I/O优先级。通过它可以控制进程进行磁盘I/O时的优先级,避免某个进程占用过多磁盘I/O资源。

    使用示例:

ionice -c 3 -p 12345 # 将进程ID为12345的进程I/O优先级设置为最低 
ionice -c 2 -n 7 -p 12345 # 设置进程ID为12345的I/O优先级为2级,7为该优先级的子优先级

ionice 支持三种I/O调度类别:


**Class 1(实时):**优先级最高,通常需要超级用户权限。

**Class 2(最佳努力):**普通进程的默认类别。

**Class 3(空闲):**只有在没有其他进程使用磁盘时,才允许进行I/O。

4. 限制网络带宽(tc 和 trickle)

tc(Traffic Control): tc 是Linux自带的流量控制工具,可以用来限制网络带宽。


使用示例:

# 限制 eth0 网络接口的上传速度为1Mbit 
sudo tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms


    • rate: 限制带宽的速率。

    • burst: 允许的最大突发流量。

    • latency: 设定的最大延迟。

  • trickle: trickle 是一个轻量级的带宽限速工具,适用于进程层面的带宽限制,常用于限制某些应用(如wgetcurl等)的网络带宽。

    使用示例:

trickle -d 100 -u 50 wget http://example.com/largefile.zip # 限制下载速度为100KB/s,上传速度为50KB/s

5. 定时任务和监控

  • cron: 使用 cron 可以定期执行脚本,确保系统资源得到有效控制和管理。例如,可以设置定期检查进程的资源使用情况,并做相应的限制或优化。

    编辑 cron 表:

crontab -e

定期执行资源监控脚本:

* * * * * /path/to/resource_monitor.sh # 每分钟执行一次资源监控脚本

6. 使用systemd限制资源

systemd 是现代Linux系统的初始化系统,支持在服务层面进行资源控制。可以通过 systemd 配置文件来限制某个服务的资源使用。


编辑服务文件,例如 /etc/systemd/system/myservice.service,添加资源限制:

[Service]
CPUQuota=50%       # 限制CPU使用率为50%
MemoryLimit=1G     # 限制内存使用为1GB

重新加载配置并启动服务:

sudo systemctl daemon-reload 
sudo systemctl start myservice

总结

在Linux服务器中,通过脚本和各种命令工具,可以有效地控制进程的CPU、内存、磁盘I/O、网络带宽等资源。常见的资源控制工具包括 cpulimit、nice、cgroups、ulimit、ionice、tc 等。通过合理的使用这些工具,可以确保系统资源的合理分配和使用,防止单个进程占用过多资源,导致系统性能下降或崩溃。


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!  

云掣基于多年在运维领域的丰富时间经验,编写了《云运维服务白皮书》,欢迎大家互相交流学习:

《云运维服务白皮书》下载地址:https://fs80.cn/v2kbbq

想了解更多大数据运维托管服务、数据库运维托管服务、应用系统运维托管服务的的客户,欢迎点击云掣官网沟通咨询:https://yunche.pro/?t=shequ


相关文章

windows10家庭版禁用Device/Credential Guard解决方案

windows10家庭版禁用Device/Credential Guard解决方案

背景(禁用的原因)在安装Windows版的docker后,由于Windows版本自带虚拟机,折腾完后却发现原来安装的VMware Workstation Pro和Oracle VM VirtualBo...

一文讲透研发,SRE,运维,DevOps 的区别

一文讲透研发,SRE,运维,DevOps 的区别

研发,SRE ,运维是工种,而 DevOps 是体系。如果拿足球来打比方,研发,SRE ,运维对应的就是前锋,中场,后卫这样的位置,而 DevOps 则是诸如 4-3-3 这样的阵型。 研发...

深度学习之经典网络-AlexNet详解

深度学习之经典网络-AlexNet详解

 AlexNet 是一种经典的卷积神经网络(CNN)架构,在 2012 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中表现优异,将 CNN 引入深度学习的新时代。AlexNe...

IDC:疫情下,第三方云管理服务市场逆势增长!

IDC:疫情下,第三方云管理服务市场逆势增长!

IDC预测,中国第三方云管理服务在2019年到2023年间将保持54.7%的增长率,2023年市场规模预计达到32.1亿美元。2019年第三方云管理服务市场呈现出如下特点:云管理服务成为众多服务商的战...

Docker:技术架构的演进之路

Docker:技术架构的演进之路

前言技术架构是指在软件开发和系统构建中,为了满足业务需求和技术要求,对系统的整体结构、组件、接口、数据流以及技术选型等方面进行的详细设计和规划。它是软件开发过程中的重要组成部分,为开发团队提供了明确的...

MySQL数据库运维篇

MySQL数据库运维篇

一、日志1.1、错误日志它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。该日志是默认开启的,默认存放...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。