转自:https://blog.csdn.net/qq_20553613/article/details/106672319
1.介绍
coredump指的是应用程序因为各种原因导致异常终止时,操作系统将应用程序的异常发生时的状态信息记录为一个coredump的文件。一个coredump文件主要包含了应用程序的内存信息、寄存器状态、堆栈地址、函数调用上下文。通过该文件,可以确定程序异常发生时的调用位置,如果是堆栈溢出,还需分析多层函数的调用信息。
2.原因
2.1 内存访问越界
- 数组下标越界
- 超出动态(malloc/new)内存申请范围
- 字符串没有结束符,一些函数依赖于字符串结束符,如 strcpy、strcmp、sprintf
2.2 访问非法指针
- 空指针(未申请内存)
- 野指针(已释放内存)
- 重复释放指针(内存)
- 指针强制转换,指针强制转换需特别谨慎,可能因为对齐、起始地址等问题引起内存访问错误
2.3 堆栈溢出
分配大量局部变量、多重函数调用、较深的函数递归等可能导致堆栈溢出
2.4 多线程访问
- 调用不可重入函数
- 共享数据未互斥访问
3.开启
"ulimit -c"命令,查看是否开启,返回0表示未开启coredump记录功能。
:~$ ulimit -c; unlimited
可以使用“ulimit -c [size]”
命令指定记录coredump文件的大小,即是开启coredump记录。执行“ulimit -c unlimited”
设定,设置不限定大小。
通过配置文件永久设置,在"/etc/profile"
文件增加" ulimit -c unlimited "
。
ulimit命令:
$ ulimit -a core file size (blocks, -c) unlimited //-c <core最大值>:设定core文件的最大值,单位为块(block) data seg size (kbytes, -d) unlimited //-d <数据节段大小>:进程数据段最大值,单位为KB scheduling priority (-e) 0 // file size (blocks, -f) unlimited //-f <文件大小>:进程可创建最大文件值,单位为块(block) pending signals (-i) 1029615 max locked memory (kbytes, -l) 64 //-l <内存大小>: 可加锁内存大小,单位 为KB max memory size (kbytes, -m) unlimited //-m <内存大小>:指定可使用内存的上限,单位为KB open files (-n) 1000000 //-n <文件数目>:进程最大可打开的文件数(文件描述符数目) pipe size (512 bytes, -p) 8 //-p <缓冲区大小>:管道缓冲区的大小,单位为KB POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 // -s <堆栈大小>:线程最大堆栈大小,单位为KB cpu time (seconds, -t) unlimited //-t <cpu时间>:cpu最大占用时间,单位为秒 max user processes (-u) 1029615 //-u <进程数目>:用户可创建的最大进程数 virtual memory (kbytes, -v) unlimited //-v <虚拟内存大小>:进程最大可用虚拟内存,单位为KB file locks (-x) unlimited
标签:KB,ulimit,coredump,unlimited,了解,内存,size From: https://www.cnblogs.com/BlueBlueSea/p/16839814.html