Linux错误:打开文件过多的解决方法 (linux 打开文件过多)

在使用Linux系统时经常会遇到“打开文件过多”的错误提示,这是因为Linux系统默认限制同时打开的文件数量的上限。这个限制数在不同系统版本中不一样,但一般不会太高,所以需要在遇到此错误时通过一些方法来解决。本文将介绍在Linux系统中打开文件过多的解决方法。

一、查看文件打开数限制

在Linux系统中,可以通过系统参数来查看更大打开文件描述符数量。打开终端,输入如下命令:

“`

ulimit -a

“`

执行上述命令后,系统会列出当前系统各项限制的值,其中包括更大打开文件描述符数量。

当出现错误提示“too many open files”时,说明当前使用的进程已经超过限制值。可以使用如下命令查看当前进程的文件描述符数量:

“`

lsof -p pid | wc -l

“`

其中“pid”表示进程的ID号。

二、修改文件打开数限制

1. 通过命令修改

在Linux系统中,可以通过命令来修改文件打开数限制。打开终端,输入如下命令:

“`

ulimit -n 数值

“`

其中“数值”表示新的限制值。此时,只能修改当前终端会话的文件描述符限制。如果要在所有会话中修改,需要在“/etc/security/limits.conf”中添加相关配置。

2. 通过修改配置文件来修改

在Linux系统中,也可以通过修改系统配置文件来修改文件打开数限制。编辑“/etc/security/limits.conf”文件,添加如下配置:

“`

* soft nofile 数值

* hard nofile 数值

“`

其中“soft”表示软限制,即当前系统默认的限制值;“hard”表示硬限制,即绝对不能超过的限制值,如果超过该值,系统会报错并拒绝打开文件。

修改完毕后,重启系统或者使用如下命令使设置立即生效:

“`

ulimit -SHn 数值

“`

三、关闭不需要的文件句柄

在Linux系统中,有些进程会无限制地打开文件,而不释放句柄,导致打开文件数量过多。可以通过手动关闭不需要的文件句柄来解决问题。可以使用如下命令来查看进程已经打开的文件句柄:

“`

lsof | grep program

“`

其中“program”表示正在运行的进程名。查看结果后,可以使用如下命令关闭不需要的文件句柄:

“`

kill -9 file_descriptor_number

“`

其中“file_descriptor_number”表示不需要的文件句柄编号。

四、使用代码处理

如果是自己编写的程序造成文件打开数过多的问题,可以在代码中进行处理。使用如下代码可以设置文件打开数限制:

“`

#include

void mn() {

struct rlimit limit;

limit.rlim_cur = 1024;

limit.rlim_max = 2023;

setrlimit(RLIMIT_NOFILE, &limit);

//…

}

“`

其中,上述代码将更大打开文件描述符数量限制为1024,硬限制为2023。

相关问题拓展阅读:

Linux怎么修改文件打开数

limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,而且只针对于单个会话。

  limits.conf的格式如下:

username|@groupname type resource limit

username|@groupname:设置需要被限制的用户名,组名前面加@和用户名区别。也可以用通配符*来做所有用户的限制。

  type:有 soft,hard 和 -,soft 指的谈拆拆是当前系统生御蔽效的设置值。hard 表明系统中所能设定的更大值。soft 的限制不能比har 限制高。用 – 就表明同时设置了 soft 和 hard 的值。

  resource:

  core – 限制内核文件的大小

  date – 更大数据大小

  fsize – 更大文件大小

  memlock – 更大锁定内存地址空间

  nofile – 打开文件的更大数目

  rss – 更大持久设置大小

  stack – 更大栈大小

  cpu – 以分钟为单含枣位的最多 CPU 时间

  noproc – 进程的更大数目

  as – 地址空间限制

  maxlogins – 此用户允许登录的更大数目

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

  session required /lib/security/pam_limits.so

例如:修改文件描述符大小(65536)

vi /etc/security/limits.conf

* soft nofile

* hard nofile

在线:

# ulimit -n 65535

# ulimit -n

65535

# ulimit -a

core file size(blocks, -c) unlimited

data seg size(kbytes, -d) unlimited

scheng priority(-e) 0

file size (blocks, -f) unlimited

pending signals (-i) 3806

max locked memory(kbytes, -l) 64

max memory size(kbytes, -m) unlimited

open files(-n) 65535

pipe size(512 bytes, -p) 8

POSIX message queues (bytes, -q)

real-time priority(-r) 0

stack size(kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes(-u) 3806

virtual memory(kbytes, -v) unlimited

file locks(-x) unlimited

操作系统版本:Redhat 5.4

问题背景:Tsung压力测试,想要尽可能多地建立tcp请求,发现每次只能建立1013个请求。

原因分析:Linux默认的文件打开数是1024,减掉其他地方用掉的11个,剩下的就是1013个了。

解决方案:

)先用ulimit -n或ulimit -a命令,发现文件打开数是1024

