Nginx / postgres не использует все ядра

У меня есть сервер Nginx + Postgres с 8 ядрами процессора. Заметил, что под нагрузкой CPU загружается только до ~ 60%.

Я посмотрел на top и вот скриншот:

top screenshot

Оказывается, на самом деле только 5 процессов выполняются параллельно. Что могло вызвать такое ограничение?

Я посмотрел конфигурацию postgres. Я не заметил, что какие-либо настройки ограничивают его, настройки на самом деле не ограничивали, например:

max_connections = 100

Затем я проверил конфигурацию Nginx. Эти настройки кажутся важными (но в данном случае они не ограничиваются):

worker_processes auto;
worker_connections 768;

В настройках php я посмотрел на этот параметр, и он кажется подозрительным:

pm.max_children

pm установлен на ] динамический . Может ли это быть ограничивающим фактором (я не могу вслепую тестировать различные изменения настроек и перезапускать этот сервер для экспериментов)? Если так, как мне выбрать значение? Установите его равным числу ядер или, может быть, больше?

0
задан 12 October 2016 в 21:48
1 ответ

NGINX не ломает тут голову, управляя тем, что выглядит как 5 соединений с PHP-FPM. PHP-FPM динамически подстраивает рабочих для каждого соединения. Здесь все выглядит хорошо.

PostgreSQL использует 99% процессора и 1% памяти. Скорее всего, есть более быстрый способ выполнять запросы, если вы дадите ему больше ресурсов.

  • Прежде чем что-либо настраивать, ознакомьтесь с тем, как PostgreSQL использует CPU.
  • Настройте вашу конфигурацию для вашего оборудования и ожидаемой нагрузки. (соединения/клиенты). Вы можете использовать pgtune для получения некоторой балансировки. номера.
  • Если Ваша рабочая нагрузка включает UPDATE и DELETE, Вы (или автоматический вакуумный демон) должен быть VACUUM в вашей базе данных для того, чтобы убрать мертвые кортежи.

  • Если вы можете позволить себе некоторое время простоя и у вас есть свободное место на диске, я бы рекомендуем VACUUM FULL ANALYZE прежде чем инвестировать слишком много времени.

  • Если вы находитесь на версии PostgreSQL до 9.0, вам может понадобиться REINDEX после VACUUM.

  • Так как вы унаследовали эту систему, полезно посмотреть типы выполняемых запросов и то, что съедает весь процессор. pgbadger нормализует и группирует ваши запросы. Возможно, вы сможете настроить несколько запросов или индексов.

  • Существует много различных типов индексов, которые вы, возможно, не видели раньше. Вы можете делать частичные индексы, индексы по выражениям, BRIN, GIN и т.д. Героку имеет краткое описание эффективного использования индексов.

  • Вы также определенно хотите убедиться, что у вас нет проблем с блокировкой .

  • Рассмотрите возможность просмотра архивов списка рассылки или отправки в этот список. Также есть отличное сообщество на IRC.

1
ответ дан 4 December 2019 в 16:28

Теги

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