Linux的ulimit

调试代码的时候,经常出现Segment fault,此时如果有core文件(核心转储)来分析,将会使代码调试变得十分方便。
让程序输出Core文件,需要使用ulimit命令。带着想深入了解的心情,学习了Linux下的ulimit命令。

Reason

Linux在系统相关的一些配置上进行了限制并设置了最大值,如系统文件描述符数量,最多的进程数,栈的大小等。通常来说,系统的通用设置将这些配置数设定在了合理的范围内,通常不会成为系统的瓶颈。但是出于某种原因,我们需要修改这些配置来实现我们想要的功能——如输出程序core文件,shadowsocks服务器调优等等——Linux 提供了ulimit命令来让我们调整这些配置的最大值。

查看所有配置选项

下面是mac下使用ulimit命令查看所有配置的输出结果

1
2
3
4
5
6
7
8
9
10
11
$ ulimit -a
-----------------
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-v: address space (kbytes) unlimited
-l: locked-in-memory size (kbytes) unlimited
-u: processes 709
-n: file descriptors 7168

通过输出我们可以看到内容包括

  • 配置的选项
  • 配置的所限制内容的名称
  • 配置的指标
  • 当前该配置的值

查看和设置相应配置的值

通过ulimit加上文中相应内容的选项,我们可以得到当前该配置的值。

1
2
3
4
$ ulimit -c
-------
# 查看core文件的大小限制
0

该配置表明,我们不输出core文件,
在配置后修添加值表明我们对该配置的修改

1
$ ulimit -c unlimited

在这里unlimited表明我们对生成的core文件大小没有限制。

注意

有些设置我们也需要注意,例如,系统同时打开的文件太多,会增加磁盘的负担,并且系统的性能也会因此降低。

在Linux中ulimit -n unlimited将会把file descriptors的数量设置在4096个。而mac中不允许这个设置为这个值。

Author: lisupy
Link: http://lisupy.github.io/2019/01/21/Linux的ulimit/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
支付宝打赏
微信打赏