Тонкая подвеска под высокой нагрузкой - PullRequest
2 голосов
/ 21 февраля 2012

У нас есть Thin + RoR с приложением ActiveRecord + memcached + Postgres, которое использует гем pg для доступа к базе данных Postgres.

Мы наблюдаем, что при высокой нагрузке тонкие процессы внезапно перестают отвечать на запросы иникогда не восстанавливаться, когда нагрузка уменьшается.Тем временем наш сервер баз данных работает хорошо - мы можем запрашивать данные и получать ответы в ожидаемое время.

Вещи, которые мы наблюдали:

  • Мы не видим медленного увеличения времени отклика, прежде чем попадем в плохое состояние - переход внезапный.
  • Мы можемвойти в это состояние с одним или несколькими тонкими процессами, что, по-видимому, исключает возможность их взаимной блокировки под нагрузкой.
  • Когда нагрузка спадает, тонкие процессы не восстанавливаются и продолжают не отвечать.
  • После зависания тонкий процесс, похоже, не выдает никаких запросов к БД.
  • gdp указывает, что в состоянии зависания у нас есть тонкие нити в состоянии sleep_forever: 0x00007f75c78c85d2 в sleep_forever (arg =) в thread.c: 848

Помня о том, чтоЭто 95% читаемое приложение с более или менее агрессивной стратегией кэширования (т.е. у нас нет транзакций с базой данных, которые могут вызвать взаимные блокировки), мы ищем предложения о том, где искать.

Большое спасибо за вашу помощь!Дополнительная информация:

Драгоценные камни:

  • драгоценный камень 'рельсы', '2.3.11'
  • драгоценный камень 'тонкий', '1.2.7'
  • gem 'pg'

Среда:

  • psql (PostgreSQL) 9.1.2
  • Тонкий 1.2.7
  • Рубин1.9.2-p290
  • Рельсы 2.3.11
  • Apache 2.2.14 (подробности ниже)
Server version: Apache/2.2.14 (Ubuntu)
Server built:   Feb 14 2012 16:42:27
Server's Module Magic Number: 20051115:23
Server loaded:  APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture:   64-bit
Server MPM:     Worker
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/worker"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT=""
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types"
-D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf"
root@a17:~# /usr/sbin/apache2 -v
Server version: Apache/2.2.14 (Ubuntu)
Server built:   Feb 14 2012 16:42:27

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

Это проблема со стеком TCP в ruby: http://bugs.ruby -lang.org / вопросы / 5343

Попробуйте обновить до ruby ​​1.9.3 или выше.

1 голос
/ 30 марта 2012

Мы закончили тем, что переключились с Тонкого на Единорога. Проблемы ушли.

...