Waiting for 1 connection to finish

Ca fait quelques jour que sur mon application en production j’ai le
message d’erreur suivant lorsque je redémarre les process Thin après une
mise à jour:

Waiting for 1 connection(s) to finish, can take up to 30 sec, CTRL+C to stop now

Est-ce que cela vient de la connection avec la base de données?
J’utilise Postgresl avec pool: 10 et wait_timeout: 10

J’ai 3 process Thin qui tournent, et j’ai souvent 1 process qui bloque
et les autres qui marchent encore. En attendant un temps suffisament
long, tous les process finissent bloqués.

Je n’ai aucun problème sur ma machine de dev. Quelqu’un a déjà eu ce
problème?

J’ai fais une mise à jour de mes gems: Rails 2.3.3, Thin 1.2.2, etc. Et
j’ai toujours au moins un process bloqué :frowning:

2009/7/21 Fernando P. [email protected]

J’ai fais une mise à jour de mes gems: Rails 2.3.3, Thin 1.2.2, etc. Et
j’ai toujours au moins un process bloqué :frowning:

Il s’agit d’une connection qu’un client http (navigateur) Ã avec le
serveur
et pas une connecton avec la base de données.

Par contre, pour trouver si elle est réelle et comment résoudre le
problème,
je ne vois pas de solution toute faite. Si tu es sur un linux
quelconque, un
netstat te renseignera sur les connections vers ton serveur :

netstat -anp # te donnera la liste de toutes les connections sans faire
de
résolution dns (plus rapide) et affichera le nom de chaque process
associé

Sur un bsd, tu peux avoir de même mais en retirant le flag p.


http://fabien.jakimowicz.com

Après avoir fait les mises à jour et kill -9 les process récalcitrant
qui trainaient et que j’avais oublié, c’est finalement revenu dans
l’ordre et je n’ai plus de problème. Bizarre.

Je garde sous le coude ton message des fois que ça recommence.

@+

Haha! Voici ce que $ netstat -anp de Fabien donne:

Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
[…]
tcp 1239 0 10.0.0.2:3100 10.0.0.1:36186
CLOSE_WAIT -
tcp 1 0 10.0.0.2:3100 10.0.0.1:48261
CLOSE_WAIT -
tcp 1107 0 10.0.0.2:3100 10.0.0.1:48286
CLOSE_WAIT -
tcp 1239 0 10.0.0.2:3100 10.0.0.1:36192
CLOSE_WAIT -
tcp 1152 0 10.0.0.2:3100 10.0.0.1:36189
CLOSE_WAIT -
tcp 1152 0 10.0.0.2:3100 10.0.0.1:36195
CLOSE_WAIT
[…]

Pour comprendre un peu tout ça, voilà mon setup et je crois qu’il est un
peu overkill:

J’ai 2 machines virtuelles, celle en 10.0.0.1 fait tourner Nginx qui
fait un proxy_pass vers la MV en 10.0.0.2 où mon appli Rails tourne.
Visiblement c’est la connexion entre les 2 MV qui foire. Pourtant je n’y
ai pas touché™

Bon et bien ça a recommencé, ce matin tous mes process Thin sont
bloqués…

J’ai réinstallé mes machines virtuelles et j’ai regroupé Nginx et Rails
dans la même, et j’ai encore ces problèmes de close connection!!! Mais
cette fois entre Rails et Postgresql (sur une autre MV).

Du wiki: http://wiki.rubyonrails.org/database-support/postgres

The postgres gem is written in C and is supported by ActiveRecord. The
last release was 0.7.9 (2008-01-24). Development has been discontinued
in favor of the pg gem.

The pg gem is the successor of the postgres gem and is also written in
C. It is currently NOT supported by ActiveRecord. There seems to be a
patch available here: http://dev.rubyonrails.org/ticket/10948 (I did not
test it). The last release is 0.8 (2009-03-29), which seems to be a sign
of active development.

J’utilisais jusqu’à présent le gem pg qui n’est donc pas officiellement
compatible avec ActiveRecord, donc en gros je suis dans la merde.

Quelqu’un utilise Postgresql avec Rails 2.3.3?

On 23 juil. 2009, at 17:21, Fernando P. <list-incoming@andreas-
s.net> wrote:

last release was 0.7.9 (2008-01-24). Development has been discontinued

J’utilisais jusqu’à présent le gem pg qui n’est donc pas officiellem
ent
compatible avec ActiveRecord, donc en gros je suis dans la merde.

