本文介绍由于 ulimit 配置不生效导致 OBServer 启动中途退出时,应该如何处理。
适用版本
OceanBase 数据库 V2.2.50 (不含 V2.2.50)以下的版本
问题现象
默认情况下,服务器默认的 ulimit 的栈大小为 8192。
通过安装脚本部署 OBServer 的过程中,OBServer 首次启动中途退出。使用 ulimit -a 查看栈大小配置,发现 stack size 的值为 1024,说明默认配置未生效,栈大小受到了操作系统的限制。
[admin@hostname /]$ ulimit -a
...
stack size (kbytes, -s) 1024
...
说明
OceanBase 数据库的主线程依赖 ulimit 配置,如果您的服务器配置较低,建议 stack size 配置不低于 4M,即不低于 4096。
此时,使用 admin 用户通过 ulimit -s 命令修改栈大小,操作系统报错 cannot modify limit: Operation not permitted。
可能原因
admin 用户 ulimit 配置未生效的原因可能是由于操作系统关闭了 PAM,PAM 用于限制登录用户的 ulimit 配置,如果不开启 PAM,则会使用 SSHD 的默认值(即 1024)。
操作系统报错 cannot modify limit: Operation not permitted 的问题是由于 admin 用户是通过 SSH 登录到物理机进行 ulimit 配置的修改,因此无法直接修改栈大小。
查看
/etc/security/limits.conf,检查文件配置。[root@hostname /]# cat /etc/security/limits.conf查看
/etc/ssh/sshd_config,发现 UsePAM 行被注释。... #UsePAM yes ...
解决方法
修改
/etc/ssh/sshd_config,删除#UsePAM yes行前的井号(#)。重启 sshd。
[root@hostname /]# /etc/init.d/sshd restart手动执行 ulimit 设置。
[root@hostname /]# ulimit -s 4096分别检查 root 用户与 admin 用户的 ulimit 配置是否正确。
[root@hostname /]# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 2062700 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 655360 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 4096 cpu time (seconds, -t) unlimited max user processes (-u) 165535 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited [root@hostname /]# su admin [admin@hostname /]$ ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 2062700 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 655360 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 4096 cpu time (seconds, -t) unlimited max user processes (-u) 165535 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited