forrtl: severe(174):SIGSEGV,segmentation fault occurred 问题解决 (ulimit -s 设置堆栈最大值)

之前用VASP计算过程中出现forrtl: severe(174):SIGSEGV, segmentation fault occurred 的错误,如下图:
forrtl: severe(174):SIGSEGV,segmentation fault occurred 问题解决 (ulimit -s 设置堆栈最大值)_第1张图片
这是由于我们运行程序较大,而Linux系统初始的堆栈大小(stack size)太小的缘故。我们只要将其调大,一般把stack size设置成256M或者没有限制,这样就没有段错误了!命令为:
ulimit -s 262140

ulimit -s unlimited
但是这样只是临时的,要永久生效需要修改两个文件:
1) 在/etc/security/limits.conf 中加上:
* soft stack unlimited
* hard stack unlimited
其中:
*: 所有文件生效
stack: 堆栈最大值
unlimited: 没有限制,也可以根据自己电脑情况改成数字(例如262140)
2) 在/etc/pam.d/login文件中添加:
session required /lib/security/pam_limits.so
其中:
/lib/security/pam_limits.so 为自己电脑中的位置,32位中为/lib 64位中改为/lib64

注:由于博主自己也是刚开始学习,对linux系统并不是特别熟悉,以上内容是自己试验的结果,仅供大家参考,欢迎各位大神批评指正。

你可能感兴趣的:(forrtl: severe(174):SIGSEGV,segmentation fault occurred 问题解决 (ulimit -s 设置堆栈最大值))