Хорошо, у нас растущая корзина для покупок автозапчастей. Наш сервер работает медленно и постоянно дает сбой, поэтому мы попросили наш веб-хостинг помочь нам. Они прислали нам этот отчет, но мне нужен совет, как его обработать.
Прямо сейчас мы планируем взять базу данных MySQL и разместить ее на AWS, но мне нужно знать, как определить, какой размер нам нужен и какой сервис будет работать лучше всего.
Мне также нужно знать любые настройки apache, которые улучшили бы производительность.
Вот анализ, который нам отправил веб-хостинг
Вот как эти проблемы вступают в игру:
1) Очень большой объем оперативной памяти вашего веб-приложения превышает 512 МБ плюс неправильная настройка Apache, которая позволяет этим процессам веб-приложений потреблять больше оперативной памяти, чем доступно на вашем сервере.
2) Служба MySQL на вашем сервере, такая как Apache, настроена так, чтобы выделять гораздо больше оперативной памяти, чем доступно на вашем сервере. Это делает службу MySQL нестабильной, поэтому потребуется перезагрузка для устранения проблем, которые не возникли бы, если бы она была правильно настроена так, чтобы не использовать больше оперативной памяти, чем установлено.
Параметр Apache MaxClients вашего сервера по умолчанию == 256
На вашем сервере 32232 МБ памяти
Самый большой процесс веб-приложения Apache использует 572,73 МБ памяти.
Самый маленький процесс веб-приложения Apache использует 35,02 МБ памяти.
Средний процесс веб-приложения Apache использует 94,93 МБ памяти.
Исходя из среднего процесса Apache, Apache потенциально может использовать 24302,09 МБ ОЗУ (75,40% доступной ОЗУ)
Используя самый большой процесс Apache, Apache потенциально может использовать 146618,89 МБ ОЗУ (454,89% доступной ОЗУ)
Параметр Apache MaxClients вашего сервера не должен быть больше 50, если вы выделяли только 100% оперативной памяти вашего сервера для процессов веб-приложения Apache.
Максимальное возможное использование памяти: 146618,88 МБ (454,89% доступной оперативной памяти)
Процент ОЗУ, выделенного Apache 454,89%
ПРИМЕЧАНИЕ: этот анализ не принимает во внимание какие-либо другие процессы, такие как служба базы данных MySQL, работающая на вашем сервере, которая также требует значительных ресурсов оперативной памяти для эффективной работы, в настоящее время не менее 1,2 ГБ оперативной памяти.
-------- Performance Metrics -------------------------------------------------
[--] Up for: 14h 11m 51s (9M q [195.147 qps], 41K conn, TX: 22B, RX: 1B)
[--] Reads / Writes: 59% / 41%
[--] Total buffers: 1.6G global + 5.0G per thread (151 max threads)
[!!] Maximum possible memory usage: 756.7G (2403% of installed RAM)
[OK] Slow queries: 0% (2K/9M)
[OK] Highest usage of available connections: 23% (35/151)
[OK] Key buffer size / total MyISAM indexes: 1.0G/2.2G
[OK] Key buffer hit rate: 100.0% (9B cached / 1M reads)
[OK] Query cache efficiency: 90.4% (8M cached / 9M selects)
[!!] Query cache prunes per day: 725309
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 147K sorts)
[!!] Joins performed without indexes: 1544
[!!] Temporary tables created on disk: 47% (96K on disk / 203K total)
[OK] Thread cache hit rate: 99% (59 created / 41K connections)
[!!] Table cache hit rate: 5% (512 open / 10K opened)
[OK] Open file limit used: 1% (910/65K)
[OK] Table locks acquired immediately: 99% (2M immediate / 2M locks)
[!!] Connections aborted: 6%
Предлагаемое решение MySQL:
Запустите OPTIMIZE TABLE, чтобы дефрагментировать таблицы для повышения производительности
Уменьшите общий объем памяти MySQL для стабильности системы
Настройте запросы на соединение, чтобы всегда использовать индексы
Размер временной таблицы уже велик - уменьшите размер набора результатов
Сократите количество запросов SELECT DISTINCT без предложений LIMIT
Ваши приложения не закрывают соединения MySQL должным образом, пусть ваши разработчики исправят код, чтобы соединения MySQL явно закрывались при возврате результатов запроса.
Если вы размещаете MySQL и Apache на одном сервере, вы должны увидеть прирост производительности, просто переместив их на разные машины. MySQL любит использовать ОЗУ для кэширования данных, но вы не увидите большого улучшения, если будете выполнять множество операций записи (что не похоже на вас).
Еще вы могли бы подумать о том, чтобы получить балансировщик нагрузки и развернуть два веб-сервера за ним. Это позволит вам получить экземпляры меньшего размера и немного снизить риск. AWS имеет несколько зон в данной зоне доступности (например, 1a, 1b и т. Д.), И вы можете разместить свою БД в 1a, а копию mutli-az db - в 1b, при этом веб-сервер также находится в зоне. Если 1a выходит из строя, вы автоматически переключаетесь на 1b. Балансировщик нагрузки гарантирует, что вы также разделите трафик между серверами, что означает меньшую вероятность перегрузки.
Для всего этого я предлагаю вам попробовать следующее
Какое моделирование процессов apache вы используете? Или звучит так, будто это преформа. Преформа теперь устарела, и есть другой mpm для Apache с более низким объемом памяти. Не все приложения поддерживают их, но большинство из них должно, по крайней мере, работать с Apache amp me worker. Это должно позволить поддерживать и, возможно, увеличивать количество одновременных клиентов при меньшем использовании оперативной памяти.