运行服务器程序经常会出现崩溃,而我们不可能一天24小时都等着他出现。在实际运行中也不能总是使用gdb启动,毕竟gdb绑定运行会消耗很大一部分性能。

不过linux系统在程序崩溃时会生成一个coredump文件,里面保存程序收到退出信号时的堆栈信息,对于调试c++程序是很有帮助的,ulimit命令就是设置程序崩溃时生成coredump文件的开关和大小。

使用命令在shell终端设置,只对当前终端有效,修改当前用户下配置文件,只对当前用户有效,修改etc下系统配置,对所有用户有效,这些都是通用的规律了。

使用命令gdb打开文件就可以调试查看崩溃的堆栈了,如果使用python调用的c++程序,打开core文件命令为gdb python core,使用c语言生产的coredump,打开命令为gdb c core,使用c++生成的coredump,打开命令为gdb cpp core。

查看当前生成core文件设置

ulimit -c

为0表示不生成core文件,非0的数字表示生成core文件大小,为unlimited表示不限制生成core文件大小。

ulimit -c 1024

表示设置core文件大小为1024kb,单位是kb。

ulimit -c unlimited

表示设置core文件大小不受限制。

顺便看看其他选项有什么用:

$ ulimit -h
-bash: ulimit: -h: 无效选项
ulimit: 用法: ulimit [-SHabcdefilmnpqrstuvxT] [limit]

输入ulimit -h和ulimit --help都提示无效的选项,下面出现了-SH两个大写的选项,还有一个-T也是大写的,还有其他的一串小写的选项,不过也不知道什么意思。

使用man ulimit看看

ULIMIT(3)                                                                            Linux Programmer's Manual                                                                           ULIMIT(3)NAMEulimit - get and set user limitsSYNOPSIS#include <ulimit.h>long ulimit(int cmd, long newlimit);DESCRIPTIONWarning: This routine is obsolete.  Use getrlimit(2), setrlimit(2), and sysconf(3) instead.  For the shell command ulimit(), see bash(1).The ulimit() call will get or set some limit for the calling process.  The cmd argument can have one of the following values.UL_GETFSIZEReturn the limit on the size of a file, in units of 512 bytes.UL_SETFSIZESet the limit on the size of a file.3      (Not implemented for Linux.)  Return the maximum possible address of the data segment.4      (Implemented but no symbolic constant provided.)  Return the maximum number of files that the calling process can open.RETURN VALUEOn success, ulimit() returns a nonnegative value.  On error, -1 is returned, and errno is set appropriately.ERRORSEPERM  A unprivileged process tried to increase a limit.ATTRIBUTESFor an explanation of the terms used in this section, see attributes(7).┌──────────┬───────────────┬─────────┐│Interface │ Attribute     │ Value   │├──────────┼───────────────┼─────────┤│ulimit()  │ Thread safety │ MT-Safe │└──────────┴───────────────┴─────────┘CONFORMING TOSVr4, POSIX.1-2001.  POSIX.1-2008 marks ulimit() as obsolete.SEE ALSObash(1), getrlimit(2), setrlimit(2), sysconf(3)COLOPHONThis  page  is  part  of release 4.04 of the Linux man-pages project.  A description of the project, information about reporting bugs, and the latest version of this page, can be found athttp://www.kernel.org/doc/man-pages/.Linux                                                                                       2015-03-29                                                                                   ULIMIT(3)

好像是一个系统接口函数说明,对我们没什么用,不过里面提到了getrlimit与setrlimit两个接口,这两个接口是编写c/c++程序可以用到的,他可以使用调用接口对运行程序修改值,不用修改配置也不影响其他的程序的限制。

不过可以通过ulimit -a这个命令来查看其他选项的用途,查看ulimit设置的所有系统限制:

$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 127350
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) 127350
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

上面列出了前面各个选项的意思,其中大写的-H和-S分别是系统硬性限制和用户软件限制,-T和-b不知道什么意思。

一般在当前目录生成名称为core的coredump文件,为了防止多次coredump生成时文件覆盖,通过查阅其他的资料,生成coredump文件的目录和命名格式都是可以修改的。

