在自己服务器上跑深度学习paper附带的源码(代码无问题),之前使用了Ctrl+z强行停止,再次训练时发生**“段错误 (核心已转储)”**问题。
在终端输入:ulimit -c命令,查看core file大小的配置情况。
如果输出0,则表示系统关闭了dump core。在终端输入:ulimit -c unlimited将core文件上限设置为无限制。注意:上述直接在命令行打开dump core的方法只对当前shell进程有效,如果想一劳永逸,可以在~/.bashrc的最后一行加入:ulimit -c unlimited。
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)。
在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的错误往往与指针操作相关。
ulimit -a用来显示当前的各种用户进程限制。 Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况。 设置个Linux用户的最大进程数,一些需要设置为无限制: 数据段长度:ulimit -d unlimited 最大内存大小:ulimit -m unlimited 堆栈大小:ulimit -s unlimited
我们在用ulimit -c unlimited这个命令的时候主要是为了产生core文件,就是程序运行发行段错误时的文件。
产生**“段错误 (核心已转储)”**的原因还有很多,这只是我遇到的情况,其他情形再次遇到会继续补充。
[1] 博客园:ubuntu段错误(核心已转储) [2] 博客园:ulimit -c unlimited