Из-за бюджетных ограничений я использую самую маленькую каплю, которую предоставляет DigitalOcean, которая запускает небольшое (4 или 5 пользователей) устаревшее приложение php для клиента, пока я не смогу его переписать. Я только что установил redis, чтобы попытаться повысить производительность для нескольких более дорогих запросов к базе данных. Я просмотрел вопросы, перечисленные внизу, и считаю, что мне еще нужно задать этот вопрос. Я не хочу заниматься «планированием мощности» на данном этапе. Я просто хочу придумать так называемое «<разумное значение>» для maxmemory в соответствии с принятым ответом на приведенный ниже вопрос о Redis, основанный на типичных требованиях apache httpd 2.2.15, php 5.3.3 и mysql 5.1. .73 работает на CentOS 6.9 (как я уже сказал, наследие).
Выход из бесплатно -h когда никто не использует приложение
total used free shared buffers cached
Mem: 1.0G 809M 197M 368K 179M 484M
-/+ buffers/cache: 145M 860M
Swap: 0B 0B 0B
Меня беспокоит то, что /etc/php.ini имеет memory_limit = 256M
и меня настораживает вывод config get maxmemory
в Redis-Cli, поскольку похоже, что настройка по умолчанию не беспокоит вообще чтобы узнать, что на самом деле доступно в системе.
127.0.0.1:6379> config get maxmemory
1) "maxmemory"
2) "3221225472"
Моя интуиция подсказывает мне, что если я наивно установил memory_limit и maxmemory на 98M, я испытаю горе, если приложение будет работать на полную мощность, и вдруг система решит запустить какие-то случайные служебные процессы, или мне нужно перейти в vi, чтобы исправить что-то на лету (не то чтобы я Когда-либо сделайте это на производственной машине). Хм, и я только что понял, что даже не принял во внимание рабочую память mysql ... Обратите внимание, что в # 551727 обсуждаются стратегии настройки, но на самом деле он не отвечает на вопрос о том, сколько свободной памяти следует поддерживать.
Можете ли вы помочь мне с планированием моей мощности?
Сколько свободной памяти у меня должно быть на моем веб-сервере?
https://stackoverflow.com/questions/33115325/how-to-set-redis-max-memory
Планирования мощности невозможно избежать. В ответ, на который вы связались, сказал: «Это зависит от обстоятельств».
Поддерживайте достаточно доступной памяти (также называемой кэшированной, поскольку у вас не останется неиспользованной как свободной). «Достаточно» означает, что давление памяти не сильно замедлит работу, пока она пытается восстановить. В худшем случае убийца OOM - плохие новости.
А теперь множество вопросов, чтобы дать количественную оценку. Подумайте о создании электронной таблицы, есть несколько ...
Сколько секунд времени отклика будет приемлемым показателем? Насколько быстры сейчас запросы с точки зрения пользовательского агента?
Как выглядит память хоста под нагрузкой? Запишите все /proc/meminfo
в котором есть более конкретные промежуточные итоги.
Ожидается ли максимум 5 пользователей и одновременно ли это? Возможно, вам удастся обойтись 5 или менее рабочими процессами.
MySQL на этом ящике? Какое максимальное сконфигурированное потребление памяти при сложении всех параметров? Скорее всего, происходит из innodb_buffer_pool_size
и возможно max_connections
✕ sort_buffer_size
. Например, используйте https://www.mysqlcalculator.com/ и https://launchpad.net/mysql-tuning-primer
Как настроен httpd? Сколько рабочих? Это php mod_php или fpm? Каков типичный RSS-канал для процесса httpd, например из top
?
По поводу «более дорогих запросов к базе данных». Как выглядит журнал медленных запросов? Можно ли сделать запросы более эффективными?
По поводу добавления уровня кеширования. Случаются ли повторные запросы, которые выиграют от такого кеша? Вам нужно написать код для использования кеша, или он уже находится в приложении? Ваш драгоценный МБ лучше потратить на буферы БД? Даже при минимальном размере я бы все равно выделил пару сотен МБ для добавления Redis.