Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: поправки к "100-200 тысяч соединени й" для FreeBSD 7 ( i386 и amd64 )
On 02.06.2008, at 15:49, MZ wrote:
В пн, 02/06/2008 в 14:55 +0400, Alexey V. Karagodov пишет:
On 02.06.2008, at 14:13, MZ wrote:
В вс, 01/06/2008 в 05:09 +0400, Alexey V. Karagodov пишет:
Keywords: freebsd tcp optimization tune speed socket mbuf sendfile
sysctl
From: Сысоев Игорь Владимирович <http://
www.sysoev.ru>
Date: Mon, 1 Oct 2007 14:31:37 +0000 (UTC)
Subject: FreeBSD для обслуживания 100-200 тысяч
соединений
######## /usr/src/sys/i386/conf/CUSTOM
include GENERIC
сложно скопировать и почистить ? чем
инклудить весь мусор
device pf
device pflog
device pfsync
device carp
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_CDNR
options ALTQ_PRIQ
options ALTQ_NOPCC
#options QUOTA
options IPSEC
оригинально, [GIANT] поддержку квот
выключили но ipsec оставляем, для
чего ?
да, для этих примеров надо было
почистить файлики, согласен
кстати, если IPSEC не использовать,
ничего плохого не будет?
кроме потребления памяти
Будет, особенно если на ядрах версии <=
6.x компилить просто IPSEC
поправки были для 7-ки
и что будет-то?
вместо FAST_IPSEC.
в 7-ке этого options нет
проще говоря FAST_IPSEC чуть ли не
переименовали в IPSEC
#options IPSEC_FILTERGIF
device crypto
device cryptodev
options DEVICE_POLLING
#options HZ=1000
#options SCHED_ULE
options KVA_PAGES=512
options VM_KMEM_SIZE=1073741824
options VM_KMEM_SIZE_MAX=1073741824
options PANIC_REBOOT_WAIT_TIME=60
ident CUSTOM
######## /boot/loader.conf
verbose_loading="YES"
loader_logo="beastie"
#ng_ether_load="YES"
#linux_load="YES"
accf_data_load="YES"
accf_http_load="YES"
а в ядро добабавить сразу нельзя ?
не всегда нужно. работает точно также
или нет?
В случае именно с accept-фильтрами не
знаю, а вот с другими драйверами
наблюдал проблемы если они были
загружены модулями, например с tap(4).
tap не используется
net.inet.tcp.syncache.hashsize=1024
net.inet.tcp.syncache.bucketlimit=100
net.inet.tcp.tcbhashsize=4096
kern.ipc.nsfbufs=10240
тут
vm.kmem_size=1G
без options KVA_PAGES=512 на i386 будет паника
это я вроде включал в конфиг ядра i386
Да, но давать советы по увеличению kmem
до 1Г не предупреждая что этого
нельзя делать на GENERIC ядре....
почему нельзя?
vm.kmem_size_max=1G
######## /etc/sysctl.conf
net.inet.tcp.blackhole=1
net.inet.udp.blackhole=1
kern.ipc.nmbclusters=262144
Зачем такой гемор, ограничения на
полгига при ядерной памяти на гиг ?
Потом подымай если что..
Ставим kern.ipc.nmbclusters=0 в /boot/loader.conf и все
работает.
что здесь означает 0 ?
Отсутствие ограничений на размер
зоны. Причем установка sysctl-а
kern.ipc.nmbclusters в loader.conf влияет и на другие
sysctl-ы, в
отличие от смены этого sysctl после
загрузки ядра.
kern.ipc.somaxconn=4096
kern.ipc.maxsockets=204800
kern.maxfiles=204800
kern.maxfilesperproc=200000
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65535
net.inet.ip.portrange.randomized=0
net.inet.tcp.recvspace=8192
net.inet.tcp.sendspace=16384
Зачем юзеру спешить что-то качать,
пусть понаблюдает как картинки одна
за одной возникают на странице.
Особенно если он на другом
континенте.
Или сервер досят сразу после
загрузки ? Впечатление что автор не
нашел
другого способа избежать паники от
нехватки ядерной памяти.
приступ паранойи был, вот и уменьшил
сколько рекомендуете поставить? сенд
-
256К или 512К ? страницы у нас в среднем
такие
128K в самый раз. Это чтоб быстро
работало. Чтоб не падало в панику от
нехватки памяти надо смотреть куда
она девается и там уже чинить.
net.inet.tcp.maxtcptw=40960
net.inet.tcp.msl=30000
net.inet.tcp.syncookies=1
net.inet.tcp.nolocaltimewait=1
net.inet.tcp.fast_finwait2_recycle=1
######## после всех мытарств, работа
системы весьма порадовала.
Для трафика до двухсот мегабит в
принципе сойдут и такие настройки.
ваши рекомендации? пол гигабита,
гигабит, 5, 10 гигабит
Скажем так, гигабит на ваших
рекомендация если и потянет то очень
специфичного трафика, вот что я имел
ввиду. Для того что-бы разгнать
сервер до 1Г надо другие настройки (в
каждом случае свои)
очень специфичный ответ ...
трафик простой, статика, динамика
(проксируемая), 1 Гбит (к примеру)
######## комменты только
приветствуются.
######## огромное пожелание к Игорю
включить сей опус с поправками и
комментариями (кои лично меня ОЧЕНЬ
интересуют) в документацию на
своём сайте.
######## данные конфиги являются
результатом печального опыта. если
не
указывать vm.kmem_size_max, ядру нехватит
памяти, для всей этой
красоты.
Ядру надо увеличивать память, не
вопрос. Как и уменьшать её лишнее
потребление. Но не банальным же
уменьшением tcp-буфера.
если "почистить" GENERIC, то много памяти
не выиграешь. по сравнению с тем
гимором, который можно получить
что там такого ужасного есть в GENERIC?
debug_symbols ? лучше пусть будут
Причем тут память занимаемая кодом.
Чистка ядра нужна не для того чтобы
освободить память занимаемую
драйвером, а чтобы снизить нагрузку от
вызова кода который все равно не
используется, например квоты, или
кто/что его будет вызывать?
ipsec, или драйвера usb.
И уж в корне неверно уменьшать
потребление памяти через уменьшение
буферов tcp, разве что сервер жестко
досят и по другому никак. Это тоже
самое что уменьшить в апаче MaxClients до
100 чтоб сервер не свопило (а
некоторые ещё и советуют KeepAlive
отключать, жесть)
######## успехов
|