169 похожих чатов

Господа, может подскажите, куда копать. Есть бэк на Ларе (nginx +

php-fpm), который коннектится с Постгресс базой на другом сервере и делает запросы к другому внутреннему Апи, из которого тоже получает данные.
Вчера в один прекрасный момент PHP начал висеть.

Стал разбираться - количество соединений с базой стало превышать 100 и пошли ошибки в Постгресс базе:
FATAL: terminating connection due to administrator command

увеличил лимит соединений до 300, лог ошибок БД перестал заполняться, но PHP не полегчало

в логе php-fpm сегодня пошли ошибки вида
server reached pm.max_children setting (50), consider raising it

пробовал увеличить pm.max_children setting до 100 - не помогло

в логе nginx'а на все эти вещи ошибки
upstream timed out (110: Connection timed out) while reading response header from upstream

По access-логам nginx'а посмотрел количество запросов - в момент когда база упала всплеска запросов нет.

Попробовал посмотреть как выполниться файлик с кодом <?php echo 'ok'; - он то миллисекунд обрабатывается, до 20+ секунд.

Насколько я понимаю, бэк на Ларе где то стал медленно работать, и вешать таким образом весь PHP-код?
Бэк на двух серверах, а перед ними ещё балансер стоит, но вряд ли дело в балансере, т.к. картинки в любом случае быстро отдаются, а PHP висит.

20 ответов

58 просмотров

может DOS атака просто?

Den- Автор вопроса
Sergey Shitikov
может DOS атака просто?

в access-логе же количество запросов бы выросло? А оно в тот час и потом больше не стало(

лимиты расставляй на соединения (timeout и connect_timeout), с базой, со сторонним API так вообще обязательно и тогда уже сможешь понять где проблема

Den- Автор вопроса
Egor Gruzdev
лимиты расставляй на соединения (timeout и connect...

Да, добавлю. Логгировались только ответы от внутреннего апи, а оно после апдейта стало подтормаживать. В итоге запросы которые отрабатывались за миллисекунды-секунду стали висеть в ожидании ответа до 60 секунд, держа коннекты с постгресс базой. Видимо поэтому 100 коннэктов перестало хватать. Увеличение лимита соединений показало другое слабое место - количество php-fpm процессов в 50. Увеличение до 100 проблему не решило, но с таким лимитом в логе появились таймауты запросов уже к внутреннему апи.

Den- Автор вопроса

Да, конечно

Den
Да, конечно

Запррсы в базу нормально работают, если не с приложения слать ?

Den- Автор вопроса
E V.
Запррсы в базу нормально работают, если не с прило...

К постгрессу у меня есть доступ - открыл логи увидел проблемы, а к внутреннему апи только курл. По итогу тюнинга пыхи начали висеть уже курл-запросы из консоли. Да и без тюнинга подвисали, просто до админов сразу не достучался - думал они что то делают.

Den
К постгрессу у меня есть доступ - открыл логи увид...

Я к тому, что надо выяснить на каком участке затык ) Может условно у тебя код получает данные не только от базы, а от какого то внешнего сервиса, типо рэдиса или по апи вообще с другого ресурса и там проблема, а ты по таймауту не рвешл соединение...но все таки наверное тогда в базе проблема и в пыху лезть пока рано

Den
К постгрессу у меня есть доступ - открыл логи увид...

Потыкайте курлом в апишку примерно в такой конструкции: curl -s --connect-timeout 5 -w "time_namelookup: %{time_namelookup}, time_connect: %{time_connect}, time_appconnect: %{time_appconnect}, time_pretransfer: %{time_pretransfer}, time_redirect: %{time_redirect}, time_starttransfer: %{time_starttransfer}, time_total: %{time_total}\n" -o /dev/null `https://example.com`

Den- Автор вопроса
Georgy
И скиньте вывод)

Да, именно так и делал и увидел проблемы в ней) Просто админы апи перед этим сказали у нас проблем нет. Оказалось всё-таки есть (

Den- Автор вопроса
Georgy
А что именно грустит? Резолв имени?

Внутреннее апи подвисает.

Den- Автор вопроса
Den
Нет.

Эх.. Не на докере крутит аппликуху свою?

Den- Автор вопроса
Georgy
Эх.. Не на докере крутит аппликуху свою?

Этого уже не знаю, оно ещё дальше взаимодействует с другой внутренней инфраструктурой. Да и подвисать стали разные запросы к этому апи, поэтому тоже не сразу понял в чем дело.

Den
Этого уже не знаю, оно ещё дальше взаимодействует ...

Просто если в контейнере на альпине крутится, то welcome to hell. Там просто прекраснейше испоганена сеть.

Den
Нет)

Ну тогда пинайте админов, что то резко простое в голову не идёт)

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта