使用 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 系统的性能和资源管理能力。