Мой сервер меняет местами, как я могу это исправить?

Я использую slicehost.com 256MB хостинг для моего сайта.

К сожалению, он обменивается почти все время. Когда я печатаю в консоли free я получаю что-то вроде:

            total       used       free     shared    buffers     cached
Mem:        251140     228968      22172          0        596      17356
-/+ buffers/cache:     211016      40124
Swap:       524284      60944     463340

Если я reboot сервер, обмен немного останавливается, а затем начинается снова.

Как я могу:

1) выяснить, какие процессы / функции вызывают обмен

2) Как исправить проблему

3) выяснить, не слишком ли мало 256 МБ, и время для обновления, а не для оптимизации

Спасибо

// используя CakePHP/apache

7 ответов

1) Попробуй ps aux и глядя на /proc/$pid/status а также /proc/$pid/smaps

2) Добавьте больше памяти.

3) 256 МБ явно слишком мало, учитывая вашу текущую нагрузку.

Для диагностики того, кто борется, я предлагаю установить поверх. Atop покажет вам изменения на уровне процесса. Для быстрой демонстрации я подготовил MySQL к использованию всей имеющейся у него памяти, а затем поработал с некоторыми большими файлами, чтобы принудительно заменить память MySQL в пользу кэширования моих больших тестовых файлов. Ниже приведен скриншот, на котором MySQL пытается прочитать память обратно из свопинга (изображение вместо текста, чтобы вы могли видеть блики).

Обратите внимание на числа majflt и minflt, когда MySQL пытается достичь чего-то, что было заменено. Вы также можете просмотреть другую статистику памяти и все, что захотите получить сверху, ps и т. Д. {Apt-get,yum} установить поверх.

поверхности показывает майфлт и минфлт

Вы используете Apache?

в случае, если вы делаете, сделайте следующее:

  • Open top (просто введите top на терминале)
  • Нажмите Shift M для упорядочения по памяти
  • В столбце RES вы можете увидеть, сколько памяти зарезервированы вашими экземплярами apache.

Допустим, вы потребляете 20 Мб на процесс.

Затем сделайте простую математику. выделите 156 Мбайт для SO и разделите остальные 100 на объем памяти, который потребляет один apache: 100 / 20 = 5

Это даст вам, сколько Apache процесс вы можете иметь одновременно.

Затем перейдите в конфигурацию Apache (/etc/apache2) и найдите в своем основном файле конфигурации следующие параметры: - StartServers - ServerLimit - MaxClients

И установите их все на 5.

Помните, что 256 слишком мало для настройки apache. Я бы не стал запускать Apache с объемом памяти менее 2 ГБ.

Вы можете уменьшить swappiness, сначала проверьте текущее значение с помощью cat /proc/sys/vm/swappiness, затем измените значение sysctl -w vm.swappiness=10

Также вы всегда можете отключить swap с помощью sudo swapoff a или отредактировать / etc / fstab

В настоящее время я редко использую своп, даже в маленькой виртуальной машине, как ваша.

Вы можете заставить Apache использовать меньше памяти, но это будет нелегко.

  • Отключите ненужные сервисы на вашем сервере.
  • Использовать рабочий модуль MPM с PHP как FastCGI (он несовместим с PHP как модуль).
  • Настройте рабочий модуль для использования умеренного числа MaxClients (например, MaxClients 64) и умеренное количество потоков (например, ThreadsPerChild 32).
  1. Это PHP.

  2. Добавьте больше памяти или сократите число одновременных процессов PHP

  3. Это не много

  1. Почему бы вам не попытаться выяснить, какие процессы потребляют, сколько памяти происходит, когда происходит интенсивный обмен

    Топ

  2. После того, как выясняется, какой процесс занимает полезную память, следует сделать первый шаг к решению проблемы. например. если запрос mysql занимает слишком много памяти, возможно, вы решили ограничить память сервера mysql или, возможно, вы оптимизировали запрос

  3. ну 256МБ действительно кажется маленьким. Поскольку вы упомянули apache, и я знаю, что по умолчанию apache поставляется с режимом работы prefork, он может быть реальным виновником. Рассмотрите возможность запуска apache в рабочем режиме с запущенными только необходимыми модулями (обычно apache поставляется с множеством автоматически запускаемых модулей) или полной заменой apache на облегченный Nginx.

Другие вопросы по тегам