Pull to refresh

Comments 45

Апач с 15k витхостов требует ulimit -s unlimited
Хотя 15k на vps не будут пускать, тем не менее — учтите, что чем больше энтропия, тем выше требования к стеку
Если у вас на апаче 15к виртхостов, то у вас что-то совсем не то с бизнес-логикой. Не представляю ситуации, когда может понадобится даже 50 виртхостов, ну кроме хостинговых серверов.
Хостинговый сервер вполне может быть на VPS, если это сильно начинающий хостер :)

Но согласен. Как только количество пользователей перевалит хотя бы за 100 человек. Уже пора съезжать на отдельный сервер. Пусть даже и на какой-нибудь бюджетный.
50 на сервак? Легко. У меня в университете их примерно 30 (на одной машине). И это мы еще ограничиваем запросы и фантазии руководства и пользователей. Ни разу не хостинговая компания.

UFO landed and left these words here
Спасибо, но отвечал я на комментарий с 50 хостами без _К_

Для 50К тоже вижу применение сходу — какой-нибудь киберсквоттер с рекламными страницами. Что тоже врое как не хостинг.
UFO landed and left these words here
в шелле ввести uname -s

Наверное, ulimit ?! :)
У меня без настроек «ulimit -s» выдаёт 8192, значит всё ок? :)
Понял, что не ок, дурак, исправлюсь.
Кроме снижения потребления оперативной памяти в OpenVZ (РБК Хостинг), есть еще параметры user beancounters, которых тоже может нехватать.

Я решил все эти проблемы следующим образом:

Убил Apache, поставил Nginx, уменьшил в nginx sndbuf до 16k, так как именно его мне нехватало при увеличении количества соединений до 1000.

В настоящий момент система спокойно поддерживает до 1000 соединий (лимит по tcp сокетам хостинга)
да, и самое главное на VPS, выключить keep-alive.
У Вас же nginx, какая разница включать или нет? Процессы его дёшевы.
tcpsockets <= 1000, если keep-alive не урезать, то они кончаются быстрее, чем все остальные ресурсы VPS.
а TIME_WAIT там не учитываются, или вообще не поддерживаются? Они же остаются, когда сервер закрывает соединение.
А еще нельзя использовать частые соединения на localhost (то есть не использовать схему фронтенд-бэкенд, использовать только постоянные соединения с БД, итд)
Вот обычный хостинг (порты 81, 85 — это апач)

tcp 0 0 hosting:80 79.165.234.182:1372 TIME_WAIT
tcp 0 0 127.0.0.1:81 127.0.0.1:35786 TIME_WAIT
tcp 0 0 127.0.0.1:85 127.0.0.1:33738 TIME_WAIT
tcp 0 0 127.0.0.1:85 127.0.0.1:33482 TIME_WAIT
tcp 0 0 127.0.0.1:85 127.0.0.1:33226 TIME_WAIT
tcp 0 0 hosting:80 87.242.74.101:42107 TIME_WAIT


В результате nginx-apache выливается в
$ netstat -atn | wc -l
1430
Cредняя недельная нагрузка апача 6.08 requests/sec
Но я почти уверен, что в пиковые моменты использованных сокетов до 10 раз больше.
в nginx есть возможность уменьшить количество TIME_WAIT с помощью опции reset_timedout_connection
На Virtuozzo/OpenVZ своп доступен, но только по желанию хостера и только по принципу «всем или никому». По крайней мере, два года назад был доступен :) Так что надежнее определять платформу по uname -a.
Хм, по uname -a у меня, например, никакого намека на используемую систему виртуализации.
Насчет свопа — точно. Эмпирическое правило, что я написал, не всегда работает)
Проще узнать у хостера)
Если ядра нет, если есть /proc/user_beancounters — значит OpenVZ (или Virtuozzo).
моя очередь хмыкать :)
в бытность мою админов VPS-хостинга с виртуозой uname стабильно писал 2.6.9-bla-bla-vz
он ведь отдается с хостовой системы, а под virtuozzo/openvz ядро патчится, и version.h в т.ч.
Сейчас, как правило, в ядре будет присутствовать суффикс «stab», если vzzo/openvz.
ХМ, не знал, и вправду)
убрал то примечание про своп.
Короче правильнее было бы «если свопа нет — значит OpenVZ».
… или просто нет свопа.
теоретически угу)
Лимиты для пользователя или группы штатно можно задавать в /etc/security/limits.conf.
Глупый вопрос: Зачем брать VPS на VZ при наличии вменяемых предложений на Xen?
Потому что предложения на OpenVZ дешевле — там память не жёстко распределяется, отсюда возможность оверселлинга и дешевизна.
UFO landed and left these words here
Применимо аж на все 200%. Но дело в другом: связать-то её ни с чем не свяжут, но в квоту к вам — запишут обязательно. Чтобы не было идиотских ситуаций когда вы успешно выделили 200M, а при попытке использовать 110M — программка в кору падает.
с точки зрения пользователя это справедливо для Xen и Linux без виртуализации, но неверно для OpenVZ, с этим и боремся
Почти уверен, что точно так же, у них там Virtuozzo.
С тем, чтобы хостер как-то настраивал ulimit -s, ни разу не встречался.
Блин, это не надо пихать в инит-скрипты. Для этого есть /etc/security/limits.conf! Там же можно настроить ограничения по группам, чтобы то, что нужно, точно не упало!
Раз уж второй раз пишут, и эмоционально) Вот что мне по этому поводу думается.
1. Если нужные процессы запускаются через PAM от отдельных пользователей-групп, то решение с limits.conf хорошее.
2. Не везде есть-используется PAM. Если его нет, или где-то права даются минуя PAM, то /etc/security/limits.conf ничего не ограничивает. У меня PAM не установлен, например.
3. «Не надо» — не аргумент) Решение «пихать все в инит-скрипты» — одно из возможных, оно простое, универсальное и работает. +Для применения индивидуальных ограничений процессы не обязательно должны запускаться от разных пользователей-групп. Но я на этом способе не настаиваю, статья не об этом совсем)
Человек дал вам тему для размышления, а не четкие действия к исполнению.
Для каждой задачи можно использовать по своему.
Только что прописал ulimit -s 1024 в /etc/init.d/rc До этого VPS висел, жутко не хватало памяти. Сейчас вроде нагрузка упала. Было 250-270 Мб, стало 140-150. Немного растет постепенно, но не смертельно. Спасибо!
Ничего не упало? Всё работает как прежде?
покажите ламеру пожалуйста, куда вы вписали ulimit -s 1024 в файле /etc/init.d/rc. и перезагружать только весь сервер или apache, mysql
Это только на дебайне, или на убунту тоже работает?
Просто прописал, перезапустил, но ничего в памяти не изменилось.
Only those users with full accounts are able to leave comments. Log in, please.