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.