复制代码

代码如下:

# ulimit -n

2)用ulimit -n 65535把文件打开数改为更大值65535,再用ulimit -n验证发现修改成功

复制代码

代码如下:

# ulimit -n 65535

# ulimit -n

此时跑一下tsung start,发现仍然只能建立1013个请求。另外,重新登录后,发现文件打开数重置回默认的1024。说明此方案不通。

3)在/etc/security/limits.conf最后增加如下两行记录

复制代码

代码如下:

* soft nofile 65535

* hard nofile 65535

重新验证,成功。

补充资料:

修改linux系统更大打开文件数

当前设置更大打开文件数可以通过如下命令查看。

ulimit -n

这个数字说明了一个普通用户能够在一个单独会话中所能打开更大的文件数目。

注意。如果是root,以下操作不能使ulimit -n的输出增加。卜败因为用户root用户不受这个ulimit限制。只有普通用户才会受这个限制。

为了提高更大打开文件数到默认值1024以上, 需要在系统上修改2个地方。

在这个案例中, 我们将更大打开文件数增加到2023。 所有的步骤需要root用户操作。普通用户需要重新登录才能使设置生效。

. 按照更大打开文件数量的需求设置系统,并且通过检查/proc/sys/fs/file-max文件来确认更大打开文件数已经被正确设置。

# cat /proc/sys/fs/file-max

如果设置值太小, 修改文件/etc/sysctl.conf的变量到合适的值。 这样会在每次重启之后生效。如果设置值够大,跳过下步。

# echo 2023 > /proc/sys/fs/file-max编辑文件/etc/sysctl.conf,插入下行。

fs.file-max = 2023

. 在/etc/security/limits.conf文件中设置更大打开文件数, 下面是一行提示:

# 添加如下这行。

* – nofile 2023

这行设置了每个用户的默认打开文件数为2023。

注意”nofile”项有两个可能的限制措施。就是项下的hard和soft。

要使修改过得更大打开文件数生效,必须对这两种限制贺弊贺进行设定。

如果使用”-“字符设定, 则hard和soft设定会同时被设定。

硬限制表明soft限制中所能设定的更大值。

soft限制指的是当前系统生效的设置值。

hard限制值可以被普通用户降低。但是不能增加。

soft限制不能设置的比hard限制更高。

只有root用户才能够增加hard限制值。

当增禅派加文件限制描述,可以简单的把当前值双倍。

例子如下, 如果你要提高默认值1024, 更好提高到2023, 如果还要继续增加, 就需要设置成4096。

.Add the following line to the /etc/pam.d/login and /etc/pam.d/xdm file, if it does not already exist:

session required /lib/security/pam_limits.so

. logout and logon

或者在shell配置文件里面动态加载。

如.bashrc里加:

ulimit -HSn 2023

二、安装

tar zxvf mysql-5.1.50-linux-i686-glibc23.tar.gz

cp -rf mysql-5.1.50-linux-i686-glibc23 /usr/local/

cd /usr/local/

mv mysql-5.1.50-linux-i686-glibc23/ mysql

安装为默认的路径,这样就不用为程序目录做软链接了

groupadd mysql

useradd -g mysql mysql

cd mysql/

cp support-files/my-medium.cnf /etc/my.cnf

sed -i ‘s/log-bin=mysql-bin/#log-bin=mysql-bin/g’ /etc/my.cnf

sed -i ‘s/binlog_format=mixed/#binlog_format=mixed/g’ /etc/my.cnf

sed -i ‘s/skip-locking/skip-locking/nmax_connections = 1000/nwait_timeout = 5/g’ /etc/my.cnf

接下来初始化数据库

scripts/mysql_install_db –user=mysql

安装mysql服务控制

cp support-files/mysql.server /etc/rc.d/init.d/mysqld

chmod 755 /etc/rc.d/init.d/mysqld

chkconfig –add mysqld

chkconfig mysqld on

service mysqld start

如何修改linux更大文件打开数

Linux系统如何查看修改更大打开文件数,这个问题对于很多刚刚学习linux的小伙伴来说觉得有点奇怪。Linux系统和windows不同之处在于更强的多任务多线程,由于文件系统结构的不同linux针对不同进程不同用户都可以吵培告设置最打打开文件数。(如下图,在设置某些配置文中猜件的时候升明,会出现下图提示超过系统更大打开文件数

关于linux 打开文件过多的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux错误:打开文件过多的解决方法 (linux 打开文件过多)