Проблема множества одновременных соединений (С10K Problem)

Linux 2.6

Как известно, по умолчанию tcp/ip в Linux 2.6 настроен на довольно высокую пропускную нагрузку.
Если предельное количество соединений для службы устанавливаться в раёне одной тысячи, а ресурсов системы более чем предостаточно поискать причину можно вот в какой месте:

Рассмотрим конкретный пример.

Служба состоит из двух частей front-end и back-end
Front часть устанавливает соединение в любом случае, но после приблизительно 1000 активных подключений соединения эти не доходят до back части.
Дело всё в том, что по tcp обещаться только front-end, а связка front-back работала на UNIX сокетах. Причём каждое подключение порождает открытие дополнительного UNIX сокета.
Кто знаком с UNIX сокетами знает, что каждый такой сокет требует создание отдельного дискриптора файла. А в linux есть явное ограничение открытых файлов для процесса. По умолчанию это 1024.

Проверить можно так:

# количество открытых Unix сокетов для демона back
$ netstat -ux -p|grep back|wc -l

# количество открытых Unix сокетов в системе
$ netstat -ux -p|wc -l

# количество открытых tpc сокетов для демона front
$ netstat -tnp|grep front|wc -l

# количество открытых tpc сокетов в системе
$ netstat -tnp|wc -l

Везде нужны права root
Снять ограничение можно здесь:

/etc/security/limits.conf

demonusername            soft    nofile   2048
demonusername            hard    nofile   2048
  • demonusername - имя пользователя с правами которого запускаться демон, использующий Unix сокеты. Можно устанавливать огриначение для группы (@demonusername) или для всех (*)
  • Параметры soft и hard используються для установки мягкого и жесткого лимита соответственно. soft может быть изменен в самой программе. hard может быть изменен только суперпользователем.
    ВНИМАНИЕ! Необходима установка и soft и hard ограничения.
  • 2048 – собственно ограничение.

    Не изменяйте лимит для всей системы и не выставляйте слишком большого числа. Все эти лимиты введены не просто так. В случае взлома, атаки или просто сбоя это может привести к негативным результатам – например потере контроля за машиной.

Далее необходим ребут, чтобы преинициализировать ядро.

Ссылки на полезные статьи:
http://www.kegel.com/c10k.html

Virtuozzo не обновляет ключи

Началось всё с того, что однажды перестала обновляться лицензия програмного продукта: Parallels Virtuozzo Containers 4.0

При попытке переустановить лицензию выскочила следующая ошибка:
KA server is not available: activatefailed: Can't connect to server ka.swsoft.com:5224

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

В этом случае правильнее всего было проверить настройки DNS на хост машине.

# nslookup ka.swsoft.com

Server:         81.200.0.1
Address:        81.200.0.1#53
 
Non-authoritative answer:
*** Can't find ka.swsoft.com: No answer

Получаем новые DNS у провайдера (в моём случае они просто работали с ошибками – пришлось искать другие).

Обновляем /etc/resolv.conf.
Перезагружается потому, что демон лицензий висит в отдельном контейнере и изменения настроек не заметит.
Всё работает.

Information:The license has been installed successfully.

По теме:
http://www.parallels.com/products/virtuozzo/

FakeRAID, ещё одна байка с плохим концом

Конфигурация.

Сервер: Серверы HP ProLiant
Контролер: Встроенный ICH9
Дисковая подсистема: 2 SATA диска в 250 Gb (RAID 1 mirror)
Операционная система: SUSE
Фактическая реализация raid на уровне ОС: DMraid

Хронология событий

Умирает второй диск.
SUSE начинает ругаться многочисленными ошибками в MFT и требует запустить fsck

Aug 23 06:12:27 xxx kernel: EXT3-fs error (device sda1): ext3_lookup: unlinked inode 2465708 in dir #2301537
Aug 23 06:12:27 xxx kernel: EXT3-fs error (device sda1): ext3_lookup: unlinked inode 2465707 in dir #2301550
Aug 23 06:12:28 xxx kernel: EXT3-fs error (device sda1): ext3_lookup: unlinked inode 2465723 in dir #2301550
Aug 23 06:12:28 xxx kernel: EXT3-fs error (device sda1): ext3_lookup: unlinked inode 2465819 in dir #2301555
Aug 23 06:12:28 xxx kernel: EXT3-fs error (device sda1): ext3_lookup: unlinked inode 2466064 in dir #2465286

По глупости запускаеться fsck.
на выходе получаем множество жизненоважных файлов с нулевым размером.
(Напомню файлы с нулевым размером восстанавливать кране тяжко и совсем не быстро)

Результат:
1) Критически важное приложение
2) 1 мёртвый диск
3) второй диск с неработающей системой и битыми данными

Хорошё если есть рабочие бакапы.
Купить новый диск, востановились архив – два часа простоя.
Вот такая вот история.

Как нужно было делать с самог начала

Будет такая штука Adaptec RAID 2405
И 3 диска: Два в зеркало и однин в Hot spare, чтобы не пришлось бегать в магазин)

Ошибки с ключами репозиториев в debian

Иногда при обновлении списка пакетов, либо при добавлении нового репозитория, вылазит такая ошибка

Reading package lists... Done
W: There is no public key available for the following key IDs: 9AA38DCD55BE302B
W: GPG error: http://ftp.fr.debian.org etch Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 9AA38DCD55BE302B
W: You may want to run apt-get update to correct these problems

Чтобы исправить сиё надо выполнить

gpg --keyserver subkeys.pgp.net --recv-keys 9AA38DCD55BE302B && gpg --export 9AA38DCD55BE302B | apt-key add -

Чёрточка в конце обязательна

  • Опубликовано: 21.08.2009

Software RAID под Ubuntu 9.04

Не так давно появилась новая версия не безызвестного дистрибутива Ubuntu 9.04, а с ним и новые проблемы.

Топик касается установки linux на все виды софтового рейда(DM-RAID/fakeRAID) и последующей загрузки с этих разделов.
Проблема точно существует для RAID, построенных на dmraid и mdadm.
(далее…)

Подсчёт колличества вложенных папок и файлов для Linux

Написал маленький скрипт для bash который считает колличество вложенных папок и файлов, иначе говоря nodes файловой файловой системы

nodes.sh
#!/bin/bash
for dir in `find $1 -maxdepth 1 -type d`;
do
printf "%-8s%s\n" $[ `find $dir \! -name "." | wc -l` - 1 ] $dir;
done

RHL Самоуничтожился

Сегодня ночью пытались установить gcc на 9ый RHL.
Чтобы процес шёл веселее решили для начала установить apt.
Раз дело происходит на Red Hat для установки был использован RPM
После установки atp попросил пофиксить зависимости.
Вот что получилось:
(далее…)

12