Archive for Март, 2013

Nginx ошибка accept() failed (24: Too many open files) while accepting new connection

// Март 25th, 2013 // No Comments » // linux, Network, nginx

На одном небольшом WEB-проекте, который медленно, но уверенно растет, появились такие ошибки в логах:

2013/03/24 16:22:03 [alert] 2636#0: accept() failed (24: Too many open files) while accepting new connection on 0.0.0.0:80
2013/03/24 16:22:03 [alert] 2636#0: accept() failed (24: Too many open files) while accepting new connection on 0.0.0.0:80

Проблема типичная для системы настроенной по умолчанию, в частности конфигурация лимитов пользователя на ресурсы. Ошибка означает, что nginx достиг установленного предела на количество одновременно открытых файлов.

Проверить текущие ограничения

будучи root-ом представится пользователем, от имени которого работает nginx, в Debian подобных дистрибутивах это www-data, а в Red Hat подобных — nginx:

su - www-data

и проверить жесткие и мягкие ограничения:

ulimit -Hn
ulimit -Sn

Скорее всего ответ будет «1024».

Увеличение лимита файловых дескрипторов на уровне ОС

Отредактировать/добавить в файл /etc/sysctl.conf строку:

fs.file-max = 70000

В файл /etc/security/limits.conf добавить лимит для конкретного пользователя:

www-data       soft    nofile   10000
www-data       hard    nofile   30000

После сохранения изменений их нужно применить перечитав конфиг командой:

sysctl -p

Настройка лимита файловых дескрипторов в конфигурации nginx

Nginx имеет директиву, которая позволяет установить этот лимит на уровне процесса (лимит распространяется на каждого воркера в отдельности), находится в файле /etc/nginx/nginx.conf:

worker_rlimit_nofile 30000;

затем перезагрузить nginx.

e1000 с ошибкой NETDEV WATCHDOG: eth0: transmit timed out

// Март 23rd, 2013 // No Comments » // harware, Intel, linux, Network

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

kernel: e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang
kernel:   Tx Queue             <0>
kernel:   TDH                  <62>
kernel:   TDT                  <a6>
kernel:   next_to_use          <a6>
kernel:   next_to_clean        <5c>
kernel: buffer_info[next_to_clean]
kernel:   time_stamp           <1003a999f>
kernel:   next_to_watch        <63>
kernel:   jiffies              <1003a9bb4>
kernel:   next_to_watch.status <0>
kernel: e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang
kernel:   Tx Queue             <0>
kernel:   TDH                  <62>
kernel:   TDT                  <a6>
kernel:   next_to_use          <a6>
kernel:   next_to_clean        <5c>
kernel: buffer_info[next_to_clean]
kernel:   time_stamp           <1003a999f>
kernel:   next_to_watch        <63>
kernel:   jiffies              <1003a9da8>
kernel:   next_to_watch.status <0>
kernel: e1000: eth0: e1000_clean_tx_irq: Detected Tx Unit Hang
kernel:   Tx Queue             <0>
kernel:   TDH                  <62>
kernel:   TDT                  <a6>
kernel:   next_to_use          <a6>
kernel:   next_to_clean        <5c>
kernel: buffer_info[next_to_clean]
kernel:   time_stamp           <1003a999f>
kernel:   next_to_watch        <63>
kernel:   jiffies              <1003a9f9c>
kernel:   next_to_watch.status <0>
kernel: NETDEV WATCHDOG: eth0: transmit timed out
kernel: e1000: eth0: e1000_watchdog: NIC Link is Up 100 Mbps Full Duplex, Flow Control: RX

Описание проблемы нашлось здесь https://bugzilla.redhat.com/show_bug.cgi?id=398921.
Проверяем у себя:

srv:/# ethtool -k eth0
Offload parameters for eth0:
Cannot get device flags: Operation not supported
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: on
large receive offload: off

Отключим TSO (tcp segmentation offload) командой:

ethtool -K eth0 tso off

Для закрепления эффекта после перезагрузки — добавляем эту же команду в автозагрузку, например в /etc/rc.local

