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

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

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

7 ответов

Решение

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

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

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

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

пример

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

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

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

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

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

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

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

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

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

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

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

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

Другое решение, которое вы могли бы рассмотреть, это использовать службу Coral Distribution Network. Вы можете использовать его во время "пиковых нагрузок" или сделать так, чтобы ваши домашние серверы делали это постоянно. Вы можете проверить онлайн некоторые примеры правил переписывания мод, чтобы распределить ваш трафик.

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