Я использую для своего сайта хостинг 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
1) Попробуйте ps aux
и глядя на /proc/$pid/status
и /proc/$pid/smaps
2) Добавьте больше памяти.
3) 256 МБ явно слишком мало для вашей текущей нагрузки.
Для диагностики, кто воюет, предлагаю установить наверху. Atop покажет вам изменения на уровне процесса. Для быстрой демонстрации я заставил MySQL использовать всю доступную память, а затем работал с некоторыми большими файлами, чтобы заставить память MySQL быть замененной на кэширование моих больших тестовых файлов. Ниже приведен снимок экрана, на котором MySQL пытается прочитать память обратно из подкачки (изображение вместо текста, чтобы вы могли видеть основные моменты).
Обратите внимание на числа majflt и minflt, когда MySQL пытается достичь чего-то, что было заменено. Вы также можете увидеть другую статистику памяти и действительно все, что вы когда-либо хотели получить сверху, ps и т. Д. {apt-get, yum} установить поверх.
Вы используете Apache?
если да, сделайте следующее:
Допустим, вы потребляете 20 МБ на процесс.
Затем выполните простую математику. отложите 156 МБ для SO, а остальные 100 разделите на объем памяти, который потребляет один apache: 100/20 = 5
Это даст вам, сколько процессов apache вы можете иметь одновременно.
Затем перейдите в конфигурацию apache (/ etc / apache2) и найдите в основном файле конфигурации следующие настройки: - StartServers - ServerLimit - MaxClients
И установите их все на 5.
Имейте в виду, что 256 - это слишком мало для установки apache. Я бы не стал запускать apache с объемом памяти менее 2 ГБ.
Это PHP.
Добавьте больше памяти или уменьшите количество одновременных процессов PHP
Это не много.
Вы можете уменьшить подкачку, сначала проверьте текущее значение с помощью cat / proc / sys / vm / swappiness затем измените значение sysctl -w vm.swappiness = 10
Также вы всегда можете отключить своп с помощью sudo swapoff a или редактируя / etc / fstab
В настоящее время я редко использую свопинг, даже в такой маленькой виртуальной машине, как ваша.
Вы можете заставить Apache использовать меньше памяти, но это будет непросто.
MaxClients 64
) и умеренное количество потоков (например, ThreadsPerChild 32
).Почему бы вам не попытаться выяснить, какие процессы съедают сколько памяти, когда происходит тяжелая подкачка, выполнив команду
верхняя
После определения того, какой процесс занимает полезную часть памяти, следует сделать первый шаг к тому, как решить проблему. например. если запрос mysql занимает слишком много памяти, возможно, вы решили ограничить память сервера mysql или, может быть, вы выполняете оптимизацию запроса
ну 256МБ действительно кажется маленьким. Поскольку вы упомянули apache, и я знаю, что apache по умолчанию поставляется с предварительным режимом работы, он может быть настоящим виновником. Рассмотрите возможность запуска apache в рабочем режиме с запущенными только необходимыми модулями (обычно apache поставляется с множеством модулей, запускаемых автоматически) или заменой apache на облегченный Nginx.