使用 ulimit 命令可以优化 CentOS 系统的性能,主要通过调整进程的资源限制来实现。以下是具体的步骤和注意事项:
ulimit 命令用于设置或报告用户进程资源限制。其基本语法如下:
ulimit [options] [limit]
-H:设置硬资源限制。-S:设置软资源限制。-a:显示当前所有的资源限制。-c:设置 core 文件的最大值。-d:设置数据段的最大值。-f:设置创建文件的最大值。-l:设置内存锁定的最大值。-m:设置最大内存使用量。-n:设置打开文件描述符的最大值。-p:设置管道缓冲区的最大值。-s:设置堆栈的最大值。-t:设置 CPU 使用时间的最大值。-u:设置用户最多可运行的进程数。要使 ulimit 设置永久生效,需要进行以下配置:
修改 /etc/security/limits.conf 文件:
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
上述配置表示将所有用户的软限制和硬限制同时修改为 65535。
修改 /etc/pam.d/login 文件:
session required pam_limits.so
这行配置表示在用户登录时使用 pam_limits.so 模块来管理 limits.conf 文件中的限制。
修改 /etc/profile 或用户家目录下的 .bashrc 文件:
ulimit -u 65535
ulimit -n 65535
这两行命令会在用户登录时自动执行,从而应用之前设置的 ulimit 值。
在 CentOS 7 及以上版本中,由于引入了 systemd,配置文件的作用域有所变化:
修改 /etc/systemd/system.conf 和 /etc/systemd/user.conf 文件:
在这两个文件中添加或修改以下配置:
DefaultLimitNOFILE=65535
DefaultLimitNPROC=65535
这些配置会影响通过 systemd 启动的服务。
创建或修改服务特定的配置文件:
例如,对于 Apache 服务,可以创建或修改 /etc/systemd/system/httpd.service.d/limits.conf 文件:
[Service]
LimitNOFILE=20000
LimitNPROC=20000
然后重新加载 systemd 配置并重启服务:
systemctl daemon-reload
systemctl restart httpd
可以通过以下命令查看当前用户的资源限制:
ulimit -a
或者查看特定进程的资源限制:
cat /proc/<PID>/limits
其中 <PID> 是进程的 ID。
优先级问题:在 CentOS 6 和 CentOS 7 中,配置文件的优先级不同。CentOS 7 中,/etc/security/limits.conf 的优先级最高,接着是 /etc/security/limits.d/ 目录下的配置文件,最后是 /etc/systemd/system.conf 和 /etc/systemd/user.conf。因此,在 CentOS 7 中,建议主要修改 /etc/security/limits.conf 和 /etc/systemd/system.conf 文件。
系统级限制:除了用户级的限制外,还需要注意系统级的限制,如 /proc/sys/fs/file-max 参数,该参数限制了系统允许的总文件句柄数。可以通过以下命令查看和修改:
cat /proc/sys/fs/file-max
echo 100000 > /proc/sys/fs/file-max
通过合理配置 ulimit 参数,可以有效提升 CentOS 系统的性能和资源管理能力。