文章目录

  • ulimit命令语法
    • 参数说明:
    • 查看本机设置的参数:
  • ulimit修改打开文件的句柄数
    • 场景
    • 解释:
    • 修改
      • 1.修改file-max
      • 2.修改ulimit的open file
    • 注意事项
      • daemon进程无效
      • 服务已启动动态调整无效

ulimit命令语法

ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]

参数说明:

参数 英文说明 中文解释
-a all 显示目前资源限制的设定。
-c core file size <core文件上限>设定core文件的最大值,单位为区块。
-d data seg size <数据节区大小> 程序数据节区的最大值,单位为KB。
-f file size <文件大小>  shell所能建立的最大文件,单位为区块。
-H hard 设定资源的硬性限制,管理员设置的上限。
-S soft 软设定资源的弹性限制,小于hard设置的上限。
-m max locked memory 设置内存中一些对程序性能影响较大的数据lock,指定可使用内存的上限,单位为KB。
-m max memory size <内存大小>  指定可使用内存的上限,单位为KB。
-n open files <文件数目>  指定同一时间最多可开启的文件数。
-p pipe size <缓冲区大小>  指定管道缓冲区的大小,单位512字节。
-s stack size <堆栈大小>  指定堆栈的上限,单位为KB。
-t cpu time <CPU时间>  指定CPU使用时间的上限,单位为秒。
-u max user processes <程序数目>  用户最多可开启的程序数目。
-v virtual memory <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

查看本机设置的参数:

[root@hadoop-master 2477]# 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) 7146
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 102400
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7146
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

ulimit修改打开文件的句柄数

场景

linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够。这就需要修改ulimit和file-max。特别是提供大量静态文件访问的web服务器,缓存服务器(如squid), 更要注意这个问题。
网上的教程,都只是简单说明要如何设置ulimit和file-max, 但这两者之间的关系差别,并没有仔细说明

解释:

1. 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
Provides control over the resources available to the shell and to processes started by it, on systems that allow such control.
即设置当前shell以及由它启动的进程的资源限制。
显然,对服务器来说,file-max, ulimit都需要设置,否则就可能出现文件描述符用尽的问题

修改

1.修改file-max

# echo  102400 > /proc/sys/fs/file-max
# sysctl -w "fs.file-max=102400",前面2种重启机器后会恢复为默认值
# vim /etc/sysctl.conf, 加入以下内容,重启生效
fs.file-max=102400
net.nf_conntrack_max=1024000
net.netfilter.nf_conntrack_max=1024000

2.修改ulimit的open file

系统默认的ulimit对文件打开数量的限制是1024
方式一(临时修改,推出后恢复默认值):

# ulimit -HSn 102400  //这只是在当前终端有效,退出之后,open files又变为默认值。当然也可以写到/etc/profile中,因为每次登录终端时,都会自动执行/etc/profile

方式二(永久修改,需要重启主机):

# vim /etc/security/limits.conf  //加入以下配置,重启即可生效
* hard nofile 102400
* soft nofile 102400

按照第二种方式重启后,再看,发现句柄数已经改变了

[root@hadoop-master 2477]# ulimit -n
102400

注意事项

daemon进程无效

为了让一个程序的open files数目扩大,可以在启动脚本前面加上ulimit -HSn 102400命令。但当程序是一个daemon时,可能这种方法无效,因为没有终端。

服务已启动动态调整无效

如果某项服务已经启动,再动态调整ulimit是无效的,特别是涉及到线上业务就更麻烦了。
这时,可以考虑通过修改/proc/’程序pid’/limits来实现动态修改!!!(笔者通过VIM修改后报没有权限,目前无法通过这种方式修改),可以通过启动前修改的方式达到修改的目的。
例如:首先修改本地的打开文件数,从2048修改为1024

[root@hadoop-master shell-asy]# ulimit -n
2048
[root@hadoop-master shell-asy]# ulimit -n 1024
[root@hadoop-master shell-asy]# ulimit -n
1024

然后启动服务,并查看ulimit参数

[root@hadoop-master shell-asy]# nohup sh start-syn.sh &
[2] 4542
[root@hadoop-master shell-asy]# nohup: 忽略输入并把输出追加到"nohup.out"[root@hadoop-master shell-asy]# cat /proc/4542/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             7146                 7146                 processes
Max open files            1024                 1024                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7146                 7146                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

