CentOS资源限制配置需结合ulimit、limits.conf、systemd及cgroups实现;ulimit用于临时会话级调整,limits.conf提供持久化用户/系统级限制,systemd服务单元支持服务专属资源配置,cgroups则实现进程组的精细化资源隔离与控制。

CentOS上的资源限制配置,核心在于通过
ulimit
/etc/security/limits.conf
systemd
cgroups
在CentOS中,配置资源限制主要涉及以下几个层面:
1. ulimit
ulimit
查看当前限制:
ulimit -a
这会列出所有可用的资源限制,例如打开文件数(
open files
max user processes
cpu time
设置限制: 你可以使用
-n
-u
ulimit -n 4096
通常,软限制是实际生效的限制,而硬限制是软限制可以达到的最大值。普通用户只能降低硬限制或在硬限制范围内提高软限制。root用户可以修改所有限制。
2. /etc/security/limits.conf
这个文件是PAM(Pluggable Authentication Modules)的一部分,它允许你为特定的用户、组或所有用户设置持久的资源限制。这些限制在用户登录时生效,并且会覆盖通过
ulimit
文件结构: 每一行通常遵循以下格式:
<domain> <type> <item> <value>
<domain>
myuser
@mygroup
*
%
<type>
soft
hard
-
<item>
nofile
nproc
cpu
memlock
<value>
示例: 为用户
nginx
nginx soft nofile 65535 nginx hard nofile 65535
为所有用户设置最大进程数为 4096:
* soft nproc 4096 * hard nproc 4096
生效机制: 修改
limits.conf
/etc/pam.d/system-auth
/etc/pam.d/sshd
session required pam_limits.so
3. Systemd Unit 文件:服务特定的资源限制
对于由
systemd
.service
配置方式: 在
[Service]
LimitNOFILE
LimitNPROC
LimitCPU
# /etc/systemd/system/nginx.service.d/limits.conf (创建或编辑) [Service] LimitNOFILE=65535 LimitNPROC=4096
或者直接在主
.service
生效: 修改后,需要重新加载
systemd
sudo systemctl daemon-reload sudo systemctl restart nginx
4. Cgroups (Control Groups):更精细的资源隔离
Cgroups是Linux内核提供的一种机制,用于限制、记录和隔离进程组的资源使用(CPU、内存、磁盘I/O、网络等)。它比
limits.conf
systemd
slice
scope
service
Systemd 与 Cgroups:
systemd
systemd
# /etc/systemd/system/mywebapp.service.d/cpu.conf [Service] CPUShares=512 # 默认是1024,降低表示分配更少的CPU时间 CPUQuota=50% # 限制服务最多使用50%的CPU
手动操作 (较少直接使用): 虽然可以直接通过
/sys/fs/cgroup
systemd
ulimit
limits.conf
这确实是很多人刚接触资源限制时会遇到的困惑。简单来说,它们解决的问题层面不同,但又相互关联。
ulimit
nofile
而
/etc/security/limits.conf
选择建议:
ulimit
/etc/security/limits.conf
systemd
.service
Limit*
systemd
ulimit
/etc/security/limits.conf
systemd
记住,
limits.conf
pam_limits.so
ulimit
Cgroups,即控制组(Control Groups),是Linux内核提供的一项强大功能,它允许你将一组进程组织起来,并对这些进程的资源使用进行限制、审计和优先级管理。这和我们前面提到的
ulimit
limits.conf
ulimit
想象一下,你有一个服务器,上面跑着Web服务、数据库、数据分析任务等多个应用。如果某个应用突然失控,耗尽了CPU或内存,整个系统都会受到影响。Cgroups的目的就是解决这个问题。它将系统资源(如CPU时间、内存、磁盘I/O、网络带宽)划分为不同的“子系统”(subsystems),每个子系统都可以独立地对进程组进行管理。
Cgroups 的核心概念:
cpu
cpuacct
memory
blkio
net_cls
pids
Cgroups 如何工作?
当一个进程被加入到一个cgroup时,它就会受到该cgroup所设置的资源限制。例如,如果你将一个Web服务的所有进程都放到一个内存限制为2GB的cgroup中,那么即使这个Web服务尝试分配更多内存,也会被内核阻止。
在CentOS 7/8中,
systemd
systemd
systemd
systemd
Limit*
LimitNOFILE
LimitNPROC
CPUQuota
MemoryLimit
Systemd 与 Cgroups 的实践:
CPUShares=value
CPUShares
CPUQuota=percentage
CPUQuota=50%
MemoryLimit=value
MemoryLimit=2G
MemorySwapMax=value
TasksMax=value
示例:为Nginx服务设置CPU和内存限制
假设你想限制Nginx服务最多使用一个CPU核心的50%,并且内存不超过2GB。你可以创建一个
systemd
sudo mkdir -p /etc/systemd/system/nginx.service.d/ sudo vi /etc/systemd/system/nginx.service.d/resource_limits.conf
文件内容如下:
[Service] CPUQuota=50% MemoryLimit=2G TasksMax=1000 # 限制最大进程/线程数
保存后,重新加载
systemd
sudo systemctl daemon-reload sudo systemctl restart nginx
通过这种方式,你可以在不影响系统其他部分的情况下,为特定的服务提供强隔离的资源保障。Cgroups的引入,极大地提升了Linux系统在多租户和容器化环境下的资源管理能力。
在CentOS中配置资源限制,虽然看起来直接,但实际操作中还是有不少坑点和值得注意的地方。我见过不少因为资源限制配置不当,导致服务不稳定甚至系统崩溃的案例。
常见误区:
limits.conf
limits.conf
systemctl restart service_name
soft
hard
soft
hard
hard
soft
hard
soft
hard
nofile
ulimit
systemd
limits.conf
systemd
systemd
nofile
nproc
memlock
cpu
最佳实践:
top
htop
vmstat
iostat
ss -s
lsof -p <PID>
*
systemd
nofile
nproc
/etc/security/limits.conf
systemd
/etc/sysctl.conf
net.core.somaxconn
fs.file-max
/etc/sysctl.conf
limits.conf
fs.file-max
nofile
通过遵循这些最佳实践,你可以更有效地管理CentOS上的资源限制,确保系统稳定运行,同时最大限度地发挥硬件性能。
以上就是CentOS资源限制如何配置_CentOS资源限制设置方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号