RedHat对进程打开文件句柄数主要通过设置全局值和登陆用户分别管理。其中/proc/sys/fs下设置全局最大文件句柄数和用户进程能打开的最大文件句柄数,这两个参数一般情况下不需要修改。

对于普通用户或者进程通过/etc/security/limits.conf和/etc/security/limits.d/*.conf进行管理。或者通过ulimit 命令进行设置,但通过ulimit设置只对当前shell启动的进程有效。两者的设置生效范围和设置时机不同,详见三 操作系统limits.conf生效机制。

Redhat 7 以后对Systemd启动的服务的最大句柄数通过/etc/systemd/system.conf和/etc/systemd/user.conf进行管理。

一 、操作系统全局设置

1.查看系统的初始设置,默认为1024*1024=1048576

2.查看/etc/sysctl.conf和/etc/sysctl.con./*.conf的设置,如果需要修改sysctl.conf,则修改后须执行sysctl –p使修改生效。

3.查看/etc/security/limits.conf 以及/etc/security/limits.d/*.conf 。操作系统默认先加载limits.conf后加载limits.d/*.conf,所以相同配置后面会覆盖前面。

以上参数设置的关系

a)         所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max

b)         单个进程打开的文件描述符数不能超过user limit中nofile的soft limit

c)         nofile的soft limit不能超过其hard limit

d)         nofile的hard limit不能超过/proc/sys/fs/nr_open

注:soft limit表示对当前用户生效的值,用户可以通过命令或者脚本进行修改,但是不能超过hard limit。而hard limit 只用root才能修改,且不能超过nr_open数。

二、 对Systemd启动程序的设置

Red Hat 7使用Systemd代替了SysV,因此systemd启动的服务使用配置文件/etc/systemd/system.conf和/etc/systemd/user.conf进行管理,不受limits.conf限制。如果存在/etc/system/system.conf.d/*.conf 则同样会覆盖system.conf相同配置项。修改该配置文件后重启系统后生效。主要使用以下两个选项进行限制:

DefaultLimitNOFILE #限制systemd启动进程打开文件数

DefaultLimitNPROC #限制systemd 创建进程数

系统限制

普通用户

systemctl启动的单个服务如何修改打开句柄数:

1.通过命令查看服务对应的配置文件:

systemctl status example.service

2.编辑对应的配置文件,添加如下内容:

vim /usr/lib/systemd/system/example.service

3.通过以下命令使配置生效

sudo systemctl deamon-reload

三 、操作系统limis.conf生效机制

  ulimit –a显示如下,其中-n后面的为进程可以打开的最大文件句柄数。其他值为系统默认值。通过ulimit  -n设置的值只限制当前shell启动进程可以打开的文件句柄数。

Linux对用户使用资源的限制通过PAM对登陆用户进行身份验证并设置相应的限制。

具体顺序如下。从用户登陆开始,操作系统会依次执行如下三部

  1. /etc/pam.d/login

  2. /etc/pam.d/system-auth

  3. /lib64/security/pam_limits.so

具体内容如下:

1.在/etc/pam.d/login 中调用system-auth

2. 在/etc/pam.d/system-auth 调用pam_limits.so

3. 通过grep查看/lib64/security/pam_limits.so 可以看到limits.conf和limits.d/*.conf

4.在rc.local中设置ulimit -n 6635是否可以呢?

先说答案,可能不行。主要是操作系统加载顺序导致的,操作系统在启动时加载rc.local,然后在用户登陆时执行 limits.conf,最后在设置用户环境变量时执行/etc/profile 。因此后面的limits.conf和/etc/profile 中的 ulimit 命令设置均可能覆盖以前的设置。

四 结论

每次用户登录时会先加载/etc/security/limits.conf 以及/etc/security/limits.d/*.conf的配置,再执行/etc/profile 中的设置,因此在更改进程打开最大文件句柄数限制时有两种方案:

1.按格式修改/etc/security/limits.conf,重新登陆使limits.conf生效,然后再启动服务程序;

2.在/etc/profile 添加ulimit –n 65535 设置,重新登陆或者执行source /etc/profile命令,然后启动服务程序;

针对设置了免密登陆的情况,由于没有了了用户登陆验证过程,所以不会加载limits.conf文件,因此建议通过/etc/profile 中添加ulimit –n 65535命令设置,然后在启动服务程序之前执行source命令使该设置生效。

修改RedHat 7.2 进程最大句柄数限制的更多相关文章

  1. Linux Shell 网络层监控脚本(监控包括:连接数、句柄数及根据监控反馈结果分析)

    脚本监控: 获取最大句柄数的进程: 链接分析: 脚本片段: case "$handle" in 2) echo "The handle of the process : ...

  2. linux下查看系统进程占用的句柄数

    ---查看系统默认的最大文件句柄数,系统默认是1024 # ulimit -n 1024 ----查看当前进程打开了多少句柄数 # lsof -n|awk '{print $2}'|sort|uniq ...

  3. 服务器内存占用不断的增加 & 任务管理器(PF使用率)不断的增加:关注句柄数

    最近一二个月以来,我发现服务器的内存占用正按着每天60M的速度增加. 一台windows 2003的服务器(2G内存),刚刚启起时占用内存:600M左右. 运行20天后,内存占用(PF使用):1.8G ...

  4. ulimit设置句柄数

    这几天在做一个性能测试,写了一个模拟发送http的程序.模拟100并发的情况下,随机发http get的请求.放到服务器上运行一段时间抛出Too many open files的异常. 这几天在做一个 ...

  5. (转)如何在Linux中统计一个进程的线程数

    如何在Linux中统计一个进程的线程数 原文:http://os.51cto.com/art/201509/491728.htm 我正在运行一个程序,它在运行时会派生出多个线程.我想知道程序在运行时会 ...

  6. MySQL 句柄数占用过多的解决方法

    在Windows下安装MySQL ,用了官方的配置向导生成了my.ini,本以为很安稳了,谁知十多个小时过去之后,系统响应非常慢,看资源管理器的性能卡,发现句柄数竟然达到了10万!怪不得无论使用什么程 ...

  7. C#依据进程名称获取进程的句柄?

    C#依据进程名称获取进程的句柄或C#怎样获取其它进程的句柄? 有时候标题名是动态变化的,所以不使用FindWindow方法! [StructLayout(LayoutKind.Sequential)] ...

  8. Windows句柄数限制

    设置 GDIProcessHandleQuota项设置GDI句柄数量,默认值为2710(16进制)/10000(10进制),该值的允许范围为 256 ~ 16384 ,将其调整为大于默认的10000的 ...

  9. C#根据进程名称获取进程的句柄?

    C#根据进程名称获取进程的句柄或C#如何获取其他进程的句柄? 有时候标题名是动态变化的,所以不使用FindWindow方法! [StructLayout(LayoutKind.Sequential)] ...

随机推荐

  1. 服务器主机&软件性能测试自定标准

    PS:最近一直致力于代理ip的服务搭建,其中就要根据客户群体的不同来测试搭建环境和搭建软件的性能,但是不同的客户群体所处的环境和使用的软件是不同的,而业内又没有一套完整的评估方法.在忽略网络本身来讲, ...

  2. Analysis of container and Injection in Java, their history and future.

    Container: 发展历程: 2000 年的时候 FreeBSD 开发了一个类似于 chroot 的容器技术 Jails,这是最早期,也是功能最多的容器技术.Jails 英译过来是监狱的意思,这个 ...

  3. thupc & cts & apio & thusc 游记 (北京17日游记)

    thupc & cts & apio & thusc 游记 (北京17日游记) Day 0 和隔壁校两人py了一下,六个人组了两队,(左哼哼)与(右哼哼),我和Camoufla ...

  4. 散列(hash)

    散列(hash)是常用的算法思想之一,在很多程序中都会有意无意地使用到. 先来看一个简单的问题:给出N个正整数,再给出M个正整数,问这M个数中每个数分别是否在N个数中出现过. 例如N=5,M=3,N个 ...

  5. Linux---文件目录管理

    1. Linux文件目录架构 Linux的目录结构与win的目录有很大不同,首先,没有盘符的概念:然后Linux使用斜杠/标识目录,Linux首先建立一个根目录,然后将其他文件系统挂载到这个目录下. ...

  6. db2层级查询

    CREATE VIEW v_orgtype99 asSELECT t1.SYS_ORG_TYPE_NAME top_name1, t2.SYS_ORG_TYPE_NAME top_name2, --若 ...

  7. MySQL 查询状态

    查询状态 SHOW FULL PROCESSLIST 对于一个连接,或者说一个线程,任何时刻都有一个状态,该状态表示了MySQL当前正在做什么. mysql>SHOW FULL PROCESSL ...

  8. RabbitMq的简单使用

    本篇将介绍RabbitMq的一个简单使用例子,分别介绍生产者如何发送消息,消费者如何接收和处理消息 关于RabbitMQ的知识背景的文章非常多.我对它的总结是,解决高并发请求的瓶颈,将应用程序真正处理 ...

  9. [luoguP2701] [USACO5.3]巨大的牛棚Big Barn(DP)

    传送门 经典问题. 找出最大的不包含 1 的正方形. f[i][j] 表示 以 (i,j) 结尾的最大的不包含 1 的正方形 f[i][j] = min(f[i - 1][j], f[i][j - 1 ...

  10. 测试出来了第一版代码--可以得到用户token啦

    一版一版往前走啦... 先安装vs2010的学习版, 然后用codeblock来搞. 有一个msvcr100.dll这个文件需要和代码同级目录. 这样的好处是合规,然后,codeblock也可以用vs ...