Postgres ve postmaster servislerinden yüksek CPU kullanımında sorun giderme?


27

SIEM yazılımı çalıştıran açık kaynaklı (RHEL 6.2) tabanlı bir makine kullanıyorum. Ben çalıştırdığınızda topkomut, görüyorum postgresve postmaster% 96 CPU kullanımı ile hem. Bu hizmetin yığılmasına neyin sebep olduğunu bulmak veya tespit etmek için bir yol var mı?


2
"RHCE 6.2"? "RHEL 6.2" mi demek istiyorsun? Ben varsayalım postgressIS postgresve sadece elle kopyaladık.
Craig Ringer

Yanıtlar:


29

pg_stat_activitySistem tablosunu kullanarak belirli bir Postgres arka uç kimliğini sistem işlem kimliğiyle eşleştirebilirsiniz .

SELECT pid, datname, usename, query FROM pg_stat_activity;iyi bir başlangıç ​​noktası olabilir.
Hangi sorguların çalıştığını öğrendikten sonra daha fazla araştırma yapabilirsiniz ( EXPLAIN/ EXPLAIN ANALYZE; kilitleri kontrol et, vb.).


Bu tam sorgu mu, db'ye siem üzerinde çalışan sec adamı, select deyiminiz, pid'i üst komuttan beslemek zorunda mıyım?
asadz

1
@ asadz no, kesildi (şimdi düzeltildi) - Belirli bir PID'niz varsa ve neyi çalıştırdıklarını görmek istiyorsanız, onları bir WHEREcümle ile izole edebilirsiniz , ancak çok sayıda PID'niz yoksa Tam çıktıyla arama yapmak kolaydır. Postgres kılavuz çıkmak ne hakkında daha fazla ayrıntı vardırpg_stat_activity , hem de diğer istatistik-toplayıcı tabloları (Sorununuz varsa size yardımcı olabilecek değil bir kullanıcı sorgu).
voretaq7

Bu sorguyu çalıştırdığımda, şüphelendiğim bir PID yok
Fendi Tri Cahyono

İpucu için teşekkürler, son zamanlarda benzer bir konuyla karşılaştım ve SELECT * FROM pg_stat_activity;
Yao

14

Ben de aynı sorunu yaşıyordum. Postgresql, AWS RDS üzerine kuruludur ve örneği arttırdıktan sonra bile% 100 cpu kullanımına sahipti. Burada gösterilen yöntemle hata ayıkladım ve bu yöntemlerden biri benim için çalıştı.

En uzun süre çalışan sorguyu kontrol ettim ve belirli sorguların sıkışıp kaldığını ve 3-4 saatten uzun süredir çalıştığını gördüm. Sorgunun ne kadar süre çalıştığını kontrol etmek için aşağıdaki komutu çalıştırın:

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

Bu bir saatten fazla ise, sorun bu. Uzun süre çalışan bağlantıyı kesin ve uygulama tarafından bağlantının maksimum yaşını sınırlayın.


7

Bu gerçekten tüm bu CPU kullanan postacıysa, muhtemelen çok yüksek olması nedeniyle çekişme sorunlarını kilitlemeniz olasıdır max_connections. max_connectionsBu durumda, bir bağlantı havuzu indirmeyi ve kullanmayı düşünün .

Aksi takdirde: Detaylar lütfen. top -b -n 1Bir başlangıç ​​için tam çıkış .


bu mantıklı; siem analist tarafından çok fazla veriyi ileri geri sorgulamak için kullanıldığından; kilit durumunu kontrol edebileceğim bir yol var mı; veya ona atfedilen koşullar; ?
asadz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.