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

Сервер использует слишком много памяти и выдает сбой сервера

У меня небольшой домашний сервер с 256 МБ памяти. Один из моих сайтов только что был подключен к Reddit, и поскольку у меня было два случая, когда система использовала слишком много памяти и вылетала до такой степени, что мне приходилось вручную перезагружаться. Бывают случаи, когда использование моей физической памяти опасно возрастает до 90%, а каждая служба mysql и apache потребляет около 100 МБ. Я подозреваю, что происходит наплыв посетителей, и система использует слишком много памяти, прежде чем она сможет переместить часть в область подкачки (которой у меня около 750 МБ). Должна ли вообще возникать эта проблема? Единственное решение - получить больше памяти? Я слышал о настройке возможности подкачки в Linux, с которой можно было ошибиться, возможно, это может помочь.

Какие-либо предложения? Эта проблема раздражает.

Не тратьте время на оптимизацию, просто добавьте один ГБ памяти. 256 - это уже самый нижний предел для запуска веб-сервера и сервера mysql.

Я почти уверен, что вам нужно выполнить сброс вручную, потому что система интенсивно использует пространство подкачки. Помните, что подкачка была предназначена для перемещения простаивающих длительных процессов на диск. Ужасно плохо, когда память скоро снова понадобится, это называется "Swap trashing". Веб-сервер никогда не должен использовать свопинг. База данных может лучше работать с подкачкой из-за обработки внутреннего буфера.

Так что да, нет другого пути, кроме как добавить около 20 долларов США за дополнительную память (или потратить много времени на оптимизацию программы).

Запустите free -m Linux будет использовать всю доступную память и кешировать вещи. Free сообщит вам, есть ли проблема.

пример

free -m
         total       used       free     shared    buffers     cached
Mem:          6035       5954         80          0         69       4401
-/+ buffers/cache:       1483       4552
Swap:         4722          0       4722

Свободно всего 80 мегабайт, однако большая его часть используется в настройке кеширования для кэширования доступа к файлам с диска. Если в вашей строке подкачки используется память, то да, вам понадобится больше памяти.

да, вам нужно больше памяти, чтобы справиться с подобными ситуациями.

вы также можете создать файл подкачки, который поможет машине работать, пока не будет установлено больше памяти. это не лекарство, запуск из свопа - это МЕДЛЕННЫЙ - но это должно предотвратить сбой машины из-за нехватки памяти, что еще хуже.

например чтобы создать и использовать файл подкачки 2 ГБ (2M * 1K):

dd if=/dev/zero of=/swapfile bs=1K count=2M
mkswap /swapfile
swapon /swapfile

также добавьте файл подкачки в / etc / fstab, если хотите, чтобы он сохранялся после перезагрузки.

не забудьте заменить файл подкачки и удалить его, когда он вам больше не нужен, чтобы восстановить использованное дисковое пространство.

Короткий ответ: да, вам нужно больше оперативной памяти.

Я думаю, что ваша директива MaxClients имеет большое значение, и ваш сервер не может с ней справиться. Взгляни на этот документ из документации Apache, это будет полезно, если у вас 256 МБ, 1 ГБ или 4 ГБ ОЗУ.

Один из вариантов, если вы столкнулись с наплывом digg / redit, - это просканировать ваш сайт на 2 уровня и создать чистые HTML-копии первых нескольких страниц. Это позволит ему обслуживать HTML и не касаться БД для большинства пользователей, заходящих на сайт.

Одним из вариантов может быть установка кеширующего прокси, да, он будет использовать ресурсы, но снизит нагрузку на вашу базу данных и тому подобное (в зависимости от вашего сайта, конечно).

Еще одно решение, которое вы могли бы рассмотреть, - использовать Коралловая распределительная сеть служба. Вы можете использовать его во время «пиковых нагрузок» или сделать так, чтобы домашние серверы работали постоянно. Вы можете проверить в Интернете несколько примеров правил мод-перезаписи для распределения вашего трафика.