Postgres 进程产生并占用 CPU 资源

Postgres 进程产生并占用 CPU 资源

你知道为什么 PostgreSQL 会使用随机命令/名称启动单个进程,然后消耗 CPU 和内存吗?

终止该进程不会影响正在使用 PostgreSQL DB 的 Django 应用程序。

进程重生(终止后)之间的间隔大约为 20 分钟到一个小时。

在此处输入图片描述

在此处输入图片描述

答案1

要研究 PostgreSQL 进程,请考虑:

  • 捕获和检查更多ps输出;例如ps -eo pid,ppid,user,group,pcpu,pmem,stat,bsdstart,bsdtime,cmd,提供ppid和其信息,以及进程启动、累积 CPU 时间、命令参数等。
  • 捕获并检查lsof输出以确定这些进程可能打开了哪些文件和套接字(例如lsof -nP)。
  • 捕获并检查pg_catalog.pg_stat_activity视图以确定哪些进程代表 PostgreSQL 会话以及它们的当前/最后的查询是什么。
  • 捕获并检查pg_catalog.pg_locks视图以确定在当前流程事务中访问了哪些关系。
  • 使用 捕获并检查活动样本strace,这将揭示正在运行哪些系统调用以及正在传递哪些参数,例如文件访问(例如strace)。 PostgreSQL 文件节点通常很容易反转为它们所代表的关系(例如,参见 PostgreSQL 函数pg_filenode_relation())。
  • 考虑启动数据包捕获以尝试将网络活动(和源网络/地址)与进程创建/活动关联起来(例如tcpdump -i "$if" -s 0 -w "$pcap" port 5432)。

PS 如果您有理由怀疑存在入侵,尤其是主机和/或其服务可公开寻址/访问时,请认真考虑将主机及其服务视为已受到入侵,直到您能够合理地消除这种可能性。一个很好的开始参考可能是:我该如何处理受到感染的服务器?

相关内容