【操作系统】Centos
【数据库版本】openGauss 3.1.0
【问题描述】使用gs_probackup远程备份opengauss数据库时,报内存问题,备份失败
Hey @wx, Welcome to openGauss Community.
All of the projects in openGauss Community are maintained by @opengauss_bot.
That means the developers can comment below every pull request or issue to trigger Bot Commands.
Please follow instructions at Here to find the details.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
Hi @wx, please use the command /sig xxx to add a SIG label to this issue.
For example: /sig sqlengine or /sig storageengine or /sig om or /sig ai and so on.
You can find more SIG labels from Here.
If you have no idea about that, please contact with @zhangxubo , @xiangxinyong .
相关可能原因:可能是内存不足或者进程数超限导致。
排查:
grep "Out of memory" /var/log/messages
sysctl kernel.pid_max
pstree -p | wc -l
相关问题请自行排查
此处的fork是有必要的。openGauss的pg_probackup工具,在执行远程备份时,需要在远端创建probackup agent进程,此处通过fork的方式,调用execvp接口,在远端启动agent线程。
我们需要远程执行二进制文件,需要类似有环境变量等方式,直接采用fork+execvp的方式,相对简单,调用后,本身进程占用内存也会被销毁。(函数在执行可执行文件时,会直接替换当前进程的代码和数据,这样可以保证执行的可执行文件与当前进程的环境完全一致,执行结果更加可靠。)
除此之外,启动后在需要远程备份时即会调用fork函数,本身占用内存较小。debug版本调试,在fork时内存大小仅大概在8M左右。
关于fork内存拷贝问题:操作系统通常会使用写时复制(Copy-On-Write,COW)技术来优化这一过程。在COW机制下,当父进程或子进程尝试修改它们的内存时,操作系统会立即复制该内存页,并将其分配给相应的进程,这样父进程和子进程之间的内存就不再共享了。这种机制可以减少内存的消耗,因为只有在需要时才会进行内存复制。
我们仅fork线程,没有对内存作过多修改。
登录 后才可以发表评论