Apache2 nicht erreichbar während PHP-Sessions gelöscht werden

Ich verstehe auch nicht, warum nicht der in PHP integrierte GC fuer die Sessions benutzt wird?! Der ist konfigurierbar und funktioniert gut.
 
Wieviele Sessions hast du? Kannste anzeigen mit:
PHP:
echo "Scanned ".(count($Folder)-2)." I-Nodes in ".(microtime(true)-$Before)." sec".PHP_EOL;

Ansonsten kümmert sich PHP GC selbst um die Session-Files
Ob das ausreicht haengt vom Einsatzzweck ab.
 
Das Zeugs ist wohl ein normaler Cronjob von PHP ...
in der php.ini finde ich folgendes:

Code:
session.gc_maxlifetime = 1440

Bedeutet auch 24 Minuten ...

Oder kann es sein, dass nur wenn der Endbenutzer die Seite nochmals aufruft und gc_maxlifetime überschritten wurde, dass dann die Session gelöscht wird?


//Edit:

Die Ausgabe der Anzahl Sessions kann ich erst posten, sobald das Aufräumen wieder sehr lange dauert... Hab da ein Check eingebaut.
 
Last edited by a moderator:
Oder kann es sein, dass nur wenn der Endbenutzer die Seite nochmals aufruft und gc_maxlifetime überschritten wurde, dass dann die Session gelöscht wird?
Wozu verlinke ich hier eigentlich noch Dokumentationen, wenn sie eh keiner liest :-/
 
Oh, diesen Teil bei der Dokumentation hab ich überlesen ...

Noch kurz zur Auswertung vom anderen Script:

Code:
Scanned in 240.62626195 sec 
Scanned 186 I-Nodes in 240.713857889 sec

Code:
Scanned in 43.8853240013 sec 
Scanned 195 I-Nodes in 43.8854169846 sec

Code:
Scanned in 2.52769708633 sec 
Scanned 143 I-Nodes in 2.55781006813 sec

Seltsam...


Code:
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.

[B]; This is disabled in the Debian packages, due to the strict permissions
; on /var/lib/php5.  Instead of setting this here, see the cronjob at
; /etc/cron.d/php5, which uses the session.gc_maxlifetime setting below.[/B]
; php scripts using their own session.save_path should make sure garbage
; collection is enabled by setting session.gc_probability
;session.gc_probability = 0
session.gc_divisor     = 100

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440

Der fett markierte Teil bedeutet also, dass ich das ganze mit dem Cronjob machen muss ... So ein Mist.
 
Hmmmm.... 195 Dateien auf zu listen sollte nicht so lange brauchen,
deine Festplatte scheint also schon so am Limit zu roecheln und das gibt ihr den Rest. Vermutlich ist also ein TMPFS hier die beste Wahl, ausserdem solltest du noatime als Mount-Option fuer das Dateisystem setzen.


Aber versuch mal das:
PHP:
#!/usr/bin/php5
<?php
$Location = '/var/lib/php5/';
$DeleteOlderThan = 24;
$SleepFor = 250;    //1000000 microseconds = 1 second

proc_nice(19);
$MaxModified = time() - $DeleteOlderThan * 60; 
$Handle = opendir($Location);
while(($File = readdir($Handle)) !== false) {
  if($File == '.' || $File == '..') continue;
  if(!is_file($Location.$File)) continue;
  if(file_ctime($Location.$File) < $MaxModified) unlink($Location.$File);
  usleep($SleepFor);
}
?>
 
Danke d4f,

jetzt befinden sich momentan alle Berechnungen zwischen 3 und 8 Sekunden, das ist sehr gut. Ich hoffe, das bleibt auch so :)

Gibt leider immer noch öfters längere Scriptlaufzeiten.
Ich werd das mit dem tmpfs anschauen. RAM hab ich noch ein wenig zur Verfügung ;)

//Edit:

Habe nun ein tmpfs erstellt, damit klappt alles ohne Probleme! :)
 
Last edited by a moderator:
Back
Top