Настройка производительности FreeBSD: параметр Sysctl, loader.conf, kernel

Я хотел поделиться знаниями о настройке FreeBSD с помощью sysctl.conf / loader.conf / KENCONF /и т. д. Первоначально он был основан на Игоре Сысоеве (автор nginx) презентация о настройке FreeBSD до 100 000-200 000 активных подключений. Более новые версии FreeBSD могут обрабатывать гораздо больше.

Настройки для FreeBSD7 - FreeBSD-CURRENT. Начиная с 7.2 amd64 некоторые из них настроенный по умолчанию. До 7.0 некоторые из них загружаются только (устанавливаются через /boot/loader.conf ) или вообще не существует.

sysctl.conf :

  # Нет функции отображения нуля
# Может сорвать вино
# (Есть также сообщения о сломанной samba3)
# Security.bsd.map_at_zero = 0

# Серверы с программным обеспечением для потоковой обработки apache2 /Pound может захотеть подняться после sysctl
# Kern.threads.max_threads_per_proc = 4096

# Макс. Размер отставания
# Примечание. Приложение все еще может ограничить его, передав второй аргумент для прослушивания (2) syscall
# Примечание: Прослушивание очереди отслеживается через `netstat -Lan`
kern.ipc.somaxconn = 4096

# Общая память
# Примечание. Только FreeBSD 7.2+ может использовать общую память> 2Gb
# Kern.ipc.shmmax = 2147483648

# Розетки
kern.ipc.maxsockets = 204800

# Mbuf 2k кластеров (по умолчанию amd64 7.2+ 25600)
# Примечание: значения по умолчанию для других переменных зависят от этой переменной, например `tcpreass`
# Примечание: FreeBSD-7 и старше: для такого высокого значения vm.kmem_size необходимо увеличить до 3G
kern.ipc.nmbclusters = 262144

# Jumbo pagesize (_SC_PAGESIZE) /9k /16k кластеров
# Используется как общая память пакетов для больших кадров на некоторых сетевых картах
# Можно контролировать через `netstat -m`
# Kern.ipc.nmbjumbop = 262144
# Kern.ipc.nmbjumbo9 = 65536
# Kern.ipc.nmbjumbo16 = 32768

# Для более низкой задержки вы можете уменьшить максимальный временной срез планировщика
# default: stathz /10 (~ 13)
kern.sched.slice = 1

# Увеличьте максимальную длину командной строки, указанную в `ps` (например, для Tomcat /Java)
# По умолчанию PAGE_SIZE /16 или 256 на x86
# Это позволяет избежать команд, которые будут представлены как [исполняемые] в `ps`
# Для получения дополнительной информации см .: http://www.freebsd.org/cgi/query-pr.cgi?pr=120749
kern.ps_arg_cache_limit = 4096

# Каждый сокет является файлом, поэтому увеличивайте его
kern.maxfiles = 204800
kern.maxfilesperproc = 200000
kern.maxvnodes = 200000

# На некоторых системах HPET почти в 2 раза быстрее, чем по умолчанию ACPI-fast
# Полезно для систем с большим количеством вызовов clock_gettime /gettimeofday
# См. Http://old.nabble.com/ACPI-fast-default-timecounter,-but-HPET-83--faster-td23248172.html
# После пересмотра 222222 HPET стал по умолчанию: http://svnweb.freebsd.org/base?view=revision&revision=222222
# -переменную kern.timecounter.hardware = HPET


# Небольшое место для приема, доступное только на http-сервере
# Примечание: файловые серверы должны увеличить его до 65535 или даже больше
# Net.inet.tcp.recvspace = 8192

# Это полезно для Fat-Long-Pipes
# Kern.ipc.maxsockbuf = 10485760
# Net.inet.tcp.recvbuf_max = 10485760
# Net.inet.tcp.recvbuf_inc = 65535

# Небольшое пространство для отправки полезно для серверов HTTP, обслуживающих небольшие файлы
# Примечание: Автонастройка с 7.x
# Net.inet.tcp.sendspace = 16384

# Это полезно для Fat-Long-Pipes
# Net.inet.tcp.sendbuf_max = 10485760
# Net.inet.tcp.sendbuf_inc = 65535

# Отключите отправку /получение автонастройки, если думаете, что знаете лучше.
# Net.inet.tcp.recvbuf_auto = 0
# Net.inet.tcp.sendbuf_auto = 0

