linux查找postgre进程,postgresql数据库某一个进程占用大量CPU,问题排查详解
postgresql某一個進程占用大量
CPU,問題排查,目前服務器cpu為4核,內存8G
1.查下是不是我們的業務SQL
SELECT
procpid,
START,
now() - START AS lap,
current_query
FROM (SELECT
backendid,
pg_stat_get_backend_pid(S.backendid)??????????? AS procpid,
pg_stat_get_backend_activity_start(S.backendid) AS START,
pg_stat_get_backend_activity(S.backendid)?????? AS current_query
FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS S) AS S
WHERE current_query <> '' AND procpid = 35500
ORDER BY lap DESC;
2.linux root shell下面執行updatedb
updatedb 是重建本地文件索引,沒有影響
3.locate x2fca82f6
x2fca82f6是占用大量CPU的進程名稱,大概是99%左右。
4.查詢進程文件所在的目錄。
find / -name x2fca82f6
/tmp/x2fca82f6 文件所在的目錄和文件名。
5.cat /tmp/x2fca82f6
打開后里面是亂七八糟的內容,該文件很可疑!!!
6.嘗試先修改這個文件的執行權限,讓他不可運行,然后殺進程,看看對業務有沒有影響。
在tmp下面打chmod 600 x2fca82f6 修改成不可修改,該執行文件變成白色。
7.執行ps -ef | grep x2fca82f6???? 返回進程號35500。
用root用戶執行kill語句 kill -9 35500,cpu立馬降下來了,變為0.2%左右。
8.CPU肯定是恢復了,現在只需要確認對業務有沒有影響就行了,執行一下業務sql,看看剛剛殺的進程對業務是否有影響。
數據庫沒有報錯,但是cpu又上來了。
9.在tmp下面mkdir bak,創建一個備份文件夾,然后把那個進程文件剪切進去
命令:mv x2fca82f6 bak
11.繼續操作業務sql,看看還能起來不,或者數據庫是否報錯,后來看都正常。
過了一會發現cpu又上來了。
12.猜測有程序能預編譯這個東西...
13.查詢下后臺在運行的sql語句吧,能自動預編譯應該是PGSQL自己編譯的程序
發現沒有業務sql,都是一些系統sql
SELECT
procpid,
START,
now() - START AS lap,
current_query
FROM (SELECT
backendid,
pg_stat_get_backend_pid(S.backendid)??????????? AS procpid,
pg_stat_get_backend_activity_start(S.backendid) AS START,
pg_stat_get_backend_activity(S.backendid)?????? AS current_query
FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS S) AS S
WHERE current_query <> ''
ORDER BY lap DESC;
14.建一個查詢死鎖和慢sql的視圖,sql語句太大了,就不列出來了。
建好之后發現沒有查出數據。
15.執行如下sql語句
select?nspname?from?pg_namespace?where?nspname?like?'pg_temp%'
發現也沒有數據,就算了。
16.執行如下sql,有就刪除,沒有就算了
drop?schema?if?exists?pg_temp_1?cascade;
17.查看一下數據庫連接數
select count( * ) from pg_stat_activity where state not like '%idle';
返回1,說明正常。
18.猜測postgresql數據庫沒有安裝好,或者是配置有問題。
19.執行如下sql
select * from pg_stat_user_tables where n_live_tup > 100000 and seq_scan > 0 order by seq_tup_read desc limit 10;
發現返回數據為空。
20.最后升級了服務器的cpu和內存到8核和32G,然后重啟了該數據庫服務器,后面cpu一直都是0.2%左右,一直到第二天早上都很穩定。
21.進入/tmp/目錄,把文件改名
mv x2fca82f6 xx2fca82f6_bak
22.ps auxw |? grep postgres | grep -- -D????? 返回結果如下:
postgres 45123? 0.0? 0.0 340208 15396 ???????? S???? 2017?? 0:06 /usr/pgsql-9.5/bin/postgres -D /var/lib/pgsql/9.5/data
24.cd pg_log
里面都是
postgresql日志文件
25.分析日志里面文件里面的內容來查找端倪,完事。
26.本文為蝦米哥原創,轉載請注明來源地址www.itxm.net
27.本文原文鏈接:http://www.itxm.net/a/shujuku/2018/0102/1481.html,轉載請注明來源地址,謝謝!
轉載請注明來源網站:www.itxm.cn謝謝!
總結
以上是生活随笔為你收集整理的linux查找postgre进程,postgresql数据库某一个进程占用大量CPU,问题排查详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 古代朋友的雅称
- 下一篇: 超甜的情侣网名112个