За последние 24 часа нас посетили 22014 программистов и 988 роботов. Сейчас ищут 654 программиста ...

pgBouncer, тестирование web-сервера, зависание

Тема в разделе "PostgreSQL", создана пользователем sir Genry, 17 янв 2012.

  1. sir Genry

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

    С нами с:
    24 сен 2010
    Сообщения:
    61
    Симпатии:
    0
    Адрес:
    Новосибирск
    В общем пишется один проект, который я решил потестировать.
    Вводные данные: VDS 1ГГц 512 Мб, Ubuntu, Apache, PostgreSQL, pgBouncer
    В PosgreSQL max_connections стандартно установлен в 100. Увеличить не могу. Ставлю например 200 коннекций - PosgreSQL не запускается. Пишет:
    Код (Text):
    1.  
    2. postgresql restart
    3.  * Restarting PostgreSQL 9.0 database server                                                                                                   * The PostgreSQL server failed to start. Please check the log output:
    4. 2012-01-17 19:53:12 MSK FATAL:  could not create shared memory segment: Invalid argument
    5. 2012-01-17 19:53:12 MSK DETAIL:  Failed system call was shmget(key=5432001, size=34537472, 03600).
    6. 2012-01-17 19:53:12 MSK HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 34537472 bytes), reduce PostgreSQL's shared_buffers parameter (currently 3584) and/or its max_connections parameter (currently 204).
    7.         If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    8.         The PostgreSQL documentation contains more information about shared memory configuration.
    То есть это мне ядро убунты надо как-то пересобрать чтобы увеличить этот SHMMAX? или я неправильно понимаю?

    Начал тестировать утилитой "ab" которая входит в состав апача.
    Тест валится при
    ab -n 100 -c 50 http://что-то_там_мое...

    Поставил pgBouncer с настройками:
    Код (Text):
    1.  
    2. ; total number of clients that can connect
    3. max_client_conn = 100
    4. default_pool_size = 100
    С небольшими потерями работает на -n 200 -c 100
    В принципе приемлемо
    Поменял max_client_conn на 400 и default_pool_size на 200. Сработало вообще без потерь и быстро. Но один раз. Повторный запуск теста привел к зависанию системы. Помогает только ребут из web-панели управления VDS. Прямо скажем, я не великий сисадмин. Подскажите, можно как-то понять почему происходит зависание? Еще один нюанс: я открывал еще одну сессию SSH и запускал "top" чтобы смотреть загрузку проца.

    В общем буду рад любым соображениям
     
  2. asokol

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

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Все ответы даны в MSK HINT. Перевести?
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    память увеличивается в /etc/sysctrl.conf чуть позже скину как и куда. на работе доки.

    ===

    при тестах не все упирается в коннекты. много чего упирается совсем в другие показатели.

    ab не панацея. есть к примеру httpload
     
  4. sir Genry

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

    С нами с:
    24 сен 2010
    Сообщения:
    61
    Симпатии:
    0
    Адрес:
    Новосибирск
    Переведи )
    Код (Text):
    1.  
    2. You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 34537472 bytes), reduce PostgreSQL's shared_buffers parameter (currently 3584) and/or its max_connections parameter (currently 204).
    3.         If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    4.         The PostgreSQL documentation contains more information about shared memory configuration.
    Особенно поясни, ЕСЛИ ЗНАЕШЬ, насколько нужно изменить параметры SHMMAX, SHMMIN и shared_buffers. И что-то мне подсказывает что мне нужно не "reduce", а "raising" )
    Еще раз скажу что опыт конфигурирования линуксов, откровенно говоря, небольшой. Поэтому когда человек просит помочь, то или скажи по делу или ничего не говори. Выпендриваться не надо
     
  5. sir Genry

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

    С нами с:
    24 сен 2010
    Сообщения:
    61
    Симпатии:
    0
    Адрес:
    Новосибирск
    Буду очень ждать
    Я замерял задержки. И выяснил что основное время тратится на создание коннекции. С SQL я хорошо дружу, поэтому запросы у меня оптимальные. В общем где-то видимо нужно что-то подкрутить чтобы уменьшить время создания коннекта.
    Спасибо за наводку. Сегодня потестирую этой утилитой )

    И вообще очень большое спасибо. Жду ответов
     
  6. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    про память написано в предыдущем посту. читаем внимательно.

    вот что выдает при ошибке, ту цифру туда и пишем.

    При запуске Postgres при нехватке памяти в лог выдается ошибка о кол-ве памяти, необходимой Postgres для старта. Это кол-во необходимо указать в системных настройках ядра системы в файле /etc/sysctl.conf:

    посмотри скока у тебя сейчас?

    Код (Text):
    1. sysctl kernel.shmall
    2. и
    3. sysctl kernel.shmmax
    это я себе для 24Г делал.

    Код (Text):
    1. # использование памяти
    2. kernel.shmall = 17670512640
    3. kernel.shmmax = 17670512640
    4. # кол-во открытых файлов
    5. fs.file-max = 999999
    Для применения этих настроек необходимо выполнить команду:

    Код (Text):
    1. ~# sysctl -p
    2. kernel.shmall = 17670512640
    3. kernel.shmmax = 17670512640
    4. fs.file-max = 999999
     
  7. sir Genry

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

    С нами с:
    24 сен 2010
    Сообщения:
    61
    Симпатии:
    0
    Адрес:
    Новосибирск
    to 440Hz
    Андрей, спасибо! Разобрался.
    Еще подправил файл /etc/sysctl.d/30-postgresql-shm.conf
    Не знаю, надо было оно или нет, но подправил.
    Количество коннекций увеличил )
     
  8. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а ну или там можно. разницы то нет.

    удачи...

    ===

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

    на бонусере 1500 коннектов в сек. на ПГ 100. примерная статистика. увеличивать коннекты ПГ это отдавать память. надо смотреть, потому как ПГ на каждый коннект отъедает оперативку. ну и поигарться. мож не все надо отдавать под кеш.
     
  9. asokol

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

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Я не выпендриваюсь. Мне лишь хотелось, чтобы Вы попробовали сами разобраться. Поиск в гугле по запросу postgresql shmmax первым результатом выдает ссылку на:
    http://www.postgresql.org/docs/8.2/stat ... urces.html
    - где, во-первых, подробнее расписано обо всем этом. А во-вторых, дан ответ на первый вопрос: как увеличить размер SHMMAX. А в MSK HINT сказано, что обычно такая ситуация обозначает превышение SHMMAX, и что можно либо уменьшить размер запроса, либо сконфигурировать ядро, указав большее значение SHMMAX.
    И в Вашем посте я не увидел вопроса насчет того, какие настройки являются оптимальными в указанной конфигурации, может быть потому что его там нет?!