# Это должно быть включено, если вы собираетесь использовать большие пробелы (& gt; 64k)
# Также поле метки времени полезно при использовании syncookies
net.inet.tcp.rfc1323 = 1
# Отключите это при высокоскоростных соединениях без потерь (LAN 1Gbit +)
# Net.inet.tcp.delayed_ack = 0

# Эта функция полезна, если вы обслуживаете данные по модемам, Gigabit Ethernet,
# или даже высокоскоростные WAN-соединения (или любая другая связь с продуктом с высокой пропускной способностью)
# особенно, если вы также используете масштабирование окна или настроили большое окно отправки.
# Автоматически отключается при небольшом RTT (http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/netinet/tcp_subr.c?#rev1.237)
# Этот sysctl был удален в 10-CURRENT:
# См .: http://www.mail-archive.com/[email protected]/msg06178.html
# Net.inet.tcp.inflight.enable = 0

# Настройка медленного алгоритма TCP
# Здесь мы принимаем ОЧЕНЬ незащищенную сеть
# Примечание: Вступает в силу, если net.inet.tcp.rfc3390 установлен в 0,
# иначе формула взята из http://tools.ietf.org/html/rfc3390
# Net.inet.tcp.slowstart_flightsize = 10
# Net.inet.tcp.local_slowstart_flightsize = 100

# Отключить рандомизацию портов, чтобы избежать ложных RST
# Перед использованием проверьте SA здесь www.bsdcan.org/2006/papers/ImprovingTCPIP.pdf
# Примечание: автодиагностика портов ранжирования при высоких скоростях соединения
# Net.inet.ip.portrange.randomized = 0

# Увеличить портрете
# Только для исходящих подключений. Хорошо подходит для почтовых ящиков и ftp-серверов.
net.inet.ip.portrange.first = 1024
net.inet.ip.portrange.last = 65535

# Dtops деградация кеша маршрута во время DDoS.
# http://www.freebsd.org/doc/en/books/handbook/securing-freebsd.html
# Net.inet.ip.rtexpire = 2
net.inet.ip.rtminexpire = 2
net.inet.ip.rtmaxcache = 1024

#Безопасность
net.inet.ip.redirect = 0
net.inet.ip.sourceroute = 0
net.inet.ip.accept_sourceroute = 0
net.inet.icmp.maskrepl = 0
net.inet.icmp.log_redirect = 0
net.inet.icmp.drop_redirect = 1
net.inet.tcp.drop_synfin = 1
#
# Также есть хороший пример sysctl.conf с комментариями:
# http://www.thern.org/projects/sysctl.conf
#
# icmp может не быть первым, полезным для этих досадных поддельных
# icmp /udp наводнения, которые в конечном итоге занимают ваши исходящие
# bandwidth /ifqueue из-за всего этого исходящего трафика RST.
#
# Net.inet.tcp.icmp_may_rst = 0

# Безопасность
# Не отправлять ответы о попытках подключения к закрытым портам
# Net.inet.udp.blackhole = 1
# Net.inet.tcp.blackhole = 2

# Безопасность IPv6
# Для получения дополнительной информации см. Http://www.fosslc.org/drupal/content/security-implications-ipv6
# Отключить информацию об информации узла
# Чтобы увидеть эту уязвимость в действии, запустите `ping6 -a sglAac :: 1` или` ping6 -w :: 1` на незащищенном узле
net.inet6.icmp6.nodeinfo = 0
# Включите расширения конфиденциальности IPv6
# Для получения дополнительной информации см. Предложение http://unix.derkeiler.com/Mailing-Lists/FreeBSD/net/2008-06/msg00103.html
net.inet6.ip6.use_tempaddr = 1
net.inet6.ip6.prefer_tempaddr = 1
# Отключить перенаправление ICMP
net.inet6.icmp6.rediraccept = 0
# Отключить прием RA и auto link-local generation, если вы их не используете
# Net.inet6.ip6.accept_rtadv = 0
# Net.inet6.ip6.auto_linklocal = 0

# Увеличивает TTL по умолчанию
# По умолчанию 64
# Net.inet.ip.ttl = 128

# Уменьшить максимальную продолжительность жизни сегмента для экономии ресурсов
# Время ожидания ACK в миллисекундах
# (по умолчанию: 30000. RFC с 1979 года рекомендует 120000)
net.inet.tcp.msl = 5000

