Socket locké

hello ,
je cherche un moyen de libéré une socket sur un serveur SUN, OS = solaris.
Attention le init 6 est interdit.
Pour etre plus clair j’ai une appli qui me bloque des ports quand on l’arrête et je suis obligé de changer ce port pour redémarré l’application, malheureusement mon délai pour les restarts est très court.
Ah oui , éviter les commentaires: “redéveloppe ton appli”, elle est propriétaire de ma boite, donc je ne peux rien faire et ce n’est pas moi qui l’ai développé(pas assez doué
Si quelqu’un a une idée.

Un petit UP, cela me serait quand même bien utile si quelqu’un avait une idée . 

Mmmmhh, je doute que ce soit l’application qui laisse un port ouvert, l’OS est quand même là pour “faire le ménage”. Je pense que c’est un équipement du réseau entre ta machine et le destinataire qui croit que le port est toujours utilisé.

Regarde avec netstat.

merk , je viens juste de me rendre compte que j’ai oublié un gros détail.
En faites ces deux applications qui tournent sur ce serveur et qui communiquent via un port physique .
En faites lorsque l’on arrete un de ces 2 applications, le port passe en TIME_WAIT ou plus exceptionnel, il reste en ESTABLISHED alors qu’aucune application ne l’utilise.

merci quand même
 

Bon alors visiblement j’étais à côté de la plaque :/. J’ai évoqué ce truc parce que je me souviens d’avoir entendu quelques collègues râler sur les “time out” super long de certains équipements…

C’est quand même bizarre, par exemple dans mon labo on utilise une appli serveur qui écoute sur le port 50050 (je crois) et pour la fermer on la “kill” oui c’est gros bûcherons & Co mais bon, je ne vais pas tout refaire, hein eh bien, le port ne reste jamais bloqué…

ha ben en faites c’est le “kill” qui m’interesse .
Si tu peux me filer la syntaxe de la commande, ça serait sympa.
(tiens maintenant je me rends compte que cela aurait été beaucoup plus simple, si j’avais demandé ça directement, tsss )

bé tu fais

$ kill ‘le_numero_du proc’

ca envoie un sigterm ca devrai la fermet proprement …

Koubiak qui ce demande si ACE a fait des progrés a roullettes ?

Ca fait jamais qu’un truc de plus de locké…
Ok .

[quote]bé tu fais
$ kill ‘le_numero_du proc’

ca envoie un sigterm ca devrai la fermet proprement …
Koubiak qui ce demande si ACE a fait des progrés a roullettes ?[/quote]Ah oui mais non, même en “killant” le process, le port TCP reste locké un certain temps.
C’est le port IP que je veux pouvoir libéré.
Parce-que même avec un bon vieux kill -9 des familles, le port TCP reste locké.

Pour les progrès en roller, ben en faites je les ai rechaussé une fois et après je n’ai plus eu le temps (rigoler pas c’est vrai, je vais quand même essayer d’y arriver d’ici la fin de l’été )

Quelle version de Solaris? Y’a t’il l’utilitaire “lsof” installé dessus? Si oui:

lsof -i | grep appli/port et kill.

[quote]Quelle version de Solaris? Y’a t’il l’utilitaire “lsof” installé dessus? Si oui: lsof -i | grep appli/port et kill.[/quote]La version de Solaris est la 8.
Je ne connais pas l’utilitaire Isof. Est-ce qu’il est installé par défaut ou il faut le télécharger ?
En tout cas, merci.

Aller hop, je fais remonter ce thread en apportant une réponse faite par un de “nos” admins :


Il est possible de modifier la valeur de certains paramètres de la pile TCP.
-Pour connaître la valeur des paramêtres de la pile TCP, il faut utiliser en tant que root la commande ndd
exemple :
pour avoir tous les paramêtres modifiables de la pile:

ndd -get /dev/tcp ?

pour visualiser un paramêtre :

ndd -get /dev/tcp tcp_time_wait_interval

pour modifier un paramètre :

ndd -set /dev/tcp tcp_time_wait_interval 60000

Le script valeur-ndd.sh permet de visualiser toutes les valeurs:

./valeur-ndd.sh tcp

-Le paramêtre tcp_time_wait_interval concerne le temps que reste ouverte la socket alors que la connexion est terminé.

Par défaut ce paramêtre est de 4 mn (240000ms) su solaris8, il est conseillé de le mettre à 1 mn (60000) voir moins.

-Le paramêtre tcp_fin_wait_2_flush_interval concerne une socket qui attent le FIN ACK , par defaut il est a 675000 il est possible de le réduire (67550 conseillé.

Pour plus d’informations sur le Tuning TCP/IP Solaris :
http://www.sean.de/Solaris/soltune.html

Les modifications peuvent être faites à chaud. Par contre, pour que lors d’un nouveau boot les paramêtres soient pris en compte, il faut faire un script qui lance les commandes ndd et le placer dans /etc/init.d avec un lien dans /etc/rc2.d/S98***.

 

=======Les différents états d’une socket TCP==================

a- CLOSED (0)
1- Socket is closed
b- LISTEN (1)
1- Socket is passive, awaiting a connection request
c- SYN_SENT (2)
1- Socket is active, has sent a SYN
2- Session not yet active
d- SYN_RECEIVED (3)
1- Socket is active, has sent and received SYN
2- Session not yet active
e- ESTABLISHED (4)
1- Socket is active
2- Session is active, has complete handshake
f- CLOSE_WAIT (5)
1- Socket is closed, receive FIN, waiting for close
2- Session is terminating
g- FIN_WAIT (6)
1- Socket is closed, sent FIN, waiting for FIN ACK
2- Session is terminating
h- CLOSING (7)
1- Socket is closed, exchanged FIN, waiting for FIN ACK
2- Session is terminating
i- LAST_ACK (8)
1- Socket is closed, received FIN, waiting FIN ACK
2- Session is terminating
j- FIN_WAIT_2 (9)
1- Socket is closed, received FIN ACK
2- Session is complete
k- TIME_WAIT (10)
1- Socket is closed, waits for ( 2 * max segment life)
2- Session is complete


EDIT : Oups, je n’avais pas vu que mon collègue avait joint un petit script avec son mail, le voilà donc :

#!/bin/ksh

ndd.sh

permet de connaitre toutes les valeurs via ndd

PATH=/usr/sbin:$PATH
if [ -z “$1” ]; then
echo “Usage: $0 [udp | tcp | ip | icmp | arp | … ]”
exit
fi

ndd /dev/$1 ‘?’ | nawk -v c=“ndd /dev/$1” ’
/write/ {
  split($0,a,/[ (]/);
  n=c t " " a[1];
  printf "echo %s = ",a[1];
  printf "%s
",n;

}’ | sh

Ce message a été édité par Moktar le 30/06/2003

Merci Moktar.
Juste pour savoir, le script que tu donnes est celui à mettre dans /etc/init.d ?

Nope nope, c’est juste un script qui t’aide à lister ta config. Tu copies/colles ça dans un fichier text (avec droit en exécution) et tu le lances… tu vas voir, j’en suis sûr

Au fait, les PM vides peuvent être évités en mettant un titre