linux系统下的用户文件句柄数限制

文章来源:企鹅号

为什么要修改用户打开的文件数

系统默认单个进程可以打开1024个文件,对于一些应用如tomcat、oracle等,运行时经常open成千上万个文件,系统管理员需根据系统上运行的应用需求,修改系统文件数限制值。

系统中除了有限制单个进程打开的文件数,还有全部进程打开的文件总数限制。打开的文件总数限制是系统跟据硬件配置推算出来的,所以不同系统上,总数限制值可能不相同,系统管理员也可以手动修改总数限制。

在系统日志或终端上看到“resource temporarily unavaliable”报错信息时,一般是出现了单个进程打开的文件数达最大值、系统中打开文件总数达最大值、用户使用的进程(包括线程)数达最大值、文件系统满这四种情况中的一种。

查看系统打开文件总数限制:

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

1517258

# sysctl -a | grep fs.file-max

fs.file-max = 1517258

查看系统当前打开文件总数:(粗略计算,此值略低于实际值)

# lsof -n | wc -l

13077

临时修改系统打开文件总数限制:(立即生效,重启无效)

# echo 1600000 > /proc/sys/fs/file-max

永久修改系统打开文件最大值限制:

# echo fs.file-max = 1600000 >> /etc/sysctl.conf

# sysctl -w

(sysctl -w命令,使/etc/sysct.conf配置内容立即生效)

2. 修改用户文件句柄数

(root用户不受限制)

通过/etc/security/limits.conf修改用户的资源限制,包括文件数限制。例如:

tiger soft nofile 4096 //设置tiger用户每个进程可以打开4096个文件(软限制)

tiger hard nofile 4096 //设置tiger用户每个进程可以打开4096个文件(硬限制)

tiger - nofile 4096 //设置tiger用户每个进程可以打开4096个文件(软硬限制)

@sale - nofile 4096 //设置sale组用户每个进程可以打开4096个文件(软硬限制)

* - nofile 4096 //默认值,如果用户与其他条目不匹配,则使用此设置

说明:

(1)如果软限制和硬限制的值不相同,则较小的那个值生效。

(2)用户可以自行调整限制值,但不可超过硬限制。

tiger soft nofile 4096

tiger hard nofile 8192

$ ulimit -n

4096

$ ulimit -n 8192

$ ulimit -n

8192

$ ulimit -n 10240

-bash: ulimit: open files: cannot modify limit: 不允许的操作

3. 修改限制后什么时候生效

修改/etc/security/limits.conf后,用户开启一个新的shell时生效。一般是用户exit退出登录,再次login。应用程序要使用更改后的配置,应用管理员需要在新shell中重启应用。

有时候修改/etc/security/limits.conf后,配置没有生效。很多都是在重新编译安装了ssh服务后出现的。原因只有一个,就是用户会话是否使用了pam_limits.so模块。

在/etc/pam.d目录,存放了pam配置文件,常见如下:

login:用户通过终端登录时使用的pam配置文件

sshd:用户通过ssh远程登录时使用的pam配置文件

su:用户通过su切换用户时使用的pam配置文件

sudo:用户通过sudo,以其他用户身份执行命令时的配置文件

limits.conf修改后不生效时,管理员应该首先确认用户是以哪种方式打开会话的,然后在对应的pam配置文件中查找是否有“session required pam_limits.so”这项配置。如果没有,则limits.conf配置不会生效。“session required pam_limits.so”配置经常放在password-auth和system-auth,然后被其他配置文件include进来。

# grep pam_limits.so /etc/pam.d/sshd

# grep include /etc/pam.d/sshd

auth include system-auth

account include system-auth

password include system-auth

session include system-auth

# grep pam_limits.so /etc/pam.d/system-auth

session required pam_limits.so

4. 是对用户单个进程打开的文件数限制

(1)修改/etc/security/limits.conf,添加

tiger - nofile 100 //限制用户每个进程打开的文件数为100

(2)写一个程序,每秒打开一个文件(此处我引用一段朋友写的C代码)

$ vi file.c

#include

#include

#include

#include

main()

{

int fs;

int i=0;

char *filename;

while(i

fs=open(UTMP_FILE,O_RDONLY);

printf("open %d files,the filedescriptor is %d\n",i,fs);

i++;

sleep(1);

}

}

# gcc file.c –o file

# chmod 755 file

(3)多打开几个终端,同时运行该程序

$ ./file

并行运行多个file程序,你会发现每个file程序都可以打开100个文件,然后报打开文件失败。

共享同一进程号的所有线程,打开的文件总数不能超过单个进程限制值。

