最近在跑磁流体动力学模拟代码,因为涉及到大量的数据,代码要求较大的栈空间,默认的8192kb不够用,故希望将其改为unlimited
,理论上在ubuntu下使用命令
$ ulimit -s unlimited
然而执行命令出现如下错误:
-bash: ulimit: stack size: cannot modify limit: Invalid argument
搜索后发现这可能是WSL的Bug,目前Github上的issues给出几种解决方案:
方案一:首先用su
命令切换到root用户,然后通过命令usermod -aG sudo $USER_NAME
将非root用户USER_NAME
添加到sudo组,然后再用命令su $USER_NAME
切换回原用户即可使用上述命令修改栈空间了,但这种方法的缺点是每次打开新的shell都要重新操作一遍。
方案二:直接执行如下命令:
sudo prlimit --stack=unlimited --pid $$; ulimit -s unlimited
为了方便,可以将该命令写入.bashrc
,但是这样每次打开新的shell都要输入一遍密码,略有不便,但目前还没有找到更好的解决方法,姑且使用方案二修改栈空间,修改后结果如下:
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7823
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) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) 7823
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可以看到stack size
已经变为unlimited
,之前出现内存错误的代码也可以正确地跑起来了。