【问题标题】:Thin hanging under high load高负载下薄挂
【发布时间】:2012-02-21 19:59:16
【问题描述】:

我们有一个带有 ActiveRecord + memcached + Postgres 的 Thin + RoR 应用程序,它使用 pg gem 来访问 Postgres 数据库。

我们观察到,在高负载下,瘦进程会突然变得一个一个无响应,并且在负载消退时永远不会恢复。与此同时,我们的数据库服务器运行良好——我们可以查询数据并在预期时间内得到响应。

我们观察到的事情:

  • 在我们进入不良状态之前,我们没有看到响应时间缓慢增加 - 过渡是突然的。
  • 我们可以通过一个或多个瘦进程进入该状态,这似乎消除了它们在负载下相互死锁的可能性。
  • 当负载减轻时,精简进程不会恢复并继续无响应。
  • 一旦挂起,瘦进程似乎不会向数据库发出任何请求。
  • gdp 指出,当处于挂起状态时,我们有处于 sleep_forever 状态的瘦线程:0x00007f75c78c85d2 in sleep_forever (arg=) at thread.c:848

请记住,这是 95% 的读取应用程序,具有或多或少的激进缓存策略(即我们没有可能导致死锁的数据库事务),我们正在寻找有关在哪里查找的建议。

非常感谢您的帮助!额外信息:

宝石:

  • gem 'rails', '2.3.11'
  • gem '薄','1.2.7'
  • 宝石'pg'

环境:

  • psql (PostgreSQL) 9.1.2
  • 瘦1.2.7
  • Ruby 1.9.2-p290
  • Rails 2.3.11
  • Apache 2.2.14(详情如下)
服务器版本:Apache/2.2.14 (Ubuntu) 服务器建成时间:2012 年 2 月 14 日 16:42:27 服务器模块幻数:20051115:23 服务器加载:APR 1.3.8,APR-Util 1.3.9 编译使用:APR 1.3.8、APR-Util 1.3.9 架构:64位 服务器 MPM:工作者 线程:是(固定线程数) 分叉:是(可变进程计数) 服务器编译... -D APACHE_MPM_DIR="服务器/mpm/worker" -D APR_HAS_SENDFILE -D APR_HAS_MMAP -D APR_HAVE_IPV6(启用 IPv4 映射地址) -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="日志/错误日志" -D AP_TYPES_CONFIG_FILE="/etc/apache2/mime.types" -D SERVER_CONFIG_FILE="/etc/apache2/apache2.conf" root@a17:~# /usr/sbin/apache2 -v 服务器版本:Apache/2.2.14 (Ubuntu) 服务器建成:2012年2月14日16:42:27

【问题讨论】:

    标签: ruby-on-rails postgresql load thin


    【解决方案1】:

    这是 ruby​​ 中 TCP 堆栈的问题: http://bugs.ruby-lang.org/issues/5343

    尝试升级到 ruby​​ 1.9.3 或更高版本。

    【讨论】:

    • 非常感谢。这看起来非常相关 - 堆栈跟踪是相同的 - 但在我们升级 ti 1.9.3 后,问题仍然存在。
    • 嗯,我们最终从瘦身切换到独角兽,这完全避免了这种情况——也许它在 1.9.3 中仍然是一个问题?
    • 这实际上正是我们最终要做的。我们切换到独角兽,这个问题不再适合我们。
    【解决方案2】:

    我们最终从 Thin 转为 Unicorn。问题消失了。

    【讨论】:

      猜你喜欢
      • 2011-04-05
      • 1970-01-01
      • 2017-07-11
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2011-10-09
      相关资源
      最近更新 更多