Linux 打开文件数1024限制的原理以及解决办法

/proc/sys/fs/file-max 

该文件指定了可以分配的文件句柄的最大数目。

查看最大值:

[[email protected] home]# cat /proc/sys/fs/file-max 
100977
[[email protected] home]#

这表明这台Linux系统最多允许同时打开(即包含所有用户打开文件数总和)100977个文件,是Linux系统级硬限制,所有用户级的打开文件数限制都不应超过这个数值。通常这个系统级硬限制是Linux系统在启动时根据系统硬件资源状况计算出来的最佳的最大同时打开文件数限制,如果没有特殊需要,不应该修改此限制,除非想为用户级打开文件数限制设置超过此限制的值。这个参数的默认值是跟内存大小有关系的,增加物理内存以后重启机器,这个值会增大。大约1G内存10万个句柄的线性关系。

修改值:

如果用户得到的错误消息声明,类似”too many open files”,这是由于打开文件数已经达到了最大值,从而他们不能打开更多文件,则可能需要增加该值。

[[email protected] home]# vim /etc/rc.local 

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don‘t
# want to do the full Sys V style init stuff.
echo 222158 > /proc/sys/fs/file-max    ;添加此项,修改file-max值
touch /var/lock/subsys/local
[[email protected] home]# reboot
[[email protected] ~]# cat /proc/sys/fs/file-max 
222158
[[email protected] ~]#

修改此硬限制的方法是修改/etc/rc.local脚本,在脚本中添加如下行:
echo 22158 > /proc/sys/fs/file-max
这是让Linux在启动完成后强行将系统级打开文件数硬限制设置为22158。修改完后保存此文件。

/proc/sys/fs/file-nr 

该文件与 file-max 相关,它有三个值: 
已分配文件句柄的数目     已使用文件句柄的数目     文件句柄的最大数目 
该文件是只读的,仅用于显示信息。

[[email protected] ~]# cat /proc/sys/fs/file-nr 
2112	0	222158
[[email protected] ~]#

/etc/security/limits.conf

limits.conf的格式如下:

<domain>      <type>  <item>         <value>

<domain> :可以指定单个用户名、@组名、所有用户(*)

type:有 soft(指的是当前系统生效的设置值),hard(表明系统中所能设定的最大值)和 -(表明同时设置了 soft 和 hard 的值)

[[email protected] ~]# vim /etc/security/limits.conf   ;文末添加以下两项
* hard nofile 4096      
* soft nofile 4096
:wq

我的是RedHat5.4修改后需要重新登陆,有的系统可能需要重启生效,

使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。查看 /etc/pam.d/login 文件中是否有以下选项:

[[email protected] ~]# cat /etc/pam.d/login |grep "pam_limits.so"
session required /lib/security/pam_limits.so
[[email protected] ~]#

这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。



linux下面部署应用的时候,有时候会遇上socket/file: can‘t open so many files的问题,其实linux是有文件句柄限制的(就像winxp?),而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量,因此我们需要修改上述文件把这个值改大一些。

[[email protected] ~]# cat /proc/sys/fs/file-max 
100977
[[email protected] ~]# cat /proc/sys/fs/file-nr 
2112	0	100977
[[email protected] ~]# 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) 7922
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7922
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[[email protected] ~]# ulimit -n
1024
[[email protected] ~]#

如果需要临时修改文件句柄数可以使用以下操作:

[[email protected] ~]# ulimit -HSn 4096
[[email protected] ~]# ulimit -n
4096
[[email protected] ~]#

H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄数量

如何查看当前系统打开文件数最多的程序:

lsof(list open files)是一个列出当前系统打开文件的工具。在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。 每行显示一个打开的文件,若不指定条件默认将显示所有进程打开的所有文件

lsof -n 不将IP转换为hostname,缺省是不加上-n参数 eg:# lsof  /GTES11/

lsof -i 用以显示符合条件的进程情况  eg:# lsof -i :22

