![Postgres 进程产生并占用 CPU 资源](https://linux22.com/image/778596/Postgres%20%E8%BF%9B%E7%A8%8B%E4%BA%A7%E7%94%9F%E5%B9%B6%E5%8D%A0%E7%94%A8%20CPU%20%E8%B5%84%E6%BA%90.png)
答案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 如果您有理由怀疑存在入侵,尤其是主机和/或其服务可公开寻址/访问时,请认真考虑将主机及其服务视为已受到入侵,直到您能够合理地消除这种可能性。一个很好的开始参考可能是:我该如何处理受到感染的服务器?