У меня есть небольшой сервер Ubuntu с 512 МБ оперативной памяти и несколько веб-сайтов php / mysql (~ 20), работающих на нем. Он работает уже 2 года без единой проблемы. Но я думаю, что момент для некоторой оптимизации только что настал.
Веб-сайт, размещенный на этом сервере, имеет очень низкий трафик, но теперь я вижу некоторые проблемы с процессором, когда они начали получать больше посещений.
Первое, что я пытаюсь сделать, это определить проблемы, поэтому я поигрался с несколькими инструментами командной строки, такими как top htop apachetop и т. Д., И рабочей средой для мониторинга MySQl. С этими инструментами довольно сложно понять, что я происходит точно. Например, я создал демонов PHP, которые работают в фоновом режиме и каждые 10 секунд сохраняют в базе данных использование ЦП. Если ЦП больше 60%, он сохраняет вывод apachetop. Это не было особенно полезно, так как многие записи ОПЦИИ * HTTP / 1.0. Кроме того, похоже, что это список последних запросов, а не текущий запрос.
Секунды, когда я пытаюсь отслеживать, что происходит с помощью htop, я всегда вижу около 15 записей, например:
6905 mysql 20 0 462M 110M 5220 S 0.0 21.6 5:29.79 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
и еще ~ 15 вроде:
23382 www-data 20 0 259M 27384 4820 S 1.3 5.2 0:01.00 /usr/sbin/apache2 -k start
вот скриншот:
Я не уверен, что такое количество процессов должно быть открыто постоянно или это то, что я могу оптимизировать. Я могу обновить этот сервер сейчас, я просто хочу максимально его оптимизировать, прежде чем делать это.
Кроме того, я включил журнал для медленных запросов, единственные запросы - это все запросы, которые выполняются, когда загрузка ЦП сервера превышает 90%. Это просто подтверждает, что php / mysql, который я использую (custom), не очень тяжелый. Могу сказать, что у сайта с большей посещаемостью 300 уникальных посетителей и 1200 просмотров страниц в день. Все остальные сайты имеют гораздо меньший трафик.
1) Я ищу предложения по эффективному мониторингу этого сервера.
2) Мне нужны предложения по MySQl и PHP. Например, сколько памяти им выделить или какие опции включить / выключить.
Спасибо!
вот ссылка на скриншот htop: http://www.flickr.com/photos/58586868@N02/5375745794/
Как можно догадаться из некоторых моих предыдущих постов, я везде использую collectl. Загрузите / установите rpm из sourcefore и '/etc/init.d/collectl start', и все готово. Он будет собирать более пары сотен показателей производительности каждые 10 секунд при <0,1% ЦП. Он также будет делать снимки данных процесса каждую минуту, поскольку это более тяжелая операция. Затем вы можете воспроизвести собранные данные в различных форматах или даже построить их с помощью веб-инструмента под названием colplot, который является частью пакета collectl-utils.
Просмотр кратких и / или неполных изображений того, что делает система, не приведет вас к этому. Вам нужна долгосрочная картина детализированных данных, которую вы можете детализировать, чтобы увидеть, что на самом деле происходит.
-отметка
Вам нужна дополнительная информация. Сервер всегда работает медленно? Или только в определенные периоды времени? Какие периоды времени? Как выглядит коробка в те периоды времени?
Я бы посмотрел на что-то вроде Мунин. Это очень простое приложение для мониторинга системы, которое собирает данные и представляет их в виде графиков. У них есть плагины для Apache и MySQL для отслеживания доступа, процессов и объема.
Самое лучшее в Munin - это то, что вы получаете много информации практически без работы. Установка и настройка занимает 5 минут, если вы делаете это вручную, и 30 секунд, если вы используете Debian / Ubuntu. Единственное, что вам нужно сделать после его добавления, - это добавить запись для хоста в конфигурацию и убедиться, что нужные плагины включены.
Munin или что-то подобное поможет дать вам некоторые текущие исходные данные о том, как выглядит ваша система. Это будет очень полезно, когда вы начнете вносить изменения, настраивать и настраивать приложения, так как вы получите лучшую обратную связь о том, что работает. Затем вы можете начать копаться в более конкретных местах и улучшить производительность MySQL, производительность Apache и все остальное, что работает на компьютере.
Вероятно, ваша таблица со временем растет, и вы теряете буферы mysql. Попытайтесь выяснить, относятся ли ваши таблицы к типу MyISAM или InnoDB, и соответствующим образом настройте параметры буфера.
Если вы не используете InnoDB, выключите его. InnoDB имеет буфер, настроенный с innodb_buffer_pool_size, а MyISAM использует key_buffer. Вы можете найти оба значения в переменных mysqladmin.
По мере роста таблиц те же запросы, которые раньше выполнялись быстро, работают все медленнее и медленнее.
Что касается знания того, что делает компьютер? Это трудно. Попробуйте определить точное время, когда система была занята, и проверьте системные и пользовательские crontab и журналы доступа к веб-серверу.
Как настроить Linux-сервер, на котором работают Apache, PHP и MySQL, потребуется как минимум 4 большие книги - и волшебного решения нет.
Однако, по моему опыту, большинство проблем с производительностью стеков LAMP связаны с плохо написанными запросами к базе данных. Вы отказались от этого как возможного вклада в то, что вы считаете проблемой производительности - я бы рекомендовал вам вернуться и очень долго на это взглянуть.
После того, как вы разобрали базу данных, нужно еще проверить, что вы сжимаете все HTML, javascript и css (mod_gzip) и HTML, сгенерированный PHP (буферизация вывода). Убедитесь, что у вас работает кеш-код операции (например, APC). И убедитесь, что вы обслуживаете весь свой статический контент с разумной информацией кеширования.
Системные метрики хороши для того, чтобы сказать вам, насколько ограничена производительность системы, а НЕ, какова на самом деле производительность. Начните записывать% D в журналы Apache и анализируйте результаты, чтобы узнать, как на самом деле работает ваша система. Расставьте приоритеты для URL-адресов с наибольшим итоговым значением для оптимизации.
Информация, которую вы предоставили из своей системы, очень контекстуальный - при условии, что ваш веб-сервер настроен правильно, они предполагают, что использование ЦП в основном связано с mysql, но если конфигурация веб-сервера неверна, может иметь место обратное.
Было бы полезно, если бы вы предоставили конфигурацию apache (без комментариев).
Я включил журнал для медленных запросов, единственные запросы - это все запросы, которые выполняются, когда ЦП сервера превышает 90%
Похоже, вы установили слишком высокий порог. Попробуйте установить порог на 0 и напишите синтаксический анализатор, чтобы исключить параметры из запросов, чтобы определить, какие из них действительно медленные. Или просто найди один уже написанный.