Używam maszyny opartej na otwartym kodzie źródłowym (RHEL 6.2) z oprogramowaniem SIEM. Kiedy uruchamiam top
polecenie, widzę postgres
i postmaster
oba z 96% użyciem procesora. Czy istnieje sposób na sprecyzowanie lub sprawdzenie, co powoduje gromadzenie się tych usług?
postgresql
asadz
źródło
źródło
postgress
ISpostgres
i po prostu skopiowane go ręcznie.Odpowiedzi:
Można dopasować określony identyfikator zaplecza Postgres do identyfikatora procesu systemowego za pomocą
pg_stat_activity
tabeli systemowej.SELECT pid, datname, usename, query FROM pg_stat_activity;
może być dobrym punktem wyjścia.Gdy wiesz, jakie zapytania są uruchomione, możesz dalej badać (
EXPLAIN
/EXPLAIN ANALYZE
; sprawdź blokady itp.)źródło
WHERE
klauzuli, ale jeśli nie masz ogromnej liczby PID, to tak samo łatwe do przeszukania pełnego wyniku. Podręcznik Postgres zawiera dodatkowe informacje na temat tego, z czego możesz się wydostaćpg_stat_activity
, a także inne tabele gromadzące statystyki (które mogą ci pomóc, jeśli twoim problemem nie jest zapytanie użytkownika).Miałem ten sam problem. Postgresql jest ustawiony na AWS RDS i miał 100% wykorzystania procesora nawet po zwiększeniu instancji. Debugowałem za pomocą metody pokazanej tutaj i jedna z tych metod działała dla mnie.
Najdłużej sprawdzałem, czy zapytanie jest uruchomione i dowiedziałem się, że niektóre zapytania utknęły i działały od ponad 3-4 godzin. Aby sprawdzić, od jakiego czasu zapytanie jest uruchomione, uruchom następującą komendę:
Jeśli jest to więcej niż godzina, to jest to problem. Zabij połączenie długo działające i ogranicz maksymalny wiek połączenia od strony aplikacji.
źródło
Jeśli tak naprawdę postmaster używa całego tego procesora, prawdopodobnie masz problemy z blokadą, prawdopodobnie z powodu bardzo wysokiego poziomu
max_connections
. W takim przypadku rozważ obniżeniemax_connections
i użycie puli połączeń.W przeciwnym razie: Szczegóły proszę. Pełna wydajność
top -b -n 1
na początek.źródło