银河麒麟V10中修改堆栈大小需区分临时与永久方式:临时用ulimit -s 65536(单位KB,仅当前会话生效);永久修改需编辑/etc/security/limits.conf添加软硬限制,或为systemd服务单独配置LimitSTACK=67108864字节,并重启服务验证。

银河麒麟V10系统中,当运行Java大型应用、Python递归深度较大程序或调试多线程C++服务时,常因默认堆栈限制过小(通常8MB)触发“Segmentation fault”或“stack overflow”错误,必须修改内核堆栈限制才能稳定运行。
临时修改当前会话的堆栈大小
步骤一:打开终端,执行以下命令查看当前限制值:
ulimit -s
步骤二:将堆栈上限设为64MB(单位为KB),立即生效:
ulimit -s 65536
这一步仅对当前shell及其子进程有效。若新开一个终端窗口或重新登录,该设置即丢失。不要在后台服务脚本中依赖此方式——systemd服务默认不继承交互式shell的ulimit值。
永久修改所有用户的默认堆栈限制
方法一:通过limits.conf全局配置(推荐)
第一步:用root权限编辑系统级资源限制文件:
sudo vim /etc/security/limits.conf
第二步:在文件末尾新增两行,设置软硬限制均为64MB:
* soft stack 65536
* hard stack 65536
【*表示对所有用户生效;若只针对特定用户(如appuser),请将*替换为实际用户名】
第三步:保存退出后,必须注销当前图形会话并重新登录,或重启终端模拟器,新限制才会加载。仅重启终端窗口(如关闭再打开gnome-terminal)不足以触发limits重载。
方法二:针对systemd服务单独配置(适用于后台守护进程)
若修改的是nginx、java服务等由systemd管理的进程,limits.conf对其无效。需单独配置service单元文件:
sudo systemctl edit nginx.service
在打开的编辑器中输入:
[Service]
LimitSTACK=67108864
该值单位为字节,67108864 = 64MB。保存后执行sudo systemctl daemon-reload → sudo systemctl restart nginx,新堆栈限制即刻生效。
验证堆栈限制是否真正应用
执行 ulimit -s 查看当前shell值;
对systemd服务,运行 sudo systemctl show nginx.service | grep LimitSTACK 确认输出为“LimitSTACK=67108864”;
若仍显示“unlimited”或旧数值,说明配置未被读取——常见原因是limits.conf中同一参数被多次定义,后出现的条目会覆盖前面的,务必检查文件中是否存在重复的stack行。