# Максимальное количество гнезд времени ожидания
net.inet.tcp.maxtcptw = 200000
# Не используйте tw для локальных подключений
# По состоянию на 15 апреля 2009 года. Игорь Сысоев говорит, что nolocaltimewait имеет некорректную реализацию.
# Так отключите его или сейчас, пока не получите исправление
# Net.inet.tcp.nolocaltimewait = 1

# FIN_WAIT_2 состояние быстрой утилизации
net.inet.tcp.fast_finwait2_recycle = 1

# Время до отправки tcp keepalive probe отправляется
# по умолчанию - 2 часа (7200000)
# Net.inet.tcp.keepidle = 60000

# Используйте управление перегрузкой HTCP (не забудьте загрузить модуль ядра cc_htcp)
net.inet.tcp.cc.algorithm = HTCP

# Должно быть увеличено до тех пор, пока net.inet.ip.intr_queue_drops не станет равным нулю
net.inet.ip.intr_queue_maxlen = 4096

# Протокольное декодирование в потоке прерываний.
# Если у вас сетевой адаптер, который автоматически устанавливает flow_id, тогда лучше не
# используйте direct_force и используйте преимущества многопоточного netisr (9)
# Если у вас есть Yandex, вам лучше с `net.isr.direct_force = 1` и
# `net.inet.tcp.read_locking = 0`, иначе вы можете столкнуться с некоторыми связанными с TCP
# проблемы.
# Примечание. Если у вас есть старый сетевой адаптер, который не задает flow_ids, вам может потребоваться
# patch `ip_input`, чтобы вручную установить FLOW_ID через` nh_m2flow`.
#
# FreeBSD 8+
# Net.isr.direct = 1
# Net.isr.direct_force = 1
# В FreeBSD 9+ он был переименован в
# Net.isr.dispatch = прямой

# Это только для маршрутизаторов
# Net.inet.ip.forwarding = 1
# Net.inet.ip.fastforwarding = 1

# Эта скорость увеличивает dummynet, когда канал не насыщен
net.inet.ip.dummynet.io_fast = 1
# Увеличить dummynet (4) хэш
# Net.inet.ip.dummynet.hash_size = 65535
# Net.inet.ip.dummynet.max_chain_len = 8

# Должно быть увеличено, если у вас много файлов на сервере
# (Увеличение до тех пор, пока vfs.ufs.dirhash_mem не станет ниже)
vfs.ufs.dirhash_maxmem = 67108864

# Примечание от фиксации http://svn.freebsd.org/base/[email protected]:
# Для систем с томами RAID и /или средами виртуализации, где
# чтение производительности очень важно, увеличивая этот sysctl, настраиваемый до 32
# или даже больше продемонстрирует дополнительные преимущества производительности.
vfs.read_max = 32

# Явное уведомление о перегрузке
# (См. Http://en.wikipedia.org/wiki/Explicit_Congestion_Notification)
net.inet.tcp.ecn.enable = 1

# Flowtable - механизм кэширования потока
# Полезно для маршрутизаторов
# Net.inet.flowtable.enable = 1
# Net.inet.flowtable.nmbflows = 65535

# Динамические правила IPFW и настройка тайм-аутов
# Увеличить dyn_buckets до net.inet.ip.fw.curr_dyn_buckets ниже
net.inet.ip.fw.dyn_buckets = 65536
net.inet.ip.fw.dyn_max = 65536
net.inet.ip.fw.dyn_ack_lifetime = 120
net.inet.ip.fw.dyn_syn_lifetime = 10
net.inet.ip.fw.dyn_fin_lifetime = 2
net.inet.ip.fw.dyn_short_lifetime = 10
# Сделать пакеты передают брандмауэр только один раз при использовании dummynet
# то есть пакеты, идущие через канал, выходят из брандмауэра с приемом
# Net.inet.ip.fw.one_pass = 1

# shm_use_phys Проводит все общие страницы, что делает их неприменимыми
# Используйте это, чтобы уменьшить работу Диспетчера виртуальной памяти при использовании Shared Mem.
# Полезно для баз данных
# Kern.ipc.shm_use_phys = 1

