ulimit
是 Linux 内置的命令,用于限制用户会话的资源使用:
# 查看当前限制
ulimit -a
# 在 /etc/security/limits.conf 中添加永久限制
vim /etc/security/limits.conf
# 示例配置:
* hard nproc 1000 # 最大进程数
* hard nofile 1024 # 最大打开文件数
user1 hard cpu 2 # 用户user1最多使用2个CPU分钟
@developers hard memlock 512000 # developers组内存锁定限制
CentOS 7+ 使用 systemd 的 cgroups 实现:
# 创建自定义 slice
vim /etc/systemd/system/resource-limited.slice
[Unit]
Description=Resource Limited Slice
Before=slices.target
[Slice]
CPUQuota=50% # 限制最多使用50% CPU
MemoryLimit=1G # 限制最多使用1GB内存
# 重载 systemd 配置
systemctl daemon-reload
# 将服务放入该 slice
systemctl set-property httpd.service Slice=resource-limited.slice
直接为服务设置资源限制:
# 限制Apache服务资源
systemctl set-property httpd.service CPUQuota=200%
systemctl set-property httpd.service MemoryLimit=512M
systemctl set-property httpd.service BlockIOWeight=500
# 永久保存设置
systemctl edit httpd.service
# 安装 cpulimit
yum install -y cpulimit
# 限制进程PID为1234的CPU使用率为30%
cpulimit -p 1234 -l 30
# 启动时设置低优先级
nice -n 19 /path/to/command
# 调整运行中进程优先级
renice 19 -p 1234
# 编辑 sysctl 配置
vim /etc/sysctl.conf
# 添加以下参数
kernel.pid_max = 65536 # 最大PID数量
vm.overcommit_memory = 2 # 严格内存分配策略
vm.overcommit_ratio = 80 # 允许超配比例
kernel.sysrq = 0 # 禁用SysRq键
kernel.core_uses_pid = 1 # 核心转储包含PID
fs.file-max = 65536 # 系统最大打开文件数
# 应用配置
sysctl -p
# 确保SELinux处于 enforcing 模式
getenforce
setenforce 1
# 永久配置
vim /etc/selinux/config
SELINUX=enforcing
# 安装监控工具
yum install -y sysstat atop htop
# 设置审计规则
auditctl -a exit,always -F arch=b64 -S execve
auditctl -a exit,always -F arch=b32 -S execve
# 查看资源使用情况
sar -u 1 3 # CPU使用率
sar -r 1 3 # 内存使用
sar -d 1 3 # 磁盘I/O
# 创建隔离的命名空间
unshare --pid --fork --mount-proc /bin/bash
# 使用容器技术如Docker进行更彻底的隔离
通过以上配置,可以有效防止单个进程或用户消耗过多系统资源,提高系统的整体稳定性和安全性。