Linux 控制 openfile 命令之 ulimit

文章
林里克斯

Linux 控制 openfile 命令之 ulimit

理论知识


一、理论知识


文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文件对象相关联,这些信息被称作文件的上下文。文件描述符的有效范围是 0OPEN_MAX

对于内核而言,所有打开的文件都是通过文件描述符引用的。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用 opencreat 返回的文件描述符标识该文件,并将其作为参数传递给 readwirte.

文件描述符定义的内容如下:

$ define STDIN_FILENO 0 /* Standard input. */
$ define STDOUT_FILENO 1 /* Standard poutput. */
$ define STDERR_FILENO 2 /* Standard error output. */

二、命令参数详解


-a  #显示目前所有资源设定的限制信息,显示全部信息
-b  #socket 目前缓冲的最大值
-c  #创建的核心 core 文件的最大大小,单位 blocks
-d  #进程数据段的最大值,单位 KB
-e  #调度优先级上限,这里的优先级指 NICE 值。只针对普通用户进程有效
-f  #当前 Shell 可创建文件总大小的上限,单位 blocks
-H  #设定资源的硬限制,只有 root 用户可以操作
-i  #被挂起/阻塞的最大信号数量
-l  #可以锁住的物理内存的最大值,单位 KB
-m  #可以使用的常驻内存的最大值,单位 KB
-n  #每个进程可以打开的最大文件数
-p  #管道的最大值,单位 block
-q  #POSIX 消息队列的最大值
-r  #限制程序实时优先级,只针对普通用户进程有效
-s  #进程栈最大值,单位 KB
-S  #设置资源的软限制
-t  #最大 CPU 时间,单位 s
-u  #用户最多可启动的进程数目
-v  #当前 Shell 可使用的最大虚拟内存,单位 KB
-x  #文件锁的最大数量
-T  #线程的最大数量

eg:
$ 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) 7183
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) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

注意:一旦设置了硬限制,非 root 用户就不能增加它;软限制可能会增加到硬限制的值。如果不指定 -H 和 -S,则软限制和硬限制同时指定 limit 的值可以是一个以资源指定的单位为单位的数字,也可以是一个特殊值 hard、soft 或unlimited,它们分别代表当前的硬限制、软限制和无限制


三、常用实例


1.查看 Linux 服务器可以打开的最大文件数

$ ulimit -n
1024
#默认为1024

2.调整 Linux 文件描述符的大小

(1)

$ vim /etc/security/limits.conf

*   soft    nofile  65535
*   hard    nofile  65535
#最末尾添加

$ tail -1 /etc/security/limits.conf
*   soft    nofile  65535
*   hard    nofile  655355
#nofile 表示单个进程可以打开的最大文件句柄数(默认值,软限制:1024,硬限制:4096)
#nproc表示单个用户创建的进程数(默认值,软限制:threads-max/2,硬限制:threads-max/2),线程的实现其实是一个轻量级的进程,所以线程也算进程

修改后重新登录即可生效

$ ulimit -n
65535

(2)

$ vim /etc/rc.local

ulimit -SHn 65535
ulimit -s 65535
#每次开机配置生效

3.控制进程发生段错误(Segmentation Fault)时生成 coredump 文件。

$ ulimit -c unlimited
#不限制 core 文件大小

$ ulimit -c 1000
#指定修改 core 文件的大小 1000K,默认为 0

4.设置进程的栈大小没有限制。

$ ulimit -s unlimited

Over~

版权协议须知!

本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意

1314 0 2019-06-14


分享:
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif
博主卡片
林里克斯 博主大人
一个致力于Linux的运维平台
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。

现在时间 2024-12-28

今日天气
站点统计
  • 文章总数:241篇
  • 分类总数:29个
  • 评论总数:12条
  • 本站总访问量 353176 次

@奥奥

@Wong arrhenius 牛比

@MakerFace 厉害了!