我们有一个Thin + RoR和ActiveRecord + memcached + Postgres应用程序,它使用pg gem来访问Postgres数据库。
我们观察到,在高负载下,精简过程突然变得无法响应,并且在负载消退时永远不会恢复。与此同时,我们的数据库服务器运行良好 - 我们可以查询数据并在预期时间内获得响应。
我们观察到的事情:
请记住,这是95%的读取应用程序,具有或多或少的积极缓存策略(即我们没有可能导致死锁的数据库事务),我们正在寻找关于在哪里查看的建议。
非常感谢你的帮助!额外信息:
宝石:
环境:
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
答案 0 :(得分:2)
这是ruby中TCP堆栈的问题: http://bugs.ruby-lang.org/issues/5343
尝试升级到ruby 1.9.3或更高版本。
答案 1 :(得分:1)
我们最终从Thin转向Unicorn。问题消失了。