Mailinglisten-Archive |
Hallo,
für einen PHP-Chat benutze ich shared-memory zur
Interprozesskommunikation, lief jetzt auch lange optimal. Plötzlich
bekomme ich aber die Meldung:
semget() failed for key 0x3a799372: No space left on device in
/vol/www/ordner/htdocs/datei.php on line 57
Meine Vermutung: Speicher zugelaufen, top zeigt aber nichts dergleichen
an. Zur Erläuterung: Beim Anlegen einer Chat-Sitzung wird ein
Shared-Memory unter einem neuen key angelegt, dieser wird während der
Chat-Sitzung benutzt, und er endet mit dem Anlegen einer neuen Sitzung,
die ein shm_remove auf den key ausführt und dann unter einem neuen key
(ich benutze den unix-timestamp) einen neuen Shared-Memory-Bereich
anlegt (noch Hintergrund: Chat-Sitzungen laufen zur
Kommunikationsforschung und sind zeitlich befristet).
Der Codeschnipsel, der obigen Fehler auslöst:
if(! ($sem_key = sem_get($sm_adress_key))) {
echo "sem_get fehlgeschlagen<br>\n";
exit;
}
Hat da jemand eine Idee?
Außerdem: Wenn sowas auf meinem lokalen Entwicklungsserver auftritt,
habe ich kein Problem damit, diesen neu zu starten, dann ist der
Speicher frei, mein Admin weigert sich aber - relativ nachvollziehbar -
das mit dem Internet-Server zu tun. Gibt es eine Möglichkeit, den
Speicher wieder freizugeben - was er nach top ja auch ist - ohne den
Server neu zu starten? Apache neustarten brachte keine Änderung.
Alternativ wurde mir die Interprozesskommunikation über sockets
nahegelegt, wie ist denn da die Meinung der werten PHP-Gemeinde? Ist
Shared-Memory bzw. ihre Implementierung wirklich Mist und sollte
tunlichst vermieden werden? Taugen die neuen 4.04-Befehle mehr?
Fragen über Fragen,
hoffentlich weiß eine(r) was,
Gruß
Andre Temme
php::bar PHP Wiki - Listenarchive