limit设置

如果采用Linux操作系统,在安装 SequoiaDB 产品之后,建议根据实际情况配置数据库进程的 ulimit,以保障系统的稳定高效运行。

调整 ulimit

配置安装目录下的 conf/limits.conf 文件,修改后需重启服务才能生效。

  1. core_file_size=0
  2. data_seg_size=-1
  3. file_size=-1
  4. virtual_memory=-1
  5. open_files=60000
  • 配置描述:

    配置项描述默认值
    core_file_size出现故障时产生 core 文件,用于故障诊断,生产系统建议关闭。0
    data_seg_size进程所允许分配的数据段大小。-1(表示unlimited)
    file_size进程所允许寻址的文件大小。-1(表示unlimited)
    virtual_memory进程所允许最大虚拟内存寻址空间限制。-1(表示unlimited)
    open_files进程允许的最大文件句柄数。60000

    Note:

    • conf/limits.conf 只能配置以上5个参数,其他 ulimit 值,如最大进程数,由当前 Linux Shell 中的 ulimit 值决定。
    • service sdbcm sdbcm、bin/sdbcmart、bin/sdbstart 启动节点和 sdbcm 时,均会引用该配置文件中的配置。
    • 如果不想使用 conf/limits.conf 中的配置,可使用 -i 参数:bin/sdbcmart -i ; bin/sdbstart -i 。
    • 创建节点时,新节点的 ulimit 值跟随 sdbcm 进程的 ulimit 值 。
  • 常见错误:

    非 root 用户设置 ulimit 时,一般情况下,不允许突破 hard limit 的限制。

    如果 conf/limits.conf 配置的值大于当前用户的 hard limit,则会报错。这时需提高 hard limit,或者使用 -i 参数。

    1. $ ./bin/sdbstart -p 11810
    2. Error: Failed to set ulimit[open files] to [60000]
    3. Error: start sequoiadb will set ulimit by file[conf/limits.conf], if you want to set ulimit by current terminal, please use parameter '-i'.
    4. $
    5. $ # hard limit 值为1024,大于设置的60000
    6. $ ulimit -Hn
    7. 1024

查看ulimit

查看数据库进程的ulimit

  1. $ cd /opt/sequoiadb
  2. $
  3. $ ./bin/sdblist
  4. sequoiadb(11800) (20111) C
  5. sequoiadb(11830) (20129) D
  6. sequoiadb(11810) (20132) S
  7. $
  8. $ # 查看协调节点进程20132的ulimit信息
  9. $ cat /proc/20132/limits
  10. Limit Soft Limit Hard Limit Units
  11. Max cpu time unlimited unlimited seconds
  12. Max file size unlimited unlimited bytes
  13. Max data size unlimited unlimited bytes
  14. Max stack size 8388608 unlimited bytes
  15. Max core file size 0 0 bytes
  16. Max resident set unlimited unlimited bytes
  17. Max processes 23711 23711 processes
  18. Max open files 60000 60000 files
  19. Max locked memory 65536 65536 bytes
  20. Max address space unlimited unlimited bytes
  21. Max file locks unlimited unlimited locks
  22. Max pending signals 23711 23711 signals
  23. Max msgqueue size 819200 819200 bytes
  24. Max nice priority 0 0
  25. Max realtime priority 0 0
  26. Max realtime timeout unlimited unlimited us

也可通过节点健康检测快照查询各个节点的ulimit信息

  1. > db=new Sdb( 'localhost: 11810' )
  2. > db.snapshot( SDB_SNAP_HEALTH )
  3. {
  4. ...
  5. "Ulimit": {
  6. "CoreFileSize": -1,
  7. "VirtualMemory": -1,
  8. "OpenFiles": 1024,
  9. "NumProc": 23948,
  10. "FileSize": -1
  11. }
  12. ...
  13. }
  14. ...