За последние 24 часа нас посетили 20816 программистов и 1609 роботов. Сейчас ищут 1107 программистов ...

[nginx + apache] internal server error

Тема в разделе "Прочее", создана пользователем Kreker, 23 июл 2009.

  1. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Выпала участь администрировать сервер на VPS. Когда приваливает народу на форум, nginx выдает ошибку "internal server error".
    Мысли две:
    1) Достигнуто предельное количество процессов php, nginx не может "выудить" новый поток и дает ошибку
    2) Не хватает ресурсов, чтобы открыть новый поток и ngnix выдает ошибку

    Но как определить - ума не приложу. Когда натыкаюсь на ошибку сам, нет времени на выяснения. Но скажу сразу, в такие моменты обычно бывает 70 человек онлайн на форуме SMF. Сервер с 512 мб памяти и 600 МГЦ.

    Подскажите, что делать?

    В технических характеристиках хостинга:
    Судя по всему, так и есть, достигается предельное количество.
     
  2. логи читать.
     
  3. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    У nginx нет ошибки "internal server error". Скорее всего эту ошибку отдает апач.
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    От nginx access лог оказался весомым - 2 Гб. Остальных не обнаружено.
    А что делать, чтобы такой размер не допускать?
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    1. Отключить, если не нужен (убрать эту строчку из конфига)
    2. Ротировать каким-нибудь logrotate
    Но ошибки в error_log, а не в access
     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Да, пардон, не сообразил.

    Честно говоря, в логе ошибок не знаю, что искать (там файл на 130 мегабайт). Попробовал по thread, выдало вот что:

    2009/07/17 10:59:33 [alert] 23808#0: *3191231 socket() failed (105: No buffer space available) while connecting to upstream, client: 83.236.199.98, server: site.ru, URL: "/forum/index.php?topic=9957.msg1052209277", upstream: "http://127.0.0.1:8082/forum/index.php?topic=9957.msg1052209277", host: "site.ru", referrer: "http://board.muse.mu/showthread.php?t=63122&page=387"
    2009/07/17 10:59:37 [error] 23808#0: *3191106 upstream prematurely closed connection while reading response header from upstream, client: 84.208.133.4, server: site.ru, URL: "/forum/index.php?topic=9957.1100", upstream: "http://127.0.0.1:8082/forum/index.php?topic=9957.1100", host: "site.ru", referrer: "http://board.muse.mu/showthread.php?t=63122&page=388"
    2009/07/17 10:59:41 [error] 23808#0: *3191205 upstream prematurely closed connection while reading response header from upstream, client: 84.250.92.154, server: site.ru, URL: "/forum/index.php?topic=9957.1100", upstream: "http://127.0.0.1:8082/forum/index.php?topic=9957.1100", host: "site.ru", referrer: "http://board.muse.mu/showthread.php?t=63122&page=388"
    2009/07/17 10:59:43 [error] 23808#0: *3190890 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 24.46.40.98, server: site.ru, URL: "/forum/index.php?topic=9957.msg1052209277", upstream: "http://127.0.0.1:8082/forum/index.php?topic=9957.msg1052209277", host: "site.ru", referrer: "http://board.muse.mu/showthread.php?t=63122&page=387"
     
  7. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    105: No buffer space available
    В количество сокетов упирается, да...
    Или лимит по сокетам или нехватка памяти
     
  8. kostyl

    kostyl Guest

    может нехватка памяти с такими то логами...
     
  9. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Что в /proc/user_beancounters ?
     
  10. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Оперативки 512 мегов, а сокетов всего 120. В общем хостинг нужно менять...


    Код (Text):
    1.  
    2.         uid  resource           held    maxheld    barrier      limit    failcnt
    3.      3009:  kmemsize        2944777    6944912    8388608    8388608          0
    4.             lockedpages           0          5        256        256          0
    5.             privvmpages       56921     101663     131072     131072          0
    6.             shmpages            658        994      32768      32768          0
    7.             dummy                 0          0          0          0          0
    8.             numproc              37         90        100        100          0
    9.             physpages         30428      59806          0 2147483647          0
    10.             vmguarpages           0          0     131072 2147483647          0
    11.             oomguarpages      35506      64885     131072 2147483647          0
    12.             numtcpsock           42        120        120        120     289635
    13.             numflock              4          9        256        256          0
    14.             numpty                1          1         32         32          0
    15.             numsiginfo            1          6        256        256          0
    16.             tcpsndbuf         61644     512620     478932     786432   18594219
    17.             tcprcvbuf             0     812160     478932     786432       2353
    18.             othersockbuf      22200     291788     478932     786432          7
    19.             dgramrcvbuf           0      19120     132096     132096          0
    20.             numothersock         20         70        120        120        401
    21.             dcachesize       220304     308538    1048576    1048576          0
    22.             numfile            1133       1541       4096       4096          0
    23.             dummy                 0          0          0          0          0
    24.             dummy                 0          0          0          0          0
    25.             dummy                 0          0          0          0          0
    26.             numiptent            10         10         32         32          0
    Вижу почти 300 000 неудавшихся подключений
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Каждое соединение это 2 сокета.
    2 для nginx - 1 для TCP/IP соединения, второй для соединения с Apache
    2+ для Apache - входящий запрос от nginx, соединение с базой данных + любое другое соедниение (cURL, file_get_contents по HTTP, memcached).

    Вот и считайте :)
    Может просто для TCP/IP и Unix socket буфера слишком маленькие стоят? Их можно увеличить в /proc/sys/net/ipv4/{tcp_wmem,tcp_rmem}
     
  12. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Код (Text):
    1. /proc/sys/net/ipv4/tcp_wmem
    2. ::::::::::::::
    3. 4096    16384   655360
    4. ::::::::::::::
    5. /proc/sys/net/ipv4/tcp_rmem
    6. ::::::::::::::
    7. 4096    87380   655360
    Ну да, сокетов 100% не хватает. По сути дела, на одного пользователя используется от 4 сокетов. То есть, одновременно может обратиться к серверу всего 30 человек. Если бы сокетов было в два раза больше, то не хватало бы процессов? :)
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Нашел статью по сокетам http://www.opennet.ru/base/net/tcp_tune.txt.html
    Посчитал, по формулам у меня размер буфера выходит 128 Кб. Только не понял, какое именно значение (максимальное?)
     
  14. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Да буфера могут влиять на производительность, но вряд ли фатально мешать.
    Упираетесь в сокеты... maxheld у numtcpsock
    120 и правда малавато.
    Как бороться? Ну для начала посмотреть, что кроме веба юзает сокеты.. если есть почта - гасить ее. В nginx попробуйте поставить меньше таймауты и keepalive маленький - коннекты будут освобождаться "быстрее". Кешируйте контент, что бы меньше коннектов на бекенд делать.
    Но это все временно, советую поговорить с техподдержкой по поводу увеличение этого значения.
     
  15. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Ну у нас форум SMF. Средняя генерация страницы которого, где-то 0.2с с мемкэшем.

    Выход один - купить больше ресурсов