Мой сервер меняет местами, как я могу это исправить?
Я использую 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
).
Это PHP.
Добавьте больше памяти или сократите число одновременных процессов PHP
Это не много
Почему бы вам не попытаться выяснить, какие процессы потребляют, сколько памяти происходит, когда происходит интенсивный обмен
Топ
После того, как выясняется, какой процесс занимает полезную память, следует сделать первый шаг к решению проблемы. например. если запрос mysql занимает слишком много памяти, возможно, вы решили ограничить память сервера mysql или, возможно, вы оптимизировали запрос
ну 256МБ действительно кажется маленьким. Поскольку вы упомянули apache, и я знаю, что по умолчанию apache поставляется с режимом работы prefork, он может быть реальным виновником. Рассмотрите возможность запуска apache в рабочем режиме с запущенными только необходимыми модулями (обычно apache поставляется с множеством автоматически запускаемых модулей) или полной заменой apache на облегченный Nginx.