# ZFS
# Включить предварительную выборку. Полезно для файлового сервера с последовательной загрузкой.
# FreeBSD устанавливает vfs.zfs.prefetch_disable в 1 на любых системах i386 и
# на любых системах amd64 с объемом памяти менее 4 ГБ
# См.: Http://old.nabble.com/Samba-read-speed-performance-tuning-td27964534.html
# Vfs.zfs.prefetch_disable = 0

# На серверах с высокой загрузкой вы можете заметить следующее сообщение в dmesg:
# «Приближаясь к лимиту на записи PV, рассмотрите возможность увеличения
# vm.pmap.shpgperproc или vm.pmap.pv_entry_max настраиваемый "
vm.pmap.shpgperproc = 2048
 

loader.conf :

  # Принять фильтры дляданные, HTTP и DNS-запросы
# Полезно, когда ваше программное обеспечение создает процесс /поток для каждого запроса (то есть apache)
# Примечание: DNS accf доступен на 8.0+
# Примечание: в случае плохо написанного программного обеспечения это может повысить производительность,
#, но я по-прежнему рекомендую не использовать фильтры принятия в процессе производства из-за
# их непрозрачность - они действительно нарушают абстракции. Кроме того, отладка /мониторинг не является тривиальным
# их состояние.
# Accf_data_load = "ДА"
# Accf_http_load = "ДА"
# Accf_dns_load = "ДА"

# Системные вызовы Async IO
aio_load = "ДА"

# Устройства Linux в /dev
# Что касается 8.1, то это только /dev /full
# Lindev_load = "ДА"

# Добавляет поддержку NCQ во FreeBSD
# ПРЕДУПРЕЖДЕНИЕ! все объявления [0-9] + устройства будут переименованы в ada [0-9] +
# 8.0+ только
# Ahci_load = "ДА"
# Siis_load = "ДА"

# FreeBSD 9+
# Новый контроль перегрузки для FreeBSD
cc_htcp_load = "ДА"
# Cc_cubic_load = "ДА"

# Увеличьте объем памяти ядра до 3G.
#
# Используйте ТОЛЬКО, если у вас есть KVA_PAGES в конфигурации ядра, и у вас больше 3G RAM
# В противном случае при следующей перезагрузке произойдет паника!
#
# Требуется для больших размеров буфера: kern.ipc.nmbjumbop, kern.ipc.nmbclusters и т. Д.
# Полезно для брандмауэров, прокси-серверов или ZFS-серверов с высокой нагрузкой
# (Пользователи FreeBSD 7.2+ amd64: проверьте, что текущее значение ниже!)
# Vm.kmem_size = "3G"

# Если у вас действительно занят forking webserver (т. Е. Apache13), у вас могут закончиться процессы
# 10000 = kern.maxproc, введите

# Если ваш сервер имеет большое количество свопов (& gt; 4Gb), вы должны увеличить следующее значение
# согласно http://lists.freebsd.org/pipermail/freebsd-hackers/2009-October/029616.html
# В противном случае вы будете получать ошибки
# "kernel: swap zone исчерпан, увеличить kern.maxswzone"
# Kern.maxswzone = "256M"

# Старые версии FreeBSD не могут настраивать maxfiles на лету
# Kern.maxfiles = "200000"

# Полезно для баз данных
# Устанавливает максимальный размер данных до 1G
# (Пользователи FreeBSD 7.2+ amd64: проверьте, что текущее значение ниже!)
# Kern.maxdsiz = "1G"

# Максимальный размер буфера (vfs.maxbufspace)
# Вы можете проверить текущий через vfs.bufspace
# Следует опускать /повышать в зависимости от типа загрузки сервера
# Обычно уменьшается, чтобы сохранить kmem
# (по умолчанию 10% от mem)
# Kern.maxbcache = "512M"

# Буферы отправки файлов
# Примечание: только i386
# Kern.ipc.nsfbufs = 10240

# настройка синхронизации
net.inet.tcp.syncache.hashsize = 32768
net.inet.tcp.syncache.bucketlimit = 32
net.inet.tcp.syncache.cachelimit = 1048576

# Отправить RST при переполнении очереди ожидания /нехватке памяти.
# Хосты позади Load-Balancer должны установить значение 1 для быстрого выхода.
# Хосты, обращенные к клиентам, должны установить значение 0 для повторного подключения клиента.
# Net.inet.tcp.syncache.rst_on_sock_fail = 0