[[email protected] ~]# lsof -n|awk ‘{print $2}‘|sort -nr|uniq -c|sort -nr|head -5
    162 1812
    149 1827
    126 1591
    107 1823
    100 1826
[[email protected] ~]#

如何查看某一程序打开文件数:lsof -p pid

[[email protected] ~]# lsof -p 1812|wc -l
163
[[email protected] ~]# lsof -p 1827|wc -l
150
[[email protected] ~]#
时间: 2024-08-02 10:47:00

Linux 打开文件数1024限制的原理以及解决办法的相关文章

linux 打开文件数 too many open files 解决方法

linux 打开文件数 too many open files 解决方法 too many open files 出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每一个用户最大同意打开文件数量 ulimit -a [email protected]:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 20 fi

Linux vi 方向键被转换为A B C D解决办法

 Linux vi 方向键被转换为A B C D解决办法 vim 模式下, 方向键被转为A B C D,退格键仅移动光标回退,并不删除. Del键可删除选定的,个别时候会切换大小写.命令模式下,u 键撤销只能回退一步. 解决方案: 按自己实际操作1. 进入$HOME目录: $ cd ~2. 创建.vimrc文件,增加set nocp 或是 $vi .vimrc 插入set nocp,然后保存即可.

struts2漏洞原理及解决办法

1.原理 Struts2的中心是运用的webwork结构,处置 action时号码大全经过调用底层的getter/setter办法来处置http的参数,它将每个http参数声明为一个ONGL(这里是ONGL的介绍)语句.当关键词挖掘工具咱们提交一个http参数: ?user.address.city=Bishkek&user['favoriteDrink']=kumys ONGL将它转换为: action.getUser().getAddress().setCity("Bishkek&q

linux 线程操作问题undefined reference to &#39;pthread_create&#39;的解决办法(cmake)

问题原因: pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a. 所以在使用pthread_create()创建线程时,需要链接该库. 1. 终端:问题解决:在编译中要加 -pthread参数 gcc thread.c -o thread -pthread 2. qt的cmake配置: 可以修改CMakeLists.txt: Here is the right answer: ADD_EXECUTABLE(your_executable ${sour

老男孩教育每日一题-2017年4月12日-请问如下登录环境故障的原理及解决办法?

请问如下登录环境故障的原理及解决办法? -bash-4.1$  -bash-4.1$

Linux中ftp不能上传文件/目录的解决办法

在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法 在排除用户组和权限等问题后,最可能引起ftp下文件无法上传并经常被忽略的因素就是硬盘空间已满,而导致硬盘空间满的问题多数是日志文件所占用的,例如mysql的日志会在不知不觉中变得十分庞大,直至占满剩余的硬盘空间. 解决办法: 1.定期手动清理或使用脚本清理mysql日志或其他相关日志文件. 2.关闭mysql日志(不推荐) 上面是空间有问

Linux 使用yum install安装mysql登陆不上解决办法

CentOS yum安装mysql后 Can’t connect to local MySQL server through socket ‘/var/lib/ CentOS Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ 如果仅仅只yum 安装了mysql这个包,启动mysql时就会提示:ERROR 2002 (HY000): Can’t connect to local MySQL

Linux下Tomcat向MySQL插入数据中文乱码解决办法

Linux下Tomcat向MySQL插入数据中文乱码解决办法 一.问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二.解决办法 1.尝试一直接在linux上面使用insert语句插入中文,正常2.尝试二在tomcat配置文件server.xml中加入useBodyEncodingForURI="true",不行3.尝试三在tomcat配置文件server.xml中再加入URIEncodin

Linux 打开文件数

linux设置最大打开文件数 - daiyudong2020的博客 - CSDN博客 https://blog.csdn.net/daiyudong2020/article/details/77828959 linux如何查看文件打开数?设置最大打开文件数_百度经验https://jingyan.baidu.com/article/1974b289a397d1f4b1f77495.html 原文地址:https://www.cnblogs.com/rgqancy/p/10917819.html