nixp.ru v3.0

17 октября 2017,
вторник,
03:11:45 MSK

DevOps с компанией «Флант»
Anarchist написал 10 октября 2008 года в 14:17 (1494 просмотра) Ведет себя как мужчина; открыл 258 тем в форуме, оставил 4097 комментариев на сайте.

Есть некий сервер под управлением FreeBSD.

На него предполагается установить достаточно интенсивно нагруженный сервер БД PostgreSQL (установившийся размер базы прогнозируется ~16Gb).

Параметры сервера по умолчанию не обеспечивают полного использования аппаратных ресурсов.

Производительность тоже недостаточная.

Пилим параметры ОС увеличивая следующие параметры.

В /boot/loader.conf

kern.ipc.semmni
kern.ipc.semmns
kern.ipc.semume
kern.ipc.semmnu

В /etc/sysctl.conf

kern.ipc.shmmax


и как оказалось если есть желание разрулить параметры запуска без пересборки ядра, то необходимо задать ещё один параметр

kern.ipc.shmall=262144

Проблема первая: документация постгреса не даёт ответа на вопрос: «$скока вешать в байтах$"? Списки рассылки — немногим лучше :(

Проблема вторая: увеличили параметры ядра, база запустилась с новыми параметрами, использует столько системных ресурсов, сколько хочешь ей дать.

Даёшь нагрузку (пока тестовую) — серверу плохеет.

Исходя из логов — из-за достижения предела kern.maxfiles.

Увеличиваю kern.maxfiles, даю нагрузку — серверу снова плохеет.

Но на сей раз в логах подсказки нет :(

Handbook утверждает только что:

kern.maxfiles can be raised or lowered based upon your system requirements. This variable indicates the maximum number of file descriptors on your system. When the file descriptor table is full, “file: table is full” will show up repeatedly in the system message buffer, which can be viewed with the dmesg command.

Each open file, socket, or fifo uses one file descriptor. A large-scale production server may easily require many thousands of file descriptors, depending on the kind and number of services running concurrently.

Главный вопрос: где бы почитать про взаимосвязи параметров ядра (на двух разных серверах kern.maxfiles принимает разные умолчательные значения) в FreeBSD 6.X (в перспективе — 7.Х).

Что-нибудь поконкретнее Хэндбука.

myst

Умолчательные значение kern.maxfiles зависят от maxusers. C 5.0 maxusers подбирается автоматически на старте ядра. До этого, надо было выставлять в config. Поэтому на разных машинах maxfiles будет разным.

По сути вопроса: где почитать — не знаю. Разве что, freebsd-performance@ или freebsd-hackers@ поможет…

Anarchist
myst
Умолчательные значение kern.maxfiles зависят от maxusers.

По вышеприведённой ссылке написано, что так было во времена 4.Х

myst
C 5.0 maxusers подбирается автоматически на старте ядра.

Вопрос: как?

myst
Поэтому на разных машинах maxfiles будет разным.

maxfiles зависит от железа (в первую очередь — RAM).

И далеко не факт, что на разных машинах он будет разным.

myst
По сути вопроса: где почитать — не знаю. Разве что, freebsd-performance@ или freebsd-hackers@ поможет…

Только если подписываться и то маловероятно.

myst

Вообще, код открыт, но ладно, я сделал это за тебя.

src/sys/kern/subr_param.c:
148 /*
149  * Boot time overrides that are scaled against main memory
150  */
151 void
152 init_param2(long physpages)
153 {
154
155       /* Base parameters */
156       maxusers = MAXUSERS;
157       TUNABLE_INT_FETCH("kern.maxusers", &maxusers);
158       if (maxusers == 0) {
159             maxusers = physpages / (2 * 1024 * 1024 / PAGE_SIZE);
160             if (maxusers < 32)
161                   maxusers = 32;
162             if (maxusers > 384)
163                   maxusers = 384;
164       }
...

И там дальше ещё всякое интересное идёт.