# Увеличенный хост-код
# Более поздний кеш-хост можно просмотреть через net.inet.tcp.hostcache.list hidden sysctl
# Очень полезно для RTT RTTVAR
# Должна быть сила двух
net.inet.tcp.hostcache.hashsize = 65536
# hashsize * bucketlimit (по умолчанию 30)
# Он выделяет 255 Мб (1966080 * 136) ОЗУ
net.inet.tcp.hostcache.cachelimit = 1966080

# TCP control-block Настройка таблицы хешей
# См.: Http://serverfault.com/questions/372512/why-change-net-inet-tcp-tcbhashsize-in-freebsd
net.inet.tcp.tcbhashsize = 524288

# Отключить ipfw запретить все
# Должен быть раскоментирован, когда есть вероятность, что
# kernel и ipfw двоичные файлы могут быть не синхронизированы при следующей перезагрузке
# Net.inet.ip.fw.default_to_accept = 1

#
# SIFTR (статистическая информация для исследования TCP) - это модуль ядра, который
# регистрирует диапазон статистики активных подключений TCP к файлу журнала.
# См. Примечания:
# http://groups.google.com/group/mailing.freebsd.current/browse_thread/thread/b4c18be6cdce76e4
# и человек 4 sitfr
# Siftr_load = "ДА"

# Включить суперстраницы, только для 7.2+
# См .: http://lists.freebsd.org/pipermail/freebsd-hackers/2009-November/030094.html
vm.pmap.pg_ps_enabled = 1

# Полезно, если вы используете Intel-Gigabit NIC
# Hw.em.rxd = 4096
# Hw.em.txd = 4096
# Hw.em.rx_process_limit = -1
# Также, если у вас есть LOT прерывания на NIC - игра со следующими параметрами
# ПРИМЕЧАНИЕ. Вы должны установить их для каждой сетевой платы
# dev.em.0.rx_int_delay: 250
# dev.em.0.tx_int_delay: 250
# dev.em.0.rx_abs_int_delay: 250
# dev.em.0.tx_abs_int_delay: 250
# Существует также многопоточная версия драйверов em /igb, которые можно найти здесь:
# http://people.yandex-team.ru/~wawa/
#
# для дополнительного мониторинга и использования статистики
# sysctl dev.em.0.stats = 1; dmesg
# sysctl dev.em.0.debug = 1; dmesg
# Также после r209242 (-CURRENT) существует отдельная sysctl для каждой переменной stat;
# Те же настройки для igb
# Hw.igb.rxd = 4096
# Hw.igb.txd = 4096
# Hw.igb.rx_process_limit = -1

# Некоторые полезные сетевые настройки netisr. См. Sysctl net.isr
# 4 = net.isr.maxthreads
# Net.isr.defaultqlimit = 10240
# Net.isr.maxqlimit = 10240
# Связывание потоков netisr с процессорами
# Net.isr.bindthreads = 1

#
# FreeBSD 9.x +
# Увеличить длину очереди отправки интерфейса
# См. Сообщение о фиксации http://svn.freebsd.org/viewvc/base?view=revision&revision=207554
# Net.link.ifqmaxlen = 1024

# Nicer boot logo =)
loader_logo = "Beastie"
 

И, наконец, вот KERNCONF :

  # Только некоторые из них, см. также
# cat /sys /{i386, amd64,} /conf /ПРИМЕЧАНИЯ

# Это полезно только для i386
#options KVA_PAGES = 512
# ИзОБНОВЛЕНИЕ 20121223:
# После переключения на Clang в качестве компилятора по умолчанию некоторые пользователи ZFS
# на i386-системах начали испытывать проблемы с переполнением стека.
# Пожалуйста, рассмотрите возможность использования «options KSTACK_PAGES = 4» в таких конфигурациях.
#options KSTACK_PAGES = 4

# Вы можете играть с HZ в средах с высокой частотой прерываний (по умолчанию 1000)
# 100 для моего ноутбука продлить его срок службы батареи
#options HZ = 100

