[实践OK]linux ulimit调优之ulimit -S -c 0 > /dev/null。CentOS修改ulimit(最大进程数和最大文件打开数)

jackxiang 2011-3-2 17:40 | |
一、永久修改 ulimit 限制,需要修改系统配置文件:

编辑 /etc/security/limits.conf 文件
打开 /etc/security/limits.conf 文件并添加以下行:
* soft nofile 20480
* hard nofile 20480
* soft nproc  20480
* hard nproc  20480
hive -nofile  20480
hive -nproc   20480

二、打开 /etc/sysctl.conf 文件并添加或修改以下内容:
fs.file-max = 2097152

文章尾部有更详细的说明。

=================================================
一)/etc/profile里有一行,  ulimit -S -c 0 > /dev/null,非Root登录还提示一个:
Last login: Thu Nov  8 10:54:22 2018 from 10.4.12.52
-bash: ulimit: open files: cannot modify limit: Operation not permitted


vi /etc/profile
ulimit -n 204800
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

解释:



系统值65535,用户值65536,内核的值1048576不要动:
一)vi /etc/sysctl.conf
       fs.file-max = 65535

二)大数据ELK的需要65536:
    vi /etc/security/limits.conf
*        soft    nofile  65536
*        hard    nofile  65536  
三)这个不用修改:找到问题了,centos系统设置每个进程的最大打开文件句柄数不能超过1048576。可以通过修改/proc/sys/fs/nr_open加大进程数。
    cat /proc/sys/fs/nr_open
    1048576

四)/etc/security/limits.d/90-nproc.conf文件尾添加
* soft nproc 204800  
* hard nproc 204800  

五)/etc/security/limits.d/def.conf文件尾添加
* soft nofile 204800  
* hard nofile 204800  

ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 62224
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 204800
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 204800
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

来自:https://blog.csdn.net/yu757371316/article/details/77863173
=========================================================================================
ulimit -a 用来显示当前的各种用户进程限制。
    Linux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,
    设置各linux 用户的最大进程数,下面我把某linux用户的最大进程数设为10000个:
     ulimit -u 10000
     对于需要做许多 socket 连接并使它们处于打开状态的 Java 应用程序而言,
     最好通过使用 ulimit -n xx 修改每个进程可打开的文件数,缺省值是 1024。
     ulimit -n 4096 将每个进程可以打开的文件数目加大到4096,缺省为1024
     其他建议设置成无限制(unlimited)的一些重要设置是:
     数据段长度:ulimit -d unlimited
     最大内存大小:ulimit -m unlimited
     堆栈大小:ulimit -s unlimited
     CPU 时间:ulimit -t unlimited
     虚拟内存:ulimit -v unlimited

我们公司服务器需要调整ulimit的stack size 参数调整为unlimited 无限,使用ulimit -s unlimited时只能在当时的shell见效,重开一个shell就失效了。。于是得在/etc/profile 的最后面添加ulimit -s unlimited 就可以了,source /etc/profile使修改文件生效。

PS:如果你碰到类似的错误提示
ulimit: max user processes: cannot modify limit: 不允许的操作
ulimit: open files: cannot modify limit: 不允许的操作

为啥root用户是可以的?普通用户又会遇到这样的问题?
看一下/etc/security/limits.conf大概就会明白。
linux对用户有默认的ulimit限制,而这个文件可以配置用户的硬配置和软配置,硬配置是个上限。
超出上限的修改就会出“不允许的操作”这样的错误。

在limits.conf加上
*        soft    noproc  10240
*        hard    noproc  10240
*        soft    nofile  10240
*        hard    nofile  10240
就是限制了任意用户的最大线程数和文件数为10240。

来源:http://antsw.blog.51cto.com/936097/214997


来自人工智能:
在 CentOS 中,可以通过查看系统的文件句柄数量以及调整 `ulimit` 的软硬限制来管理系统资源。以下是相关步骤:

### 1. **查看当前系统的文件句柄数**

可以使用以下方法查看系统当前打开的文件句柄数量。

#### 1.1 使用 `lsof` 查看所有进程的文件句柄数量

```bash
lsof | wc -l
```

`lsof` 命令列出所有打开的文件,`wc -l` 统计文件句柄数量。这个命令输出的是系统当前所有打开的文件句柄的总数。

#### 1.2 查看单个进程的文件句柄数

如果你只想查看某个进程的文件句柄数,例如 PID 为 1234,可以使用:

```bash
ls /proc/1234/fd | wc -l
```

`/proc/[PID]/fd` 目录包含该进程打开的文件描述符,通过统计这个目录中的文件数量可以得到文件句柄数。

### 2. **查看和修改 `ulimit` 限制**

`ulimit` 用于控制用户或进程的资源使用,包括打开的文件句柄数量(文件描述符)。你可以查看和修改 `ulimit` 的软硬限制。

#### 2.1 查看当前的文件句柄限制

使用 `ulimit` 命令可以查看当前的文件句柄限制:

- 查看软限制(当前会话的限制):
  ```bash
  ulimit -n
  ```

- 查看硬限制(系统最大允许的限制):
  ```bash
  ulimit -Hn
  ```

#### 2.2 临时修改文件句柄限制

你可以临时修改当前会话的软硬限制。注意,临时修改只对当前会话有效,重启后会恢复默认值。

- 修改软限制:
  ```bash
  ulimit -Sn [新的软限制值]
  ```

- 修改硬限制:
  ```bash
  ulimit -Hn [新的硬限制值]
  ```

例如,设置软限制为 10240,硬限制为 20480:

```bash
ulimit -Sn 10240
ulimit -Hn 20480
```

#### 2.3 永久修改文件句柄限制

为了永久修改 `ulimit` 限制,需要修改系统配置文件:

##### 编辑 `/etc/security/limits.conf` 文件

打开 `/etc/security/limits.conf` 文件并添加以下行:

```bash
*       soft    nofile  10240
*       hard    nofile  20480
```

这将把所有用户的软限制设置为 10240,硬限制设置为 20480。你也可以为特定用户或组设置不同的限制。

##### 编辑 `/etc/sysctl.conf` 文件

为了确保系统内核支持更高的文件句柄数,还需要修改内核参数。打开 `/etc/sysctl.conf` 文件并添加或修改以下内容:

```bash
fs.file-max = 2097152
```

然后执行以下命令应用更改:

```bash
sudo sysctl -p
```

##### 编辑 `/etc/pam.d/common-session` 文件

确保 PAM 模块支持读取 `limits.conf`,在 `/etc/pam.d/common-session` 文件中添加以下行:

```bash
session required pam_limits.so
```

### 3. **重启服务或系统**

如果你修改了文件句柄的永久设置,需要重启系统或相关服务以使其生效:

```bash
sudo reboot
```

或针对特定服务:

```bash
sudo systemctl restart [服务名]
```

### 总结

- 使用 `lsof | wc -l` 可以查看当前系统的句柄数。
- `ulimit -n` 查看软限制,`ulimit -Hn` 查看硬限制。
- 临时修改限制使用 `ulimit -Sn` 和 `ulimit -Hn`。
- 永久修改限制需要编辑 `/etc/security/limits.conf`、`/etc/sysctl.conf`,并确保 PAM 模块配置正确。

这样可以有效管理 CentOS 系统中的文件句柄资源。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/4078/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2024-9-23 23:29
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]