0

timescaledb16.04 Linux ボックスに PostgreSQL (v9.6) の拡張機能 (v.5.0)をインストールしたところ、Postgres プロセスが 100% の CPU を占有していることがわかります。

topコマンドの結果は次のとおりです。

PID   USER      PR  NI    VIRT    RES    SHR S %CPU %MEM   TIME+   COMMAND
19885 postgres  20   0  192684   3916   1420 S 98.3  0.1   5689:04 x3606027128                                     

クエリを実行するSELECT pid, datname, usename, query FROM pg_stat_activityと、2 つの奇妙なクエリが見つかりました

pid   datname   username  query
19882 postgres  postgres  select Fun013301 ('./x3606027128 &')
19901 postgres  postgres  select Fun013301 ('./ps3597605779 &')

関数Fun013301は postgres データベースに存在しません。./x3606027128何のコマンドか分からない!?

4

1 に答える 1

2

同様の問題がありました。これは、一部のトランザクションがスタックして長時間実行されていたことが原因でした。したがって、CPU 使用率は常に 100% でした。次のコマンドは、最も長く実行されている接続を見つけるのに役立ちました。

SELECT max(now() - xact_start) FROM pg_stat_activity
                           WHERE state IN ('idle in transaction', 'active');

このコマンドは、接続が実行されてからの時間を表示します。この時間は 1 時間を超えてはなりません。そのため、長時間実行されていた、または任意の時点でスタックしていた接続を切断すると、うまくいきました。この投稿に従って、問題を監視して解決しました。Postには、この状況を監視するための便利なコマンドが多数含まれています。

于 2019-08-27T05:53:24.007 に答える