# Устранить datacopy в сокете read-write
# Чтобы воспользоваться преимуществами нулевых сокетов, вы должны иметь MTU> = 4k
# Этот запрос. только для приема данных.
# Подробнее в man zero_copy_sockets
# Также этот эпический поток на ловушке ядра:
# http://kerneltrap.org/node/6506
# В заключение Линус говорит:
# «любой, кто делает это таким образом (FreeBSD), полностью некомпетентен»
#
# Также см. /Usr /src /UPDATING 20121023 для заметок о
# SOCKET_SEND_COW и SOCKET_RECV_PFLIP
#options ZERO_COPY_SOCKETS

# Поддержка знака TCP. Используется для IPSec
опции TCP_SIGNATURE
# В стеке KAME IPSec найдено stackoverflow:
# См. Http://secunia.com/advisories/43995/
# Для быстрого обхода вы можете использовать `ipfw add deny proto ipcomp`
опции IPSEC

# Эти могут быть загружены как модули. Они описаны в разделе loader.conf
#options ACCEPT_FILTER_DATA
#options ACCEPT_FILTER_HTTP

# Добавление ipfw, также может быть загружено как модули
опции IPFIREWALL
# На странице 8.1+ вы можете отключить подробный просмотр заблокированных пакетов на интерфейсе ipfw0.
# Также нет смысла составлять подробные данные в ядре, потому что
# сейчас есть net.inet.ip.fw.verbose перестраиваемый.
#options IPFIREWALL_VERBOSE
#options IPFIREWALL_VERBOSE_LIMIT = 10
# Параметр ядра IPFIREWALL_FORWARD удален. это
# теперь включена по умолчанию.
#options IPFIREWALL_FORWARD
# Добавление ядра NAT
опции IPFIREWALL_NAT
варианты LIBALIAS
# Формирование трафика
опции DUMMYNET
# Переадресация, то есть для пользовательского пространства NAT
опции IPDIVERT

# Это для брандмауэра pf для OpenBSD
устройство pf
устройство pflog
# pf's QoS - ALTQ
опции ALTQ
опции ALTQ_CBQ # Класс Bases Queuing (CBQ)
опции ALTQ_RED # Случайное раннее обнаружение (RED)
опции ALTQ_RIO # RED In /Out
options ALTQ_HFSC # Иерархический планировщик пакетов (HFSC)
опции ALTQ_PRIQ # Приоритетная очередь (PRIQ)
опции ALTQ_NOPCC # Требуется для сборки SMP

# Довольно консоль
# Руководство можно найти здесь http://forums.freebsd.org/showthread.php?t=6134
#options VESA
#options SC_PIXEL_MODE

# Отключить перезагрузку на Ctrl Alt Del
#options SC_DISABLE_REBOOT
# Изменить нормальный цвет сообщений ядра
опции SC_NORM_ATTR = (FG_GREEN | BG_BLACK)
опции SC_KERNEL_CONS_ATTR = (FG_YELLOW | BG_BLACK)
# Больше пространства прокрутки
опции SC_HISTORY_SIZE = 8192

# Добавление аппаратного криптового устройства
криптографическое устройство
устройство cryptodev

# Полезные сетевые интерфейсы
устройство vlan
Кран устройства # Виртуальный Ethernet-драйвер
устройство gre #IP через IP-туннелирование
устройство if_bridge # Интерфейс Bridge
device pfsync #synchronization interface для PF
Устройство Carp #Common Address Redundancy Protocol
интерфейс устройства #IPsec
устройство lagg # Интерфейс агрегирования ссылок
device stf # IPv4-IPv6-порт

# Также для моего ноутбука, но может быть использован с Opteron
устройство amdtemp
# То же самое для процессоров Intel
устройство coretemp

# человек 4 cpuctl
Устройство cpuctl # Псевдо-устройство управления процессором

# Поддержка ECMP. Более одного маршрута для пункта назначения
# Работает даже с маршрутом по умолчанию, поэтому можно использовать его как LB для двух интернет-провайдеров
# На данный момент код нестабилен и паники (panic: rtfree 2) при удалении маршрута.
#options RADIX_MPATH

# Многоадресная маршрутизация
#options MROUTING
#options PIM

# Debug & amp; DTrace
опции KDB # Код ядра отладчика
options KDB_TRACE # Печать трассировки стека для паники
опции KDTRACE_FRAME # amd64-only (?)
опции KDTRACE_HOOKS # все архитектуры - включить общие привязки DTrace
#options DDB
#options DDB_CTF # все архитектуры - ядро ​​ELF-линкера загружает данные CTF

