De Leeuw Guy wrote:
Bonjour Basile

Basile STARYNKEVITCH a écrit :
De Leeuw Guy wrote:
Bonsoir

J'ai crée une librairie dynamique qui est un ensemble de
fonctions/trigger pour postgres.
On peut la charger par dlopen
Le chargement ne pose aucun problème, des que le trigger est appelé une
1ere fois via un INSERT, DELETE ou UPDATE le module est bien chargé.
postgres offre deux méthodes :
_PG_init() initialisation du module lors du chargement
_PG_fini() clean up du module lors du déchargement.
Mon souci vient avec le déchargement, j'ignore a quel moment celui-ci
intervient et j'aimerais donc vérifier si la librairie est toujours en
mémoire.

Ce n'est pas forcément important si la librarie reste chargée. Par experience, un programme peut dlopen-er des dizaines ou centaines de milliers de librairies dynamiques *.so sans problème. La limitation est celle de l'espace d'addressage, et en pratique les libraries inutilisées sont swappées (en fait seuls leurs segments de données)

Je crois même que _PG_fini() n'est jamais appelé.

Je ne sais pas quand PostGreSQL appelle dlclose.

Je voudrais donc vérifier avec des outils système si oui ou non elle est
déchargée, si oui _PG_fini jamais appelé, sinon quand est il appelé
J'aimerais savoir :
- si il est possible de savoir si cette librairie est chargée en mémoire
et le nombre de segments data se rapportant à elle.
Pas sûr de comprendre précisément la question. Peut-être que dlinfo,
dladdr conviennent, et aussi la lecture (depuis le programme) de
/proc/self/maps
Self retourne le programme lui-même en l'occurrence le bash

Non, /proc/self/maps décrit la carte mémoire du processus courant. Si on la lit depuis le programme (donc le serveur PostgreSQL) on obtient bien la carte mémoire de ce programme. Ainsi cat /proc/self/maps retourne la carte du processus cat. On peut aussi (par exemple depuis un shell) lire /proc/1234/maps où 1234 doit être remplacé par le pid du processus voulu. Il y a aussi la commande pmap (paquet procps). Donc
 pmap $(pidof postgres)


--
Basile STARYNKEVITCH         http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net | mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***

Répondre à