linux系统下的用户文件句柄数限制的更多相关文章

  1. 05 Linux系统下的用户以及用户权限管理(权限管理介绍、用户管理、常见命令介绍)

    这一节我们介绍Linux的用户以及权限管理的前半段,包括:1.权限管理介绍: 2.用户管理: 3.常见命令 权限管理介绍 权限管理: 为了访问计算机资源,我们需要对其进行授权才能访问,根据什么东西来进 ...

  2. (转)linux 系统下虚拟用户的作用

    原文:http://blog.csdn.net/luoshao20120430/article/details/16900653            http://blog.csdn.net/u01 ...

  3. 记录linux系统下所有用户的操作信息

    在日常运维中,我们需要清楚服务器上每个用户登录后都做了哪些操作,我们需要记录下每个用户的操作命令.下面的内容设置可以实现在Linux下所有用户,不管是远程还是本地登陆,在本机的所有操作都会记录下来,并 ...

  4. linux系统下root用户和普通用户的时区不一致

    1. 发现这个问题是在root下执行 date -R 和 普通用户下执行 date -R,发现时区不一致 2. 在一些linux机器下,发现是一致的 3. 什么原因呢?找了半天,最后发现 时区一致的机 ...

  5. Linux系统下超级用户密码的修改

    1)重启系统:在虚拟机刚启动界面,不停地按上下键,停止系统的自动引导(界面底部有提示) 2) 按 e 进入编辑模式 3) 编辑内容如下:完成后按Ctrl+x    (具体编辑内容为下图:删除倒数第三行 ...

  6. 【Linux 命令】Linux系统下强制用户下线——who,pkill

    [日期]2014年11月18日 [平台]Centos 6.5 [工具]who pkill [步骤] 1)准备工作 以root身份登录. 2)执行who命令,查看有哪些用户已登录到当前主机

  7. Linux系统下给非root用户添加sudo权限

    Linux系统下给非root用户添加sudo权限 有时,在linux系统中非root用户运行sudo命令,会提示类似信息:  xxx is not in the sudoers file. This ...

  8. Linux系统下用户与组的管理

    Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户: ...

  9. linux系统下修改文件夹目录权限

    linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...

随机推荐

  1. 小白入门AI教程:教你快速搭建大数据平台『Hadoop+Spark』

    Apache Spark 简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎.Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源 ...

  2. TaskFactory单例模式利用xml

    /** * * Copyright (c) 1995-2009 Wonders Information Co.,Ltd. * 1518 Lianhang Rd,Shanghai 201112.P.R. ...

  3. ABP框架和NET CORE实战

    http://www.fishpro.com.cn/2017/09/ ABP实战系列 ABP实战 ABP-第一个Asp.net core 示例(7)AutoMapper的使用 我们为什么需要使用DDD ...

  4. (转)linux下od命令的使用

    linux下od命令的使用 原文:http://blog.csdn.net/shylock_backer/article/details/46473283 名称:od作用:格式化输出文件中的数据提要: ...

  5. Fedora桌面系统Idea中的部分中文无法显示解决

    在Linux 桌面开发已经有一段时间了,个人用的是最新的Fedora ,装上idea后,写代码再加中文注释的时候发现部分汉字打不出来,删除的时候发现汉字占着位,只是显示不出来,最初以为是注释问题,调整 ...

  6. 关于一次性的数据输入,excel字符串连接保存到服务器还是CRUD?

    一 开发中遇到个问题,线下一个紧急的活动,给一个excel的文件,要把里面的一次性的数据放进活动里面,说真的几百几千个数据啊,手写进数据库不是更麻烦了吗? 于是,备份方法就是写一个crud,让线下的人 ...

  7. Java中的Validated验证

    注意点:在使用@NotBlank时,必须与@Valid配着使用,不然不起作用(出现了很奇怪的现象,我第一次试的时候确实有这情况,但是第二次的时候这情况没了,所以这个说不准) @NotBlank 用在S ...

  8. Eclipse的安装与使用

    1安装 下载 http://www.eclipse.org 安装 (最好下载解压版的,不用安装) 安装目录中,不要出现空格与中文 例如,解压到:D:\codetool 2项目的创建 双击运行.exe文 ...

  9. dubbo服务降级(2)

    dubbo降级服务 使用dubbo在进行服务调用时,可能由于各种原因(服务器宕机/网络超时/并发数太高等),调用中就会出现RpcException,调用失败. 服务降级就是指在由于非业务异常导致的服务 ...

  10. 使用Karabiner为Mac内置键盘、HHKB进行映射

    使用Karabiner为Mac内置键盘.HHKB进行映射 Table of Contents 1. 引言 2. 什么是Karabiner和配置方法的基本说明 3. 内置键盘设置 4. HHKB设置 5 ...