verständnisfrage: pthreads und speichernutzung
-
hallo,
folgendes: ich habe hier zwei programme, einen server der über udp daten von einer sps abholt und im shared-memory bereitstellt und einen client der die daten aus dem shared-memory holt und weiterverarbeitet. client schickt befehle was zu tun ist über eine message-queue an den server.
für jede angeschlossene sps wird beim start des servers ein thread gestartet der dann zyklisch die befehle für die jeweilige zugewiesene sps verarbeitet plus ein thread der die nachrichten aus dem message-queue abholt und weiterverarbeitet.
starte ich nun "top", liegt der speicherverbrauch bei beiden programmen bei 0.1 bis 0.2%. auch die werte unter den spalten VIRT, RESR, SHR sind relativ niedrig und bleiben bei dem client die ganze zeit auch unverändert. allerdings verschickt der client alle 5 sekunden eine neue nachricht an den server, und dann erhöht sich der wert für den server bei VIRT und SHR um 36, bei RES um 4, allerdings bleiben die werte für ram/swap in der oberen zeile ziemlich unverändert.
nun meine frage:
- wandern hier einfach irgendwelche sachen in den puffer/cache?
- gibt es einen befehl ähnlich wie getpid() damit ich nachschauen kann wie hoch der aktuelle speicherverbrauch ist? oder muss ich das über /proc machen?
- oder gibt es irgendwelche debugger oder sonstwas womit ich überprüfen kann bei welchem programm-abschnitt sich der speicherverbrauch erhöht? sorry, habe mit sowas noch nie gearbeitet.vielen dank schon mal im voraus.
gruß'l, marco
-
ei bin isch bleeed
nach shmat() sollte am ende auch ein shmdt() folgen
trotzdem würde mich aber generell die frage interessieren wie ich den speicherverbrauch bzw. speicherlecks finden kann
-
Speicherlecks kannst Du mit Memory-Debuggern wie valgrind (sehr mächtig) finden, oder mit dem in der libc eingebauten Tracer. Bereichsüberschreitungen und Zugriff auf nicht-allokierten Speicher finden auch valgrind oder z.B. ElectricFence.