linux下开启程序崩溃生成core文件开关之ulimit详解相关推荐

  1. Linux进程最大socket数,Linux下高并发socket最大连接数所受的各种限制(详解)

    1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...

  2. linux如何确定共享库路径,摘录Linux下动态共享库加载时的搜索路径详解

    对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似"error while loading shared libraries"这样的错误,这是典型的因为需要的动态库不在动态链接器 ...

  3. linux 捕获sigsegv信息如何生成core文件,Linux下如何捕获SIGSEGV 的发生位置

    Linux下如何捕获SIGSEGV 的发生位置 发布时间:2008-04-23 01:28:28来源:红联作者:Mwany Linux下编程(尤其是服务端程序)若由于内存越界或其他原因产生" ...

  4. Linux环境崩溃生成core文件以及调试

    Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是 需要更改Linux设置,使程序崩溃时候产生core文件.然后gdb调试即可. 1产生core文件方法 产生 ...

  5. linux 捕获sigsegv信息如何生成core文件,[转]Linux下的段错误产生的原因及调试方法Core Dump...

    简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址. 一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由 ...

  6. linux下的挂载点和分区是什么关系(详解挂载点)

    百度定义: 挂载点实际上就是linux中的磁盘文件系统的入口目录,类似于windows中的用来访问不同分区的C:.D:.E:等盘符.其实winxp也支持将一个磁盘分区挂在一个文件夹下面,只是我们C:. ...

  7. Linux下获取详细硬件信息的工具:Dmidecode命令详解

    Dmidecode 这款软件允许你在 Linux 系统下获取有关硬件方面的信息.Dmidecode 遵循 SMBIOS/DMI 标准,其输出的信息包括 BIOS.系统.主板.处理器.内存.缓存等等.偶 ...

  8. 汇总 Linux下获取详细硬件信息的工具:Dmidecode命令详解

    Dmidecode 这款软件允许你在 Linux 系统下获取有关硬件方面的信息.Dmidecode 遵循 SMBIOS/DMI 标准,其输出的信息包括 BIOS.系统.主板.处理器.内存.缓存等等.偶 ...

  9. Linux下ps -ef和ps aux的区别及格式详解

    Linux下显示系统进程的命令ps,最常用的有ps -ef 和ps aux.这两个到底有什么区别呢?两者没太大差别,讨论这个问题,要追溯到Unix系统中的两种风格,System V风格和BSD 风格, ...

最新文章

  1. 信通院2018人工智能发展白皮书技术篇重磅发布
  2. python自学时间-Python中基本的日期时间处理的学习教程
  3. 鸿蒙系统第五批公测,鸿蒙系统即将迎来二轮公测,nova机型增添其中
  4. 数据库中范式的理解1NF、2NF、3NF
  5. mysql不同服务器数据库查询_不同服务器不同数据库两张表连接查询使用经验
  6. android studio真机模拟不能拍照_android和ios静态库的生成
  7. bilibili源码_bilibili源码泄漏后,程序员们从代码里扒出来的彩蛋
  8. PAT (Basic Level) Practice1029 旧键盘
  9. java面试基础_java面试之基础(总结)
  10. python 条件查询_Python SQLAlchemy 不确定条件查询
  11. 系统集成项目管理工程师有什么用?
  12. html等待,休眠代码,HTML DOM closest()用法及代码示例
  13. Android N - Data Saver
  14. 网络应用自建利器-Google AppEngine
  15. 【转载】VS2019使用技巧
  16. 工控安全PLC固件逆向一
  17. 初识C语言——冒泡排序法
  18. 菜鸡记录之初试自动更新,源码及出现的问题
  19. 【参赛作品12】基于华为云鲲鹏弹性云服务器部署openGauss数据库-实验
  20. 死锁问题的出现和解决

热门文章

  1. Java 面试知识点解析(五)——网络协议篇
  2. 机器视觉:Caffe Python接口多进程提取特征
  3. 3.6 Git 分支 - 变基
  4. Effective Java读书笔记七:泛型(部分章节需要重读)
  5. hadoop下实现kmeans算法——一个mapreduce的实现方法
  6. 那些计算机界的伟大女性
  7. 程序员面试题精选100题(15)-含有指针成员的类的拷贝[C/C++/C#]
  8. 自己动手实现山东大学QLSC_STU无线网络掉线后自动重连
  9. 学生档案管理系统(续)
  10. 信息系统项目管理师-风险管理知识点