У меня есть хост виртуальной машины под управлением Centos 6. Он обслуживает приложение для Android с apache / php / mysql. Когда количество онлайн-пользователей становится большим, сервер реагирует очень медленно. Даже ssh-соединение с сервером становится медленным.
Итак, как мне найти узкое место для этого и как это исправить? Это недостаток ОЗУ или много операций записи / чтения с жесткого диска, высокая загрузка процессора и какая программа вызывает это?
Это результат команды free -m в обычных ситуациях:
total used free shared buffers cached
Mem: 1877 1714 162 0 16 202
-/+ buffers/cache: 1495 381
Swap: 1023 231 792
Вывод htop в нормальной ситуации: Вывод htop
Выход из free -h
показывает, что 80% вашей памяти используется не для кеша и буферов (1495 из 1877). Это довольно частое использование. Причем для кеша используется только 202, что немного.
Вполне вероятно, что при таких обстоятельствах вы можете ожидать, что все, что зависит от дискового ввода-вывода, будет медленным. Вопрос в том, привязана ли ваша рабочая нагрузка к вводу-выводу.
Когда мы смотрим на htop
На выходе мы видим, что 2 процессора в среднем загружены на 50%, но средняя загрузка составляет около 2.
Из этого можно сделать вывод, что основной вклад в среднюю загрузку вносится не ЦП, поэтому должен быть ввод-вывод. Таким образом, у вас, похоже, есть рабочая нагрузка, связанная с вводом-выводом, и только крошечный объем памяти доступен для кешей.
Исходя из этого, я бы сказал, что нехватка оперативной памяти является основной причиной медлительности, с которой вы сталкиваетесь. Вы, вероятно, увидите значительное улучшение, если удвоите объем памяти с 2 ГБ до 4 ГБ.
Убедитесь, что ваше приложение размещено на VPS, который использует SSD.
Вы можете попытаться оптимизировать службы Apache и MySQL и внимательно следить за использованием процессора и оперативной памяти, когда у вас много онлайн-пользователей.
Итак, как мне найти узкое место для этого и как это исправить? Это недостаток ОЗУ или много операций записи / чтения с жесткого диска, высокая загрузка процессора и какая программа вызывает это?
Это может быть любая комбинация или все вышеперечисленное. Может даже быть что-то совершенно другое. Как и вы, без дополнительной информации мы не можем решить. Вам нужно будет установить мониторинг, собрать информацию, проанализировать то, что вы собираете, и принимать решения на основе того, что вы обнаружите.