Quelqu’un utilise Postgresql avec Rails 2.3.3?

Oui, depuis la 2.1 avec le gem pg. Je n’ai pas rencontré de problème
que ce soit en prod ou en dev. Mais par contre, j’utilise des sockets
UNIX et non un port tcp.

On Thu, Jul 23, 2009 at 6:43 PM, Fabien J.
[email protected]wrote:

The postgres gem is written in C and is supported by ActiveRecord. The
J’utilisais jusqu’à présent le gem pg qui n’est donc pas officiellement
compatible avec ActiveRecord, donc en gros je suis dans la merde.

Quelqu’un utilise Postgresql avec Rails 2.3.3?

Oui, depuis la 2.1 avec le gem pg. Je n’ai pas rencontré de problème que
ce soit en prod ou en dev. Mais par contre, j’utilise des sockets UNIX et
non un port tcp.

d’ailleurs, ce qui est précisé dans le wiki est erroné : - le ticket
10948
cité dans le post est fermé pour cause de duplication et pointe vers
http://dev.rubyonrails.org/ticket/11127

  • le second
    patch contenu dans le second ticket à été appliqué à dans rails depuis
    le 25 février 2008

Le code source de l’adapteur
essaie bien de charger le gem ‘pg’ avant le ‘postgres’ qui du coup
fait office de rétro-compatibilité
vu les ajouts de fonctions fait si jamais ce second cas se présente :
rails/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb at 40b387580ff251e06632fbcc87c2a78c027a6b27 · rails/rails · GitHub

http://fabien.jakimowicz.com

Cyril M. wrote:

Fernando P. a écrit :

The pg gem is the successor of the postgres gem and is also written in

Oui.

J’en suis revenu à faire marcher mon appli, ouf! Mais pour combien de
temps? Je commence à avoir des doutes sur les timeout d’Nginx, est-ce
que ce ne serait pas lui qui retient les connexions et les fait foirer
avec le temps?

Oui, depuis la 2.1 avec le gem pg. Je n’ai pas rencontré de problème
que ce soit en prod ou en dev. Mais par contre, j’utilise des sockets
UNIX et non un port tcp.
Je sens que je vais tout regrouper dans une seule machine virtuelle,
parce que ça m’em**rde plus qu’autre chose niveau maintenance d’avoir
tout séparé.

Merci pour votre aide :slight_smile:

Et merde!

Ca continue! Mon application a une faille ou quoi?

Un truc qui a à peu près les mêmes symptomes et qui tourne avec Rails
aussi:
http://projects.reductivelabs.com/issues/1095

Posted via http://www.ruby-forum.com/.

Fernando P. a écrit :

The pg gem is the successor of the postgres gem and is also written in

Oui.


Cyril M.

Argh!

Qu’est-ce que c’est que ça???

tcp 0 784 10.0.0.5:ssh john.astreet.com:46080
ESTABLISHED


Posted via http://www.ruby-forum.com/.

En fait j’ai un process Thin qui bloque à 100% de cpu. Là plus rien
n’est accessible de nouveau. Grrr!!! J’ai un leak quelque part dans mon
code? J’ai du mal à le croire j’ai très peu de connexions à cette heure
très tardive.

Posted via http://www.ruby-forum.com/.

J’ai remplacé Thin par le bon vieux Mongrel, je vais voir si ça change
quelque chose.

Posted via http://www.ruby-forum.com/.

Est-ce que ça pourrait venir de ma configuration d’Nginx? J’ai vu
quelques fils à ce sujet? Suis-je en train de subir des attaques DoS?

Posted via http://www.ruby-forum.com/.

Haha! On dirait bien que ça marche maintenant :slight_smile: Tant qu’à faire je
vais également tester avec Nginx+Passenger.

Non ça recommence!!! Qu’est-ce qui se passe? Je ne comprends pas, je ne
sais plus où chercher…

Fernando P. wrote:

J’ai remplacé Thin par le bon vieux Mongrel, je vais voir si ça change
quelque chose.

Posted via http://www.ruby-forum.com/.

Haha! On dirait bien que ça marche maintenant :slight_smile: Tant qu’à faire je
vais également tester avec Nginx+Passenger.

Bizarre. Bien que mes graphs indiquent une utilisation du cpu bloquée Ã
100% depuis environ 00:15 ce matin, mes fichiers de log indiquent que
les requêtes étaient quand même traitées.