介绍

在Linux下有时会遇到Socket/File : Can't open so many files的问题。其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默认是65535)。在生产环境中很容易到达这个值,因此这里就会成为系统的瓶颈。

今天早上tomcat应用就报了上述错误:

1.查看方法

使用ulimit -a 或者 ulimit -n

open files (-n) 1024 是linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量)

这里只是对用户级别的限制,其实还有个是对系统的总限制,查看系统总线制:

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

man proc,可得到file-max的描述:

/proc/sys/fs/file-max

This  file defines a system-wide limit on the number of open files for all processes.  (See

also setrlimit(2),  which  can  be  used  by  a  process  to  set  the  per-process  limit,

RLIMIT_NOFILE,  on  the  number  of  files it may open.)  If you get lots of error messages

about running out of file handles, try increasing this value:

即file-max是设置系统所有进程一共可以打开的文件数量。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。

也就是说,这项参数是系统级别的。

2.修改方法

临时生效:

# ulimit -SHn 10000

其实ulimit 命令身是分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。

软限制和硬限制的区别?

硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。

永久生效

要想ulimits 的数值永久生效,必须修改配置文件/etc/security/limits.conf

在该配置文件中添加

* soft nofile 65535

* hard nofile 65535

* 表示所用的用户,或者执行以下命令:

echo "* soft nofile 65535" >> /etc/security/limits.conf

echo "* hard nofile 65535" >> /etc/security/limits.conf

修改系统总限制

其实上的修改都是对一个进程打开的文件句柄数量的限制,我们还需要设置系统的总限制才可以。

假如,我们设置进程打开的文件句柄数是1024 ,但是系统总线制才500,所以所有进程最多能打开文件句柄数量500。从这里我们可以看出只设置进程的打开文件句柄的数量是不行的。所以需要修改系统的总限制才可以。

echo  6553560 > /proc/sys/fs/file-max

上面是临时生效方法,重启机器后会失效;

永久生效方法:

修改 /etc/sysctl.conf, 加入

fs.file-max = 6553560 重启生效

查看应用进程打开的文件句柄数量方法:

[root@pcidata-svr1 ~]# lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

统计单个进程打开的文件句柄数

[root@pcidata-svr1 ~]# lsof -p 1779|wc -l

通过PID再查看相应的进程

[root@pcidata-svr1 ~]# ps aux|grep 1779

linux修改文件句柄数生效_linux设置打开文件句柄数相关推荐

  1. linux修改文件句柄数生效_linux修改句柄数

    linux服务器大并发调优时,往往需要预先调优linux参数,其中修改linux最大文件句柄数是最常修改的参数之一. 在linux中执行ulimit -a 即可查询linux相关的参数,如下所示: [ ...

  2. linux修改文件句柄数生效_Linux 修改最大文件句柄数

    1,临时生效 # ulimit -SHn 10000 其实ulimit 命令身是分软限制和硬限制,加-H就是硬限制,加-S就是软限制.默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或 ...

  3. linux系统改ip地址 永久生效,Linux修改IP永久生效

    修改IP永久生效按以下方法: 1)修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0(eth0,第一块网卡,如果是第二块则为eth1) 按如下修改i ...

  4. linux修改dns不生效,Linux 临时修改和永久修改DNS的方法

    Linux 临时修改和永久修改DNS的方法 sunpma • 2019 年 09 月 15 日 修改DNS配置 查看当前DNS配置:cat /etc/resolv.conf 方法一(临时修改,重启失效 ...

  5. 怎样打开mysql进程数_mysql查看最大打开进程数

    今天在群里刚刚知道这个查看打开最大进程数的命令,下面来看一下吧~ cat /proc/27095/limits | grep Max open files 查看mysql最大打开进程数的命令 我们应该 ...

  6. linux修改文件句柄数生效_linux系统层面调优和常见的面试题

    linux系统层面调优和常见的面试题​mp.weixin.qq.com 无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种 ...

  7. linux 修改hosts立即生效设置

    修改完/etc/hosts后,执行/etc/init.d/network restart即可

  8. linux 修改sh文件生效,Linux-shell脚本基础

    本章内容 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 编程基础 程序:指令+数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell ...

  9. linux 修改mysql root密码_Linux mysql如何更改root密码

    说到root密码,很多人想到的是电脑系统的root账号密码,其实mysql也有root密码,那么在Linux系统中,mysql要如何修改root密码呢?特别是忘记了root密码要怎么办? 通过登录my ...

最新文章

  1. python核心编程学习(第四章)
  2. 4.SELECT DISTINCT 语句
  3. JS的对象及其属性和方法
  4. mysql字段分隔符拆分_MySQL里实现类似SPLIT的分割字符串的函数
  5. 【翻译】Brewer's CAP Theorem CAP定理
  6. memcached在Java中的应用以及magent的配置-每天进步一点点
  7. js常用循环遍历方法
  8. 如何在手机上编码python_如何在Python中进行热编码?
  9. 机器学习的一些常识(联合概率分布、模型种类、生成方法与判别方法)
  10. c语言 char作用,c语言中char型数据能直接运算吗?
  11. iOS 视频边下边播(缓存,预加载)
  12. edp协议 netty_大牛轻松带你玩转Arduino智能硬件:EDP协议连接onenet平台
  13. 怎么用一个计算机控制两个屏幕,一台电脑控制多个led显示屏
  14. 木瓜移动再求上市:毛利率走低、盈利能力弱,沈思“迷恋”相亲
  15. i9500 android8,八核神器 三星Galaxy S4 I9500拆解
  16. Echarts树形结构图加点击事件
  17. 域控制器丢失NETLOGON目录的解决办法
  18. 莫烦Python--Tensorflow Day5
  19. php球鞋,行家啊?!这些球鞋外号你必须要知道!
  20. for单次循环参数对比-以ode45求一元二阶微分方程为例

热门文章

  1. BIM模型HLoD设计文档
  2. 使用安卓实现一个二维码扫描功能(基于Android Studio)
  3. 智慧园区三维可视化IOC数字孪生系统
  4. 马哥Linux学习笔记2-2Linux系统基础使用入门
  5. php云系统清除版权,PHP云人才系统 PHPYun任意文件删除
  6. 全球及中国香氛护手霜行业规模现状与营销渠道分析报告2022版
  7. 了解Go编译处理(二)—— go build
  8. Python批量添加图片水印
  9. SketchUp的自动化探索 (二)建筑表皮生成器
  10. 【python】标准库(第七讲)