2015-01-22
QR-код чтение и создание
QR-код (Quick Response - быстрый отклик) - матричный код (двухмерный
штрих код), разработанный и представленный японской компанией
«Denso-Wave» в 1994 году.
Рассмотрим варианты для Ubuntu
zbar-tools консольная утилита для считывания
Варианты:
Рассмотрим варианты для Ubuntu
zbar-tools консольная утилита для считывания
$zbarimg для файлов или url ссылок
$zbarcam для устройства видеозахвата (камеры)
qrencode консольная утилита для считывания и создания$zbarcam для устройства видеозахвата (камеры)
$ qrencode -o [filename.png] '[text/url/information to encode]'
$ qrencode -o google.png 'http://www.google.com'
$ qrencode -o ~/Desktop/google.png -s 6 'http://www.google.com'
qreator ГУИ утилита для создания$ qrencode -o google.png 'http://www.google.com'
$ qrencode -o ~/Desktop/google.png -s 6 'http://www.google.com'
Варианты:
- URL - Генерация кода с ссылкой
- Text - Генерация кода с любым текстом
- Geolocation - Ваше местонахождение в QR-коде (только у меня почему-то не загрузилась карта)
- WiFi Network - Генерация кода с данными о Wi-Fi
sudo add-apt-repository ppa:dpm/ppa
sudo apt-get update
sudo apt-get install qreator
sudo apt-get update
sudo apt-get install qreator
TCP tuning
Рекомендованные настройки для /etc/sysctl.conf (часть из них – по
умолчанию, но приводится для тех, кто по каким-либо причинам внес
изменения вручную):
# set to at least 16MB
kern.ipc.maxsockbuf=16777216
# set autotuning maximum to at least 16MB too
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.recvbuf_max=16777216
# enable send/recv autotuning
net.inet.tcp.sendbuf_auto=1
net.inet.tcp.recvbuf_auto=1
# increase autotuning step size
net.inet.tcp.sendbuf_inc=16384
net.inet.tcp.recvbuf_inc=524288
# turn off inflight limitting
net.inet.tcp.inflight.enable=0
# set this on test/measurement hosts
net.inet.tcp.hostcache.expire=1
Начиная с FreeBSD 8.2 можем включить H-TCP:kern.ipc.maxsockbuf=16777216
# set autotuning maximum to at least 16MB too
net.inet.tcp.sendbuf_max=16777216
net.inet.tcp.recvbuf_max=16777216
# enable send/recv autotuning
net.inet.tcp.sendbuf_auto=1
net.inet.tcp.recvbuf_auto=1
# increase autotuning step size
net.inet.tcp.sendbuf_inc=16384
net.inet.tcp.recvbuf_inc=524288
# turn off inflight limitting
net.inet.tcp.inflight.enable=0
# set this on test/measurement hosts
net.inet.tcp.hostcache.expire=1
net.inet.tcp.cc.default.algo=htcp
По умолчанию параметр inflight limiting
включен, что хорошо для модемной связи, но может приводит к ухудшению
связи в ряде случаев при высокоскоростном соединении. Поэтому выключаем.
По умолчанию FreeBSD кэширует соединения в течение одного часа, что
хорошо для web-сервера, но в других случаях приводит к снижению
производительности канала. Поэтому, если у нас не web-сервер, приводим
hostcache.expire к значению 1, что назначает время кэширования в 5
минут. Более подробно здесь.Unicode
Таблица наиболее востребованных символов Unicode
Как будет выглядеть | Код Unicode |
---|---|
€ | € |
▲ | ▲ |
► | ► |
▼ | ▼ |
◄ | ◄ |
■ | ■ |
□ | □ |
▣ | ▣ |
▤ | ▤ |
▥ | ▥ |
▦ | ▦ |
▧ | ▧ |
▨ | ▨ |
▩ | ▩ |
▪ | ▪ |
▫ | ▫ |
◊ | ◊ |
○ | ○ |
● | ● |
☺ | ☺ |
☻ | ☻ |
☼ | ☼ |
♀ | ♀ |
♂ | ♂ |
♠ | ♠ |
♤ | ♤ |
♣ | ♣ |
♧ | ♧ |
♥ | ♥ |
♡ | ♡ |
♦ | ♦ |
★ | ★ |
☆ | ☆ |
⌂ | ⌂ |
№ | № |
☎ | ☎ |
☏ | ☏ |
♨ | ♨ |
☜ | ☜ |
☞ | ☞ |
♩ | ♩ |
♪ | ♪ |
♫ | ♫ |
♬ | ♬ |
♭ | ♭ |
† | † |
‡ | ‡ |
← | ← |
↑ | ↑ |
→ | → |
↓ | ↓ |
↔ | ↔ |
↕ | ↕ |
↖ | ↖ |
↗ | ↗ |
↘ | ↘ |
↙ | ↙ |
§ | § |
« | « |
» | » |
© | © |
® | ® |
™ | ™ |
Ограничить доступ ко всему сайту
С помощью .htaccess можно управлять доступом ко
всему сайту. К примеру, если сайт еще в разработке, но его нужно
показывать заказчику, да и самому иметь возможность тестировать его на
реальном сервере.
Для этого ограничения используются директивы
Например, так можно полностью запретить доступ к файлу .htaccess:
<Limit GET POST PUT>
Order deny,allow
Deny from all
Allow from 192.168.1.1
Allow from 172.16.1.1
</Limit>
Order deny,allow
Deny from all
Allow from 192.168.1.1
Allow from 172.16.1.1
</Limit>
Ограничение доступа
С помощью файла .htaccess можно управлять доступом к ресурсам сервера.Для этого ограничения используются директивы
Order
, Allow
и Deny
Директива Order
Устатавливает порядок работы директивDeny
и Allow
Order порядокГде порядок может принимать значения
Deny,Allow
или Allow,Deny
. По умолчанию:
Order Deny, Allow
Директива Deny
Запрещает доступ определенных клиентов к ресурсам.
Deny from all|host
Где host
может принимать значения IP адреса или имени хоста.Директива Allow
В отличие отDeny
разрешает доступ определенных клиентов к ресурсам.
Allow from all|host
host
может принимать значения IP адреса или имени хоста.Примеры использовани директив Order, Allow, Deny
Запретить доступ для всех:
Order deny,allow
Deny from all
Разрешить доступ для определенных адресов:
Order deny,allow
Deny from all
Allow from 192.168.1.1
Allow from 172.16.1.1
Запретить доступ с определенных адресов:Deny from all
Allow from 192.168.1.1
Allow from 172.16.1.1
Order allow, deny
Allow from all
Deny from 192.168.1.1
Deny from 172.16.1.1
Allow from all
Deny from 192.168.1.1
Deny from 172.16.1.1
Защита файлов от скачивания
С помощью .htaccess можно управлять доступом к файлам сервера.Например, так можно полностью запретить доступ к файлу .htaccess:
# Закрываем доступ к .htaccess
<Files .htaccess>
Order deny, allow
Deny from all
</Files>
Также можно разрешать или запрещать доступ к файлам с определенных IP-адресов. Например:<Files .htaccess>
Order deny, allow
Deny from all
</Files>
# Открыть доступ для определенного IP
<Files config.inc>
Order deny, allow
Deny from all
Allow from 192.168.1.1 </Files>
<Files config.inc>
Order deny, allow
Deny from all
Allow from 192.168.1.1 </Files>
# Закрываем доступ с определенного IP
<Files config.inc>
Order allow, deny
Allof from all
Deny from 192.168.1.1 </Files>
<Files config.inc>
Order allow, deny
Allof from all
Deny from 192.168.1.1 </Files>
Тюнинг FreeBSD 7-8 (sysctl, loader.conf)
Предупреждение: Бездумное копирование опций не всегда приводит к приросту производительности!!!
/etc/sysctl.conf
/etc/sysctl.conf
###### Формат записей " параметр=значение # значение по умолчанию "
NETWORK
Запрет ответа при обращении на закрытые порты.
По стандарту, если на закрытый порт сервера приходит SYN-пакет, машина должна ответить RST-пакетом. Это упрощает сканирование портов, а также дает достаточное количество информации (в виде ответов от сканируемого сервера) для определения версии ОС. "Черные дыры" заставляют FreeBSD быть предельно лаконичной, не отсылая ничего в ответ на запросы к закрытым портам.
net.inet.tcp.blackhole=2 # 0
net.inet.udp.blackhole=1 # 0
Увеличение размера очереди.
Защита очереди от SYN атак kern.ipc.somaxconn=4096 # 128
Чтобы сервер не стал жертвой DoS-атаки, можно включить механизм syncookies, который служит для защиты сервера от SYN-флуда. Когда новое соединение не помещается в переполненный syncache, FreeBSD переходит в режим "syncookies" (TCP SYN cookies).
При серьезной атаке может не менее серьезно выручить.
net.inet.tcp.syncookies=1 # 1
Запрет ответа на широковещательный ECHO
Современная система не должна отвечать на широковещательные пинги, но и по сей день существуют сети, которые могут стать источником DoS-атаки. Чтобы не попасть в их список, выставляем:
net.inet.icmp.bmcastecho=0 # 0
Дропать все пакеты с флагами SYN+FIN.
Если не нужна поддержка смешного протокола T/TCP (TCP for Transactions), то пакеты с флагами SYN+FIN можно смело отбрасывать как неликвидные :).
Протокол редко где используется, а потому это имеет смысл
net.inet.tcp.drop_synfin=1
Запрет ридеректов
net.inet.icmp.drop_redirect=1 # 1
net.inet.icmp.log_redirect=1 # 1
net.inet.ip.redirect=0 # 1
#net.inet6.ip6.redirect=0 #ipv6 disable in kernel
Очистка таблицы ARP через .... секунд
net.link.ether.inet.max_age=1200 # 1200
Запрет на "прощупывание" внутренней сети
net.inet.ip.sourceroute=0 # 0
net.inet.ip.accept_sourceroute=0 # 0
Запрет запроса маски адреса, запрет широковещательного запроса временного штампа (timestamp)
net.inet.icmp.maskrepl=0 # 0
Максимальное количество пакетов ICMP <<Недостижимо>> (icmp type 3), а также количество отсылок TCP RST пакетов в секунду.
net.inet.icmp.icmplim=100 # 200
Увеличение размера TCP-буферов, для оптимизации при большом потоке данных HTTP FTP.
Но стоит помнить, что слишком объемные буферы быстро приведут к исчерпанию памяти при большом количестве подключений. Для веб-сервера, который принимает много коротких запросов и отправляет большие объемы данных, размер выходного буфера рекомендуется увеличить в ущерб входного.
net.inet.tcp.sendspace=32768 # 32768
net.inet.tcp.recvspace=65536 # 65536
Выставляет maximum segment lifetime.
Определяет максимальное время жизни сегмента (Maximum Segment Life - MSL)
После того как соединение закрывается сокет переходит в состояние TIME_WAIT Это максимальное количество времени ожидания ACK в ответ на SYN-ACK или FIN-ACK в миллисекундах В этом состоянии он может находится по умолчанию в течение 60 секунд. Время можно изменить через sysctl (в миллисекундах деленных на 2, 2 x 30000 MSL = 60 секунд)
net.inet.tcp.msl=7500 # 30000
Во FreeBSD 6.2 TIME_WAIT сокеты обрабатываются отдельно (нужна лишь часть информации 48 байт из 1 Кб. Ограничение вне лимита kern.ipc.maxsockets)
net.inet.tcp.maxtcptw=40960 # 40960
По умолчанию исходящие соединения инициируются с диапазона портов 49152-65535 (16 тыс.). Во FreeBSD 8.1 - порты 10000 - 65535 Их неплохо увеличить (1024-65535):
net.inet.ip.portrange.first=1024 # 10000
net.inet.ip.portrange.last=65535
Не менять ttl при транзите пакетов
net.inet.ip.stealth=0 # 0
Включение пуллинга
kern.polling.enable=0 # 0
Pooling
kern.polling.each_burst=5 # 5
kern.polling.burst_max=1000 # 150
Установка значения ttl под Windows
net.inet.ip.ttl=128 # 64
Максимальаня длина приёмной очереди, при переполнении которой стек дропает входящие пакеты
net.inet.ip.intr_queue_maxlen=4096 # 50
Увеличить максимальное число открытых сокетов
sysctl kern.ipc.maxsockets=204800 # 25600
Если машина обрабатывает несколько десятков тысяч соединений, то tcb hash позволяет быстро определять принадлежность пришедшего пакета к определенному соединению.
net.inet.tcp.tcbhashsize=4096 # 4096
Для использования портов по порядку, вместо случайной выборки (для исключения ошибки повторного коннекта с одного порта до отработки TIME_WAIT):
net.inet.ip.portrange.randomized=0 # 1
Во FreeBSD 6.2 появилась возможность не создавать состояние TIME_WAIT для соединений в рамках localhost:
net.inet.tcp.nolocaltimewait=1 # 0
DummyNET - шейпинг на IPFW
net.inet.ip.dummynet.io_fast - если трафик помещается в заданную полосу, не пропускать его через очередь и отдельный поток. Если нет необходимости эмулировать задержки и потери в канале - очень сильно сохраняет ресурсы. При использовании этой опции практически отпадает необходимость в распараллеливании dummynet
net.inet.ip.dummynet.io_fast=1
net.inet.ip.intr_queue_maxlen, net.route.netisr_maxqlen - фактически - размеры входящей и исходящей очередей. При большой нагрузке в режиме маршрутизации есть смысл увеличивать эти значения. Непоместившийся пакет выбрасывается. Это условно спасет при кратковременных перегрузках (часть пакетов пролетит с большой задержкой), но совершенно не спасет при хроничеких.
net.isr.direct - обрабатывать исходящие пакеты непосредственно при попытке отправки (в т.ч. прохождение ipfw на выходе). Т.е. не откладывать в очередь, которую в отдельном потоке разгребает netisr. Есть смысл включать, если количество ядер меньше или равно количеству сетевых карточек. Влияет на скорость ОТПРАВКИ пакетов. Для серверов это хорошо, для роутеров - не очень. Если нагрузка на сетевые карты неравномерная, или когда есть хотя бы одно хронически недогруженое ядро - выключать. При включеном net.inet.ip.fastforwarding будет еще 1 спецэффект.
net.isr.direct_arp - обрабатывать исходящие ARP пакеты непосредственно при попытке отправки. Есть смысл держать включенным в большинстве случаев (разумного варианта, когда стоит отправлять такие запросы в очередь я придумать не могу). Добавлено для того, чтобы обработкой ARP система могла заниматься с бОльшим приоритетом даже при net.isr.direct=0
net.isr.maxthreads - собственно, количество потоков, разгребающих очередь пакетов. Есть смысл ставить меньшим количества ядер в системе. Нужно прикинуть, сколько ресурсов съедается на обработке прерываний от сетевух и не только, сколько в пике потребляет прочий софт (БД, httpd, прочие демоны) и на оставшееся распределить роутинг. Если, к примеру, сетевухи потребляют по 80% с 2х ядер и софт еще до 100% одного ядра, а всего ядер 4, то остается 140% гарантированного времени. Т.е. полтора ядра ;) Тут можно смело ставить роутинг в 2 потока. Если нагрузки по софту кратковременные, а на роутинг с трудом хватает - можно даже попробовать 3.
net.inet.ip.fastforwarding - обрабатывать входящие пакеты непосредственно в момент приема (в т.ч. прохождение ipfw на входе, до попадания в очередь netisr). Есть смысл включать, если количество ядер меньше или равно количеству сетевых карточек, так же как и net.isr.direct. Влияет на скорость ПРИЕМА пакетов. Обработка пакета происходит прямо в обработчике прерывания. Следует учесть, что не все сетевухи и не все драйвера нормально умеют складировать новые пакеты в очередь, пока обрабатывается текущий. При включеном net.inet.ip.fastforwarding будет еще 1 спецэффект - маршрутизация пакета и прохождение ipfw (оба раза) будут происходить в том же обработчике прерывания. Фактически, на время обработки входящего пакета сетевая карта будет заблокирована. Это неплохо смотрится при преобладающем входящем трафике и на однопроцессорных машинах.
Файловая системаПо стандарту, если на закрытый порт сервера приходит SYN-пакет, машина должна ответить RST-пакетом. Это упрощает сканирование портов, а также дает достаточное количество информации (в виде ответов от сканируемого сервера) для определения версии ОС. "Черные дыры" заставляют FreeBSD быть предельно лаконичной, не отсылая ничего в ответ на запросы к закрытым портам.
net.inet.tcp.blackhole=2 # 0
net.inet.udp.blackhole=1 # 0
Увеличение размера очереди.
Защита очереди от SYN атак kern.ipc.somaxconn=4096 # 128
Чтобы сервер не стал жертвой DoS-атаки, можно включить механизм syncookies, который служит для защиты сервера от SYN-флуда. Когда новое соединение не помещается в переполненный syncache, FreeBSD переходит в режим "syncookies" (TCP SYN cookies).
При серьезной атаке может не менее серьезно выручить.
net.inet.tcp.syncookies=1 # 1
Запрет ответа на широковещательный ECHO
Современная система не должна отвечать на широковещательные пинги, но и по сей день существуют сети, которые могут стать источником DoS-атаки. Чтобы не попасть в их список, выставляем:
net.inet.icmp.bmcastecho=0 # 0
Дропать все пакеты с флагами SYN+FIN.
Если не нужна поддержка смешного протокола T/TCP (TCP for Transactions), то пакеты с флагами SYN+FIN можно смело отбрасывать как неликвидные :).
Протокол редко где используется, а потому это имеет смысл
net.inet.tcp.drop_synfin=1
Запрет ридеректов
net.inet.icmp.drop_redirect=1 # 1
net.inet.icmp.log_redirect=1 # 1
net.inet.ip.redirect=0 # 1
#net.inet6.ip6.redirect=0 #ipv6 disable in kernel
Очистка таблицы ARP через .... секунд
net.link.ether.inet.max_age=1200 # 1200
Запрет на "прощупывание" внутренней сети
net.inet.ip.sourceroute=0 # 0
net.inet.ip.accept_sourceroute=0 # 0
Запрет запроса маски адреса, запрет широковещательного запроса временного штампа (timestamp)
net.inet.icmp.maskrepl=0 # 0
Максимальное количество пакетов ICMP <<Недостижимо>> (icmp type 3), а также количество отсылок TCP RST пакетов в секунду.
net.inet.icmp.icmplim=100 # 200
Увеличение размера TCP-буферов, для оптимизации при большом потоке данных HTTP FTP.
Но стоит помнить, что слишком объемные буферы быстро приведут к исчерпанию памяти при большом количестве подключений. Для веб-сервера, который принимает много коротких запросов и отправляет большие объемы данных, размер выходного буфера рекомендуется увеличить в ущерб входного.
net.inet.tcp.sendspace=32768 # 32768
net.inet.tcp.recvspace=65536 # 65536
Выставляет maximum segment lifetime.
Определяет максимальное время жизни сегмента (Maximum Segment Life - MSL)
После того как соединение закрывается сокет переходит в состояние TIME_WAIT Это максимальное количество времени ожидания ACK в ответ на SYN-ACK или FIN-ACK в миллисекундах В этом состоянии он может находится по умолчанию в течение 60 секунд. Время можно изменить через sysctl (в миллисекундах деленных на 2, 2 x 30000 MSL = 60 секунд)
net.inet.tcp.msl=7500 # 30000
Во FreeBSD 6.2 TIME_WAIT сокеты обрабатываются отдельно (нужна лишь часть информации 48 байт из 1 Кб. Ограничение вне лимита kern.ipc.maxsockets)
net.inet.tcp.maxtcptw=40960 # 40960
По умолчанию исходящие соединения инициируются с диапазона портов 49152-65535 (16 тыс.). Во FreeBSD 8.1 - порты 10000 - 65535 Их неплохо увеличить (1024-65535):
net.inet.ip.portrange.first=1024 # 10000
net.inet.ip.portrange.last=65535
Не менять ttl при транзите пакетов
net.inet.ip.stealth=0 # 0
Включение пуллинга
kern.polling.enable=0 # 0
Pooling
kern.polling.each_burst=5 # 5
kern.polling.burst_max=1000 # 150
Установка значения ttl под Windows
net.inet.ip.ttl=128 # 64
Максимальаня длина приёмной очереди, при переполнении которой стек дропает входящие пакеты
net.inet.ip.intr_queue_maxlen=4096 # 50
Увеличить максимальное число открытых сокетов
sysctl kern.ipc.maxsockets=204800 # 25600
Если машина обрабатывает несколько десятков тысяч соединений, то tcb hash позволяет быстро определять принадлежность пришедшего пакета к определенному соединению.
net.inet.tcp.tcbhashsize=4096 # 4096
Для использования портов по порядку, вместо случайной выборки (для исключения ошибки повторного коннекта с одного порта до отработки TIME_WAIT):
net.inet.ip.portrange.randomized=0 # 1
Во FreeBSD 6.2 появилась возможность не создавать состояние TIME_WAIT для соединений в рамках localhost:
net.inet.tcp.nolocaltimewait=1 # 0
DummyNET - шейпинг на IPFW
net.inet.ip.dummynet.io_fast - если трафик помещается в заданную полосу, не пропускать его через очередь и отдельный поток. Если нет необходимости эмулировать задержки и потери в канале - очень сильно сохраняет ресурсы. При использовании этой опции практически отпадает необходимость в распараллеливании dummynet
net.inet.ip.dummynet.io_fast=1
net.inet.ip.intr_queue_maxlen, net.route.netisr_maxqlen - фактически - размеры входящей и исходящей очередей. При большой нагрузке в режиме маршрутизации есть смысл увеличивать эти значения. Непоместившийся пакет выбрасывается. Это условно спасет при кратковременных перегрузках (часть пакетов пролетит с большой задержкой), но совершенно не спасет при хроничеких.
net.isr.direct - обрабатывать исходящие пакеты непосредственно при попытке отправки (в т.ч. прохождение ipfw на выходе). Т.е. не откладывать в очередь, которую в отдельном потоке разгребает netisr. Есть смысл включать, если количество ядер меньше или равно количеству сетевых карточек. Влияет на скорость ОТПРАВКИ пакетов. Для серверов это хорошо, для роутеров - не очень. Если нагрузка на сетевые карты неравномерная, или когда есть хотя бы одно хронически недогруженое ядро - выключать. При включеном net.inet.ip.fastforwarding будет еще 1 спецэффект.
net.isr.direct_arp - обрабатывать исходящие ARP пакеты непосредственно при попытке отправки. Есть смысл держать включенным в большинстве случаев (разумного варианта, когда стоит отправлять такие запросы в очередь я придумать не могу). Добавлено для того, чтобы обработкой ARP система могла заниматься с бОльшим приоритетом даже при net.isr.direct=0
net.isr.maxthreads - собственно, количество потоков, разгребающих очередь пакетов. Есть смысл ставить меньшим количества ядер в системе. Нужно прикинуть, сколько ресурсов съедается на обработке прерываний от сетевух и не только, сколько в пике потребляет прочий софт (БД, httpd, прочие демоны) и на оставшееся распределить роутинг. Если, к примеру, сетевухи потребляют по 80% с 2х ядер и софт еще до 100% одного ядра, а всего ядер 4, то остается 140% гарантированного времени. Т.е. полтора ядра ;) Тут можно смело ставить роутинг в 2 потока. Если нагрузки по софту кратковременные, а на роутинг с трудом хватает - можно даже попробовать 3.
net.inet.ip.fastforwarding - обрабатывать входящие пакеты непосредственно в момент приема (в т.ч. прохождение ipfw на входе, до попадания в очередь netisr). Есть смысл включать, если количество ядер меньше или равно количеству сетевых карточек, так же как и net.isr.direct. Влияет на скорость ПРИЕМА пакетов. Обработка пакета происходит прямо в обработчике прерывания. Следует учесть, что не все сетевухи и не все драйвера нормально умеют складировать новые пакеты в очередь, пока обрабатывается текущий. При включеном net.inet.ip.fastforwarding будет еще 1 спецэффект - маршрутизация пакета и прохождение ipfw (оба раза) будут происходить в том же обработчике прерывания. Фактически, на время обработки входящего пакета сетевая карта будет заблокирована. Это неплохо смотрится при преобладающем входящем трафике и на однопроцессорных машинах.
Запрет возможности монтирования файловых систем непривилегированными пользователями.
vfs.usermount=0 # 0
Ресурсы системы
Увеличение числа mbuf кластеров
Можно увеличить до 262144
(в loader.conf - vm.kmem_size=1G, в ядре options KVA_PAGES=512) kern.ipc.nmbclusters=65536 # 25600
Приложения работают не с сокетами, а с файлами. По этому для каждого сокета нужна структура, которая описывает файл.
kern.maxfiles - всего файлов в системе
kern.maxfilesperproc - максимальное число файлов на один процесс.
kern.maxfiles=204800
kern.maxfilesperproc=200000
Можно динамически изменить параметры shared memory
sysctl -a | grep shm
Вычисляется следующим образом:
SHMMAX = SHMALL * PAGE_SIZE + 1
Где PAGE_SIZE равно 4096 Б для i386
SHMALL = k * RAM * 1024 / PAGE_SIZE
Где RAM – физическая оперативная память в МБ; k – коэффициент, равный 0.5; PAGE_SIZE – размер одной страницы в КБ, PAGE_SIZE = 4 КБ для i386. Например, для машины с памятью 512 МБ,
SHMALL = 0.5 * 512 * 1024 / 4 = 65536.
В случае, если предполагается, что приложение будет работать на специально выделенном для этого сервере, и кроме него никаких других серьезных сервисов запущено не будет, то коэффициент k, можно увеличивать до 0.75, это 3/4 от физической оперативной памяти. Рекомендую также посмотреть утилиту ipcs.
Например для сервера PostgreSQL можно выставить следующие значения:
kern.ipc.shmall=65536
kern.ipc.shmmax=536870912
kern.ipc.semmap=256
/boot/loader.confМожно увеличить до 262144
(в loader.conf - vm.kmem_size=1G, в ядре options KVA_PAGES=512) kern.ipc.nmbclusters=65536 # 25600
Приложения работают не с сокетами, а с файлами. По этому для каждого сокета нужна структура, которая описывает файл.
kern.maxfiles - всего файлов в системе
kern.maxfilesperproc - максимальное число файлов на один процесс.
kern.maxfiles=204800
kern.maxfilesperproc=200000
Можно динамически изменить параметры shared memory
sysctl -a | grep shm
Вычисляется следующим образом:
SHMMAX = SHMALL * PAGE_SIZE + 1
Где PAGE_SIZE равно 4096 Б для i386
SHMALL = k * RAM * 1024 / PAGE_SIZE
Где RAM – физическая оперативная память в МБ; k – коэффициент, равный 0.5; PAGE_SIZE – размер одной страницы в КБ, PAGE_SIZE = 4 КБ для i386. Например, для машины с памятью 512 МБ,
SHMALL = 0.5 * 512 * 1024 / 4 = 65536.
В случае, если предполагается, что приложение будет работать на специально выделенном для этого сервере, и кроме него никаких других серьезных сервисов запущено не будет, то коэффициент k, можно увеличивать до 0.75, это 3/4 от физической оперативной памяти. Рекомендую также посмотреть утилиту ipcs.
Например для сервера PostgreSQL можно выставить следующие значения:
kern.ipc.shmall=65536
kern.ipc.shmmax=536870912
kern.ipc.semmap=256
Увеличить лимита физической памяти, которую может использовать ядро (по умолчанию 320Мб). Увеличим до 1Гб:
vm.kmem_size=1G
для amd64 оказалось недостаточно указать vm.kmem_size_max=1G в /boot/loader.conf, (параметр был просто игнорирован) по-этому это надо сделать в файле конфигурации ядра: options VM_KMEM_SIZE=1073741824
options VM_KMEM_SIZE_MAX=1073741824
В /boot/loader.conf для обеих платформ нужно добавить vm.kmem_size_max=1G Увеличение syncache и syncookies( на этапе загрузки).
net.inet.tcp.syncache.hashsize=1024
net.inet.tcp.syncache.bucketlimit=100
Задаем какой буфер использовать для сетевых карточек (должен быть реально)
## Для карточек Intel с драйвером em
hw.em.rxd=4096
hw.em.txd=4096
## Для новых карточек Intel с драйвером igb
hw.igb.rxd=4096
hw.igb.txd=4096
Увеличение количества семафоров
kern.ipc.semmnu=256
kern.ipc.semmns=32000
kern.ipc.shmmni=4096
Опции ядра Увеличение адресного пространства ядра, которое на i386 платформе - 1Гб. Для увеличения до 2Гб. На платформе amd64 KVA всегда 2G.
options KVA_PAGES=512
Данная опция в FreeBSD 8.x предназначена для ускорения маршрутизации. При больших потоках трафика проц вгоняется в полку, поэтому настоятельно рекомендую вырубать ее нафиг, чтоб не наблюдать , как ваш роутер уходит в нирвану...
#options FLOWTABLE # per-cpu routing cache
Источникvm.kmem_size=1G
для amd64 оказалось недостаточно указать vm.kmem_size_max=1G в /boot/loader.conf, (параметр был просто игнорирован) по-этому это надо сделать в файле конфигурации ядра: options VM_KMEM_SIZE=1073741824
options VM_KMEM_SIZE_MAX=1073741824
В /boot/loader.conf для обеих платформ нужно добавить vm.kmem_size_max=1G Увеличение syncache и syncookies( на этапе загрузки).
net.inet.tcp.syncache.hashsize=1024
net.inet.tcp.syncache.bucketlimit=100
Задаем какой буфер использовать для сетевых карточек (должен быть реально)
## Для карточек Intel с драйвером em
hw.em.rxd=4096
hw.em.txd=4096
## Для новых карточек Intel с драйвером igb
hw.igb.rxd=4096
hw.igb.txd=4096
Увеличение количества семафоров
kern.ipc.semmnu=256
kern.ipc.semmns=32000
kern.ipc.shmmni=4096
Опции ядра Увеличение адресного пространства ядра, которое на i386 платформе - 1Гб. Для увеличения до 2Гб. На платформе amd64 KVA всегда 2G.
options KVA_PAGES=512
Данная опция в FreeBSD 8.x предназначена для ускорения маршрутизации. При больших потоках трафика проц вгоняется в полку, поэтому настоятельно рекомендую вырубать ее нафиг, чтоб не наблюдать , как ваш роутер уходит в нирвану...
#options FLOWTABLE # per-cpu routing cache
Подписаться на:
Сообщения (Atom)