Connaitre qui à ouvert un process..
Récemment j’ai travailler à corriger un bug que j’avais avec Ferret
Ce petit utilitaire sur unix est trop puissant: lsof. Lsof nous permet de savoir quel application à ouvert un fichier (pid). Voici l’exemple que j’utilise
J’ai eu un connection timeout dans mon postgres. Je veux savoir la liste des process
-[ RECORD 1 ]-+--------------------------------
datid | 79357
datname | gm_core
procpid | 23621
usesysid | 19710
usename | carlpelletier
current_query |
waiting | f
xact_start |
query_start | 2009-07-20 15:19:57.845857-04
backend_start | 2009-07-20 15:19:46.448931-04
client_addr |
client_port | 50838
On prend le client_port et on fait
ruby 31377 usrgm 11u IPv4 53993738 TCP 127.0.0.1:50838->127.0.0.1:postgres (ESTABLISHED)
postmaste 31380 postgres 8u IPv4 53993743 TCP 127.0.0.1:postgres->127.0.0.1:50838 (ESTABLISHED)
Maintenant que nous avons le id du process, on peut voir le détails en faisant
usrgm 31377 1.0 1.6 148068 139456 ? Ss Jun09 633:43 ruby script/ferret_server -e production start
carl 30731 0.0 0.0 4080 740 pts/1 S+ 13:55 0:00 grep --exclude=*.svn* --color=auto 31377
Dans le cas précédent, on peut voir que le problème de connection timeout est survenu à cause de Ferret_server. Il semble ne pas fermer les connections correctement. Est-ce vraiment Ferret ou ActiveRecord? La est la question!
Mon but est de démontré l’avantage de lsof. Je suis en train d’investiger sur le problèmes de ferret, mais je commence à trouver que c’est coder tout croche ce produit la. J’ai eu tellement de difficulté avec. Je pense aller vers Sphynx.
Merci à Mina Naguib pour sont aide et sont explication de la commande lsof.