# Адаптивное скручивание в lockmgr (8.x +)
# См. Http://www.mail-archive.com/[email protected]/msg10782.html
опции ADAPTIVE_LOCKMGRS

# UTF-8 в консоли (8.x +)
#options TEKEN_UTF8

# FreeBSD 8.1+
# Резьбовое сечение взаимоблокировки
# Для получения дополнительной информации см. Http://www.mail-archive.com/[email protected]/msg18124.html
# (FYI: «разрешение» является паникой, поэтому используйте с осторожностью)
#options DEADLKRES

# Увеличить максимальный размер Raw I /O и sendfile (2) readahead
#опцииMAXPHYS = (1024 * 1024)
#options MAXBSIZE = (1024 * 1024)

# Для отладки планировщика включите следующую опцию.
# Отладка будет доступна через `kern.sched.stats` sysctl
# Для получения дополнительной информации см. Http://svnweb.freebsd.org/base/head/sys/conf/NOTES?view=markup
#options SCHED_STATS

# Рамка для очень эффективного пакетного ввода-вывода из пользовательского пространства, способного
# скорость линии на 10G (FreeBSD10 +)
# См. Http://svnweb.freebsd.org/base?view=revision&revision=227614
#device netmap
 

Если вы настроите сеть на максимальную производительность, вы можете играть с ifconfig , например:

  # Вы можете перечислить все возможности с помощью `ifconfig -m`
ifconfig [-] rxcsum [-] txcsum [-] tso [-] lro mtu
 

Если вы включили DDB в конфигурации ядра, вы должны отредактировать свой /etc/ddb.conf и добавьте что-то вроде этого, чтобы включить автоматическую перезагрузку (и textdump как бонус):

  script kdb.enter.panic = textdump set; захват; показать pcpu; Ь; пс; alltrace; захватить; call doadump; сброс
script kdb.enter.default = набор текстовых полей; захват; Ь; пс; захватить; call doadump; сброс
 

И не забудьте добавить ddb_enable = "YES" в /etc/rc.conf

Так как FreeBSD 9 вы можете включить /отключить flowcontrol на вашей сетевой карте:

  # См. http://en.wikipedia.org/wiki/Ethernet_flow_control и
# http://www.mail-archive.com/[email protected]/msg07927.html для дополнительной информации
ifconfig bge0 media auto mediaopt flowcontrol
 

Большинство ограничений FreeBSD можно отслеживать с помощью:

  # vmstat -z
 

и

  # limits
 

Различные сетевые счетчики можно отслеживать через

  # netstat -s
 

В появившейся опции FreeBSD-8 + netstat -Q попробуйте выполнить следующую команду: netisr статистика

  # netstat -Q
 

Для решения нетривиальных проблем TCP можно использовать net.inet.tcp.log_debug , он производит выход dmesg, аналогичный:

  Ядро хоста: TCP: [0.0.0.0]: от 0 до [1.1.1.1]: 1; syncache_socket: Сбой создания сокета из-за ограничений или нехватки памяти
Ядро хоста: TCP: [0.0.0.0]: от 0 до [1.1.1.1]: 1 tcpflags 0x10 <ACK & gt ;; tcp_input: Слушать сокет: Распределение сокетов не удалось из-за ограничений или нехватки памяти, отправка RST
 

<сильный> NB!
Последнее, но не менее важное: если вы подключаетесь к сети - это хорошо практикуйте, чтобы купить лучшую сетевую карту, которую вы можете себе позволить. Я лично предпочитаю Intel igb (4) , список моделей можно найти в if_igb.c

PS. также см.

  # настройка человека 7
 

И FreeBSD Wiki по настройке производительности сети , сделанные самими разработчиками.

<сильный> ПФС. Calomel.org - блог с открытым исходным кодом и справочный блог имеет приятную информацию о производительности сети и недавнюю статью о Настройка и оптимизация FreeBSD .

Спасибо
Я хотел поблагодарить сообщество FreeBSD, особенно автор nginx - Igor Сысоев, nginx-ru @ и списки рассылки FreeBSD-performance @ для предоставления полезных информацию о настройке FreeBSD. Любители Яндекса BSD от noc @ и search-admin @ , особенно melifaro @ и zont @ .

