Khắc phục sự cố sử dụng CPU cao từ các dịch vụ postgres và postmaster?


26

Tôi đang sử dụng máy dựa trên mã nguồn mở (RHEL 6.2) chạy phần mềm SIEM. Khi tôi chạy toplệnh, tôi thấy postgrespostmastercả hai với mức sử dụng CPU 96%. Có cách nào để xác định chính xác hoặc xem điều gì khiến các dịch vụ này chồng chất lên nhau không?


2
"6,2"? Bạn có nghĩa là "RHEL 6.2"? Tôi giả sử postgresspostgresvà bạn chỉ cần sao chép nó bằng tay.
Craig Ringer

Câu trả lời:


28

Bạn có thể khớp ID phụ trợ Postgres cụ thể với ID quy trình hệ thống bằng pg_stat_activitybảng hệ thống.

SELECT pid, datname, usename, query FROM pg_stat_activity;có thể là một điểm khởi đầu tốt.
Khi bạn biết những truy vấn nào đang chạy, bạn có thể điều tra thêm ( EXPLAIN/ EXPLAIN ANALYZE; kiểm tra khóa, v.v.)


Đây có phải là truy vấn chính xác không, tôi không quen lắm với db vì tôi là người bí mật làm việc trên siem, câu lệnh chọn của bạn, tôi có phải cung cấp cho nó từ lệnh không?
asadz

1
@asadz không, nó đã bị cắt ngắn (đã được sửa ngay bây giờ) - Nếu bạn có các PID cụ thể và muốn xem những gì chúng đang chạy, bạn có thể cách ly chúng với một WHEREmệnh đề, nhưng nếu bạn không có một số lượng lớn các PID dễ dàng tìm kiếm thông qua đầu ra đầy đủ. Hướng dẫn Postgres có thêm chi tiết về những gì bạn có thể rút rapg_stat_activity , cũng như các bảng thu thập số liệu thống kê khác (có thể giúp bạn nếu vấn đề của bạn không phải là truy vấn của người dùng).
voretaq7

Khi tôi thực hiện truy vấn này, không có PID nào mà tôi phải nghi ngờ
Fendi Tri Cahyono

Cảm ơn về manh mối, gần đây tôi đã gặp vấn đề tương tự và tìm ra lý do bằng cách sử dụng CHỌN * TỪ pg_stat_activity;
Yao

14

Tôi có những vấn đề giống nhau. Postgresql được thiết lập trên AWS RDS và nó đã sử dụng 100% cpu ngay cả sau khi tăng thể hiện. Tôi đã gỡ lỗi với phương thức hiển thị ở đây và một trong những phương pháp làm việc cho tôi.

Tôi đã kiểm tra truy vấn chạy trong thời gian dài nhất và biết rằng một số truy vấn nhất định đã bị kẹt và đang chạy từ hơn 3-4 giờ. Để kiểm tra xem truy vấn đang chạy bao nhiêu thời gian, hãy chạy lệnh sau:

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

Nếu điều này là hơn một giờ, thì đây là vấn đề. Giết kết nối chạy dài và giới hạn tuổi tối đa của kết nối từ phía ứng dụng.


7

Nếu đây thực sự là người quản lý bưu điện sử dụng tất cả CPU đó, thì bạn có thể gặp sự cố khóa, có thể là do rất cao max_connections. Xem xét hạ thấp max_connectionsvà sử dụng một pooler kết nối nếu đây là trường hợp.

Mặt khác: Chi tiết, xin vui lòng. Đầu ra đầy đủ top -b -n 1cho một sự khởi đầu.


Điều này có ý nghĩa; vì siem được nhà phân tích sử dụng để truy vấn nhiều dữ liệu qua lại; Có cách nào tôi có thể kiểm tra trạng thái khóa; hoặc các điều kiện quy cho nó; ?
asadz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.