Как побороть ошибку Resource temporarily unavailable у nginx?

Речь пойдет о комбинации nginx + php-fpm (на момент написания статьи версия php — 7.3)

Столкнулся с проблемой, что при небольшой нагрузке на сервер все сайты начинают резко выдавать 502 Bad Gateway

В логах можно наблюдать приблизительно такую картинку:

[error] 7460#7460: *5365312 connect() to unix:/run/php/php7.3-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream

Возникает эта ситуация из-за того, что операционная система отвергает попытки nginx подключиться к unix сокету. Причина либо превышено максимальное кол-во соединений к сокету либо максимальное кол-во не обработанных соединений к сокету.

Проверяем лимиты:

sysctl net.core

Нас интересуют строки:

net.core.somaxconn = 128
net.core.netdev_max_backlog = 200

Из-за них и происходит ошибка, так как максимальное кол-во соединений 128, а максимум не обработанных 200.

Меняем лимиты, в файл /etc/sysctl.conf прописываем строки

net.core.somaxconn = 20000
net.core.netdev_max_backlog = 65535

И применяем параметры

sysctl -p

Перезапускаем php-fpm

/etc/init.d/php7.3-fpm restart

И с помощью утилиты loadem проводим тестирование своего сайта и получившейся конфигурации

./loadem -l 1 https://mysite.ru 200

URL: https://mysite.ru
Clients: 2000
Starting
MaTps    7.81, Tps    7.81, Err  0.00%, Resp Time  0.966

Completed 8 requests in 1.03 seconds
Total TPS: 7.74
Avg. Response time:  0.966
Max Response time:   1.064

Обращаем внимание на Err 0.00%. Оно должно теперь быть равно 0 (тестирование до изменений параметров sysctl проводите заранее, само собой)

В качестве исходного материала использовал статью Eduard Yamaltdinov за что ему огромное спасибо.

Бесплатные MT-proxy для Telegram

Выкладываю небольшую подборку бесплатных МТ-прокси, надеюсь РКН не читает мой блог и не заблокирует адреса

tg://proxy?server=proxy.mtproto.net&port=443&secret=deadbeefdeadbeefdeadbeefdeadbeef

tg://proxy?server=ton.tools&port=443&secret=b306b256b03831e9dac33519460aec1e

tg://proxy?server=iran-1.proxy.digitalresistance.dog&port=443&secret=d41d8cd98f00b204e9800998ecf8427e

tg://proxy?server=tonnel.me&port=443&secret=624e543658533aae8d81cd3e0c0c9e04

tg://proxy?server=tg.tonnel.org&port=443&secret=101054b32eb37247efb4664fb750064d

Можете добавить все ссылки себе в клиент и переключаться между ними в случае недоступности

Как включить тёмные Dock и контекстные меню в macOS Mojave?

В новой Mojave появился долгожданный dark режим, так долго ожидаемый общественностью. Всё бы хорошо, но глаза почему-то болят от таких контрастных тем, особенно при переключении из среды разработки в, например, браузер со светлой страницей. При этом в предыдущей ОС (точнее, начиная с Yosemite) появился как бы я его назвал полударк режим, который в Mojave тупо убрали.

Читать далее Как включить тёмные Dock и контекстные меню в macOS Mojave?

Как установить php 7.1 в debian 9 stretch ?

Пара команд и у вас в системе есть php 7.1

Добавляем в новый source в менеджер пакетов apt и обновляем его

sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
sudo apt update

устанавливаем php

sudo apt install php7.1-common  php7.1-readline php7.1-fpm php7.1-cli php7.1-gd php7.1-mysql php7.1-mcrypt php7.1-curl php7.1-mbstring php7.1-opcache php7.1-json

наслаждаемся :)

Как установить mysql 5.7 сервер на debian 9 stretch?

В стабильной ветке современного debian перестал существовать mysql и он теперь стал mariadb. Почему так случилось? Потому что компания Oracle купила mysql и решила его лицензировать и продавать для коммерческого использования. Поэтому debian адепты бесплатных лицензий и стабильности выпилили из репозитория mysql и заменили его форком mariadb. Тем, кому это не по душе простейший выход из ситуации описываю в статье.
Читать далее Как установить mysql 5.7 сервер на debian 9 stretch?

Настройка nginx для раздачи статики и экономия места на диске

При разработке сайтов возникает проблема хранения множества изображений и прочих медиа-файлов. Такие медиа-файлы могут занимать ощутимое количество места на диске, которое в век повального применения ssd дисков становится дороже. Да и бекапить такие данные часто накладно. Кроме того эти файлы создаются один раз и хранятся всё время существования сайта (зачастую), и таскать эти файлы за собой с сервера на сервер с каждым годом становится неприятно. Знакомо? Давайте попробуем разобраться как дешево можно решить проблему.

Читать далее Настройка nginx для раздачи статики и экономия места на диске

Как установить Telegram X на iOS?

Apple с середины апреля блокирует обновление приложения для iOS, что навевает грусть и тоску. Жаль, что Эпол прогибается под РКН, конечно. Но есть простой способ обойти ограничение

Читать далее Как установить Telegram X на iOS?

Как оптимизировать SQL запросы

Оптимизация SQL (в частности MySQL) довольно обширная тема и нет единого рецепта, который бы дал ответ на ваш конкретный вопрос. Поэтому попробую отталкиваясь от собственного опыта оптимизации сайтов поделиться своими знаниями в этом материале. Стоит также отметить, что речь сейчас будет только о запросах SELECT, остальные запросы не так критичны в плане скорости работы зачастую.

Читать далее Как оптимизировать SQL запросы