<сильный> Отказ
Это определенно не то, что вы должны копировать /вставлять в свое производство конфиги! Некоторые из предоставленных «настроек» могут быть даже вредными. Используйте предоставленные данные как ссылка для дальнейшего исследования или тестирования A /B. Я говорю это снова, чтобы быть Явный: НЕ СЛЕДУЕТ ПРИМЕНЯТЬ «ТЮНИНГЫ», ВЫ НАХОДИТЕСЬ В ИНТЕРНЕТЕ! .
Перед применением любого sysctl в производственной системе вы должны изучить (важно посмотреть в исходном коде ядра) и измерить его (если они есть) в тестовой среде.
Используйте этот пост на свой страх и риск.

FreeBSD WIP
* Что готовит для FreeBSD 7?
* Что готовит для FreeBSD 8?
* Что готовит для FreeBSD 9?
* Что нового для FreeBSD 10?
* Что нового для FreeBSD 11?

Вопрос для зрителей
Какие настройки вы используетена ваших серверах FreeBSD?

Вы также можете опубликовать свой /etc/sysctl.conf , /boot/loader.conf , параметры ядра, и т. д. с описанием его значения (не копировать-вставить из sysctl -d ). Не забудьте указать тип сервера (frontend, backend, cache, db, storage, шлюз и т. д.)

Давайте поделимся опытом!

122 голоса | спросил 125 revs, 4 users 100%
SaveTheRbtz
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

4 ответа


11

Я бы рекомендовал против опции IPFIREWALL_DEFAULT_TO_ACCEPT . По умолчанию используется значение «По умолчанию для отказа». Брандмауэр имеет только одно правило deny ip от любого к любому и остается таким образом, пока скрипт не настроит точно, какой трафик должен пройти.

Последующее примечание: RSA (одна из ведущих мировых компаний в области технологий безопасности) была взломана недавно , когда часть брандмауэра была отключена во время окна обслуживания. Это действительно подчеркивает, насколько быстро система может быть скомпрометирована при правильных условиях.

Если вы настаиваете на отключении брандмауэра, пока вы явно не заблокируете нежелательный трафик, рассмотрите возможность использования sysctl, добавив net.inet.ip.fw.default_to_accept = 1 в loader.conf . Это имеет дополнительное преимущество: легко изменять (не перекомпилировать ядро), если вы передумаете в какой-то момент в будущем.

ответил the-wabbit 9 52012vEurope/Moscow11bEurope/MoscowFri, 09 Nov 2012 22:21:54 +0400 2012, 22:21:54
7

Из стандартного sysctl.conf он обеспечивает «безопасность» для сценаристов-девичников, которым удастся навести порядок в учетной записи, отличной от root. Не мешает ему активировать (в большинстве случаев исключения - это непривилегированные демоны, которым нужно просмотреть список процессов).

  # Раскомментируйте это, чтобы пользователи не могли видеть информацию о процессах, которые
# запускаются под другим UID.
security.bsd.see_other_uids = 0
 
ответил the-wabbit 9 52012vEurope/Moscow11bEurope/MoscowFri, 09 Nov 2012 22:21:54 +0400 2012, 22:21:54
7

Я обычно добавляю следующие файлы в свой файл /etc/sysctl.conf ...

net.inet.tcp.blackhole = 2
net.inet.udp.blackhole = 1

и оба

security.bsd.see_other_uids = 0
security.bsd.see_other_gids = 0

пока мы на тему настройки, я также рекомендую посмотреть здесь:

NGINX + PHP-FPM + APC = Awesome

так, этот учебник по FreeBSD +, этот учебник по NGINX = Действительно Удивительный! ;)

ответил the-wabbit 9 52012vEurope/Moscow11bEurope/MoscowFri, 09 Nov 2012 22:21:54 +0400 2012, 22:21:54
7

Права безопасности

  security.bsd.see_other_uids = 0
security.bsd.see_other_gids = 0
security.bsd.conservative_signals = 1
security.bsd.unprivileged_proc_debug = 0
security.bsd.unprivileged_read_msgbuf = 0
security.bsd.hardlink_check_uid = 1
security.bsd.hardlink_check_gid = 1
vfs.usermount = 0
net.inet.tcp.log_in_vain = 1
net.inet.udp.log_in_vain = 1
 
ответил the-wabbit 9 52012vEurope/Moscow11bEurope/MoscowFri, 09 Nov 2012 22:21:54 +0400 2012, 22:21:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132