пятница, 6 марта 2009 г.

На сервере подкачка = смерти

Это перевод On a server, paging = death. Автор: Реймонд Чен.

Последний пост Chris Brumme содержал предложение: "на сервере не должно быть подкачки". Это потому что на сервере подкачка (Paging) эквивалентна смерти.

Я как-то встретил человека из другого отдела, который рассказал мне эту маленькую историю: у них был сервер, который умирал каждые 10 часов - точно, как по часам. Для продолжения работы его надо было перезагрузить. Чтобы скрыть эту проблему, сервер был переделан в кластер. Поэтому получалось, что когда отдельная машина в кластере повисала, её перезагружали, а сам кластер продолжал работать, и клиенты ничего не замечали. Но администратры серверов раздражались очень сильно ("Эй Кленси, похоже №2 надо перезагрузить. Она опять висит").

В чём была причина этих зависаний на серверах? В подкачке.

В одной из программ, запущенных на сервере, была утечка памяти в 4 байта на запрос. Рано или поздно, но утечки памяти заполняли всю оперативную память и серверу приходилось выгружать неиспользуемую память на диск (делать подкачку). Подкачка означает, что ответная реакция сервера замедляется, но запросы, конечно же, продолжают приходить с обычной частотой. Поэтому, чем дольше вы обрабатываете запрос, тем больше скапливается у вас новых запросов, тем дольше вы будете их разгребать и тем больше их снова будет скапливаться и т.д. Проблема растёт как снежный ком, пока машина не падает на колени под непосильной нагрузкой (т.е. на самом деле сервер не вис, но отвечал настолько медленно, что оставалось его только перезагрузить).

После более подробного исследования проблемы, эту утечку нашли и исправили. Теперь сервера в кластере работают гладко и без заминки.

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

1 комментарий:

  1. У меня был случай, с утечкой памяти в UDF-ке, на сервере Firebird на Линуксе. Тоже не сразу нашли причину. А симптомы были те же. Сервер зависал с завидной переодичностью раз в два-три дня.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

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