在 CentOS 系统中,ulimit 命令用于控制 shell 进程及其子进程的资源限制。以下是一些常见的 ulimit 设置和系统调优方法:
使用 ulimit -a 命令可以查看当前用户的所有资源限制。
ulimit -a
你可以在当前 shell 会话中临时修改资源限制。例如,增加文件描述符的最大数量:
ulimit -n 65535
要永久修改资源限制,需要编辑 /etc/security/limits.conf 文件。例如,为特定用户或用户组设置资源限制:
# 编辑 /etc/security/limits.conf 文件
sudo vi /etc/security/limits.conf
# 添加以下行
* soft nofile 65535
* hard nofile 65535
这里的 * 表示所有用户,soft 是软限制,hard 是硬限制,nofile 是文件描述符的数量。
除了 ulimit,还可以通过调整内核参数来优化系统性能。编辑 /etc/sysctl.conf 文件:
# 编辑 /etc/sysctl.conf 文件
sudo vi /etc/sysctl.conf
# 添加或修改以下行
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
然后应用这些更改:
sudo sysctl -p
除了 ulimit 和内核参数,还可以通过修改 /etc/fstab 文件来调整文件系统的文件描述符限制。例如:
# 编辑 /etc/fstab 文件
sudo vi /etc/fstab
# 在需要调整的文件系统行末尾添加以下选项
defaults,noatime,nodiratime,barrier=0
使用 top、htop、vmstat 等工具监控系统资源使用情况,以便及时发现和解决问题。
top
htop
vmstat 1
对于更复杂的资源管理需求,可以使用 cgroups(控制组)来限制进程组的资源使用。
# 安装 cgroup-tools
sudo yum install cgroup-tools
# 创建一个新的 cgroup
sudo cgcreate -g memory:/mygroup
# 设置内存限制
echo "1G" | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
# 将进程添加到 cgroup
sudo cgclassify -g memory:mygroup <pid>
通过以上方法,你可以有效地管理和优化 CentOS 系统的资源使用。