调试代码的时候,经常出现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中不允许这个设置为这个值。