发现我们需要修改的文件句柄数已经修改了

Linux运维:ulimit命令修改打开文件的句柄数相关推荐

  1. Linux运维常用命令(转)

    为什么80%的码农都做不了架构师?>>>    1.删除0字节文件 find-type f -size 0 -exec rm -rf {} \; 2.查看进程 按内存从大到小排列 p ...

  2. linux系统中pwd命令的作用,Linux运维pwd命令有什么用途?linux系统

    Pwd命令用于显示当前所在的位置,是Linux运维工作人员需要掌握的Linux文件和目录操作命令之一.对于Linux运维工作,Linux命令是必不可少的.随着技术的发展,市场对于Linux运维人才的需 ...

  3. 6.Linux运维常用命令

    1.Linux运维常用命令 chage -M 99999 test  #修改test用户的密码有效期:10W天 lscpu  --查看cpu; #查看CPU核数,当前机器是物理机还是虚拟机 iosta ...

  4. linux运维常用命令整理

    对于刚接触运维的朋友们来说,linux命令行是个非常头痛的问题,要不就是记不住命令,要不就是记不住用法,总之,就是觉得linux运维命令很头疼. 最近花了些时间整理了一些常用的linux下常用的运维命 ...

  5. linux运维工程师命令,Linux运维工程师的常用Linux命令汇总

    今天小编要跟大家分享的文章是关于Linux运维工程师的常用Linux命令汇总.作为运维人员,这些常用命令不得不会,掌握这些命令,工作上会事半功倍,提供工作效率.下面来和小编一起看一看吧! 一.文件和目 ...

  6. Linux运维实用命令

    (尊重劳动成果,转载请注明出处:https://blog.csdn.net/qq_25827845/article/details/83956874冷血之心的博客) 目录 top----Linux下常 ...

  7. Linux 运维常用命令 find、awk、sed、grep、vi、ps、lsof、rpm

    先用一个脚本,模拟创建 14 个测试文件: #!/bin/bash for ((i=1;i<=10;i++)); do if [ $i -lt 3 ] thentouch /home/mysql ...

  8. linux运维常用命令一句话(持续更新中)

    整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...

  9. linux运维常用命令一句话

    整理收集一些linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...

最新文章

  1. python matplotlib.pyplot.imshow() (在2D常规栅格上显示图像(数据))
  2. vm服务器虚拟化如何漂移,解决虚拟机漂移问题的自动化网络管理
  3. 【编译原理】FIRSTVT和LASTVT求法
  4. vue项目使用eslint
  5. 每日英语:Lighting: Twigs Shine in Home Decor
  6. Java之五种遍历Map集合的方式
  7. 修改csdn中字体颜色
  8. 软件测试人员如何在“金三银四”跳槽季找到理想工作?
  9. 点4下还是点1下?使用jQuery启动一个SharePoint工作流
  10. 04-cmake语法-STREQUAL
  11. (Photo Metadata Remover)Android App 一键去除照片 EXIF 隐私信息
  12. HTTP协议【详解】——经典面试题
  13. ScrollDown的基本操作
  14. 《最优化理论》:运输问题(一)求最小运费【西北角法、最小元素法、伏格尔法】
  15. 厉害了,大米云Linux搭建Wordpress环境
  16. Spring Cloud 基础教程 - 程序猿DD
  17. Hadoop-Spark企业应用实战
  18. 安卓升级AndroidX手把手教程
  19. cscd期刊是c刊吗_核心期刊和C刊有什么区别
  20. c语言一元多项式课程设计,一元多项式的计算数据结构课程设计.doc

热门文章

  1. 导出SAP表结构到EXCEl
  2. 几种内表更新方式的性能比较
  3. 如何在ALV中输出标题头
  4. linux mysql 1366_Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法
  5. python给函数设置超时时间_在 Linux/Mac 下为Python函数添加超时时间
  6. 爬虫 无访问权限“_Windows10电脑系统共享打印机无访问权限解决方法
  7. python中的几种倒序遍历
  8. python中的print()、str()和repr()的区别
  9. Python基础教程:赋值、深拷贝与浅拷贝(内存地址)
  10. Python基础教程:字典和Json