Cisco Catalyst WS-C3550 сброс пароля (password recovery)

// Март 14th, 2013 // No Comments » // Cisco, recovery password, switch

WS-C3550-24PWR-SMI

  1. Подключить свитч консольным кабелем с настройками:
    скорость: 9600 бит/с
    бит данных: 8 (bits)
    четность: нет (no parity)
    стоповый бит: 1
    управление потоком: нет
  2. Выключить питание свитча
  3. Зажать кнопку Mode и включить питание
  4. Когда индикатор System перестанет моргать — отпустить кнопку Mode, на экране должно быть приглашение:
  5. Xmodem file system is available.
    The password-recovery mechanism is enabled.
    
    The system has been interrupted prior to initializing the
    flash filesystem.  The following commands will initialize
    the flash filesystem, and finish loading the operating
    system software:
    
        flash_init
        boot
    
    switch:
  6. Ввести команду flash_init для инициализации Flash памяти:
    switch: flash_init
    Initializing Flash...
    flashfs[0]: 91 files, 4 directories
    flashfs[0]: 0 orphaned files, 0 orphaned directories
    flashfs[0]: Total bytes: 15998976
    flashfs[0]: Bytes used: 8177152
    flashfs[0]: Bytes available: 7821824
    flashfs[0]: flashfs fsck took 19 seconds.
    ...done Initializing Flash.
    Boot Sector Filesystem (bs:) installed, fsid: 3
  7. Ввести команду load_helper для инициализации помощника, будет загружен первый из доступных образов:
    switch: load_helper
  8. Просмотреть содержимое Flash карты можно командой dir flash:
    switch: dir flash:
    Directory of flash:/
    
    2    -rwx  320       <date>               system_env_vars
    3    -rwx  2224      <date>               config-text.old
    5    -rwx  4968676   <date>               c3550-i5k2l2q3-mz.121-22.EA4.bin
    7    drwx  128       <date>               c3550-i5k2l2q3-mz.121-20.EA1
    6    -rwx  30        <date>               env_vars
    8    -rwx  2116      <date>               vlan.dat
    9    -rwx  4650      <date>               config-text
    11   -rwx  24        <date>               private-config.text
    7821824 bytes available (8177152 bytes used)
  9. Переименовать или удалить старый конфиг:
    switch: rename flash:config-text flash:config-text.backup
    switch: delete flash:config-text
    Are you sure you want to delete "flash:config-text" (y/n)?y
    File "flash:config-text" deleted
  10. Загрузить образ командой boot
    switch: boot
    Loading "flash:c3550-i5k2l2q3-mz.121-22.EA4.bin"...
    #############################

Свитч загрузится с пустой конфигурацией:

         --- System Configuration Dialog ---

Would you like to enter the initial configuration dialog? [yes/no]: n



Press RETURN to get started!


Switch>

(далее…)

Debian/Ubuntu отключить IPv6

// Март 13th, 2013 // No Comments » // Debian, IPv6, linux, Network

Я конечно за продвижение IPv6 в массы, но конечным пользователям в моем регионе он докатится не раньше чем через пару лет, а пока что наблюдаем вот такое:

user@home:~$ sudo apt-get update
Ош  http://mirror.mirohost.net squeeze/main Sources
  Невозможно инициализировать соединение с mirror.mirohost.net:80 (2a02:2278:70eb:209::72:161). - connect (101: Сеть недоступна) [IP: 2a02:2278:70eb:209::72:161 80]
Ош  http://mirror.mirohost.net squeeze/non-free Sources
...

Squeeze (ядро >= 2.6.30):

Выключить IPv6 в ядре, выполнять от root-а:

echo net.ipv6.conf.all.disable_ipv6=1 > /etc/sysctl.d/disableipv6.conf

IPv6 будет выключен при следующей перезагрузке.

В exim4:

В конфиг вставить директиву:

disable_ipv6 = true

Для sshd:

В конфиг /etc/ssh/sshd_config добавить:

AddressFamily inet

(далее…)