MogDB使用Systemd系统服务自启问题
原作者:何放
问题由来是我们发现MogDB数据库日志频频出现的报错:
[BACKEND] LOG: out of file descriptors: Too many open files; release and retry [BACKEND] LOG: could not open temporary statistics file "pg_stat_tmp/pgstat.stat": Too many open files [BACKEND] LOG: out of file descriptors: Too many open files; release and retry [BACKEND] LOG: could not open temporary statistics file "pg_stat_tmp/pgstat.stat": Too many open files [BACKEND] LOG: count not accept new connection: Too many open files
复制
字面意思理解就是,打开文件过多,要求释放再尝试。日志报上述情况,是从最近的一次服务器重启之后,数据库以开机自启动的方式运行,启动脚本通过Systemctl服务配置的。
让我们想到查看文件最大open file限制,和数据库进程打开文件数。
[omm@node1 ~]$ ps -ef|grep mogdb omm 1298 1 2 13:15 ? 00:03:52 /dbdata/app/mogdb/bin/mogdb -D /dbdata/data [omm@node1 ~]$ lsof -p 1298 |wc -l 1038 [omm@node1 ~]$ 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) 62936 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1000000 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
复制
通过进程号查询得出,当前MogDB进程真实使用的大小为1038,ulimit -a中open files为1000000,其中肯定有问题,同时查看临时文件数和临时文件大小。
postgres=# select temp_files,temp_bytes/1024/1024/1024 from dbe_perf.stat_database; temp_files | temp_bytes ------------+-------------- 0 | 0 0 | 0 85195 | 120819658163 0 | 0 (4 rows) postgres=# show temp_file_limit; temp_file_limit ----------------- -1 (1 row) postgres=# show max_files_per_process; max_files_per_process ----------------------- 100000 (1 row) 检查/etc/security/limits.conf,参数均已设置正确。
复制
这些均已排查,不存在问题,但更根据同样的MogHA自启脚本,发现设置有所不同。
[Unit] Description=High Avilable service for MogDB or openGuass After=network.target remote-fs.target nss-lookup.target [Service] Environment=GAUSSHOME=/dbdata/app/mogdb Environment=PGDATA=/dbdata/data Environment=LD_LIBRARY_PATH=/dbdata/app/mogdb/lib:/dbdata/app/tools/lib: LimitAS=infinity LimitRSS=infinity LimitCORE=infinity LimitNOFILE=1000000 LimitNPROC=65536 Type=simple User=omm WorkingDirectory=/dbdata/app/mogha ExecStart=/dbdata/app/mogha/prod_venv/bin/supervisord -c /dbdata/app/mogha/supervisord.conf KillSignal=SIGTERM TimeoutStopSec=5 KillMode=process PrivateTmp=false [Install] WantedBy=multi-user.target
复制
自启脚本中添加了LimitNOFILE=1000000,同样的MogDB自启脚本却没设置,进而注意力转向查看进程limits数。
[omm@node1 ~]$ ps -ef|grep mogdb omm 1298 1 2 13:15 ? 00:03:52 /dbdata/app/mogdb/bin/mogdb -D /dbdata/data omm 11922 11786 0 15:39 pts/0 00:00:00 grep --color=auto mogdb [omm@node1 ~]$ cat /proc/1298/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size unlimited unlimited bytes Max resident set unlimited unlimited bytes Max processes 62906 62906 processes Max open files 1024 524288 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 62906 62906 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
复制
上述Max open files,Soft Limit为1024,Hard Limit为524288。打开文件数超过Hard Limit值就会影响数据库进程。
如果使用init脚本手动启动数据库,则数据库进程将继承修改后限制,但如果数据库是在boot时启动或由类似systemd的程序启动,则不会。对于有“/etc/default/service”文件的Debian系统,有“/etc/sysconfig/service”文件的RedHat系统。在运行守护程序之前,这些文件由init脚本获取。将ulimit-s unlimit或类似这样的内容添加到这些文件中。这些限制将应用于init脚本外壳,并将影响数据库进程。数据库恢复正常得手动重启。
gs_om -t restart
复制
获取MogDB进程,查询使用大小
[omm@node1 ~]$ ps -ef|grep mogdb omm 57142 1 5 14:06 pts/1 00:06:54 /dbdata/app/mogdb/bin/mogdb -D /dbdata/data omm 66867 54676 0 16:21 pts/1 00:00:00 grep mogdb [omm@node1 ~]$ cat /proc/57142/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size unlimited unlimited bytes Max resident set unlimited unlimited bytes Max processes unlimited unlimited processes Max open files 1000000 1000000 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 62926 62926 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
复制
MogDB进程最大打开文件数1000000及正常。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
TA的专栏
热门文章
我的故障分析及处理思路分享(李真旭)
2020-10-22 11036浏览
公共子表达式消除(Common Subexpression elimination,CSE)
2020-08-26 6174浏览
Oracle数据库的跟踪和分析方法
2020-10-02 5026浏览
2.5.9使用systemd管理MySQL服务器
2020-10-20 4508浏览
初探华为云GaussDB (for MySQL)
2020-12-11 3846浏览
最新文章
28.4.4 INFORMATION_SCHEMA INNODB_BUFFER_POOL_STATS 表
2024-09-29 101浏览
28.4.3 INFORMATION_SCHEMA INNODB_BUFFER_PAGE_LRU 表
2024-09-29 61浏览
28.4.2 INFORMATION_SCHEMA INNODB_BUFFER_PAGE 表
2024-09-29 58浏览
28.4.1 INFORMATION_SCHEMA InnoDB 表参考
2024-09-29 63浏览
28.3.50 INFORMATION_SCHEMA VIEW_TABLE_USAGE 表
2024-09-29 67浏览