Назад | Перейти на главную страницу

как оптимизировать небольшой Linux-сервер?

У меня есть небольшой сервер 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 и напишите синтаксический анализатор, чтобы исключить параметры из запросов, чтобы определить, какие из них действительно медленные. Или просто найди один уже написанный.