Server Support Forum
Anzeige:

  #1  
Ungelesen 14.01.2012, 09:46
Registered User
 
Registriert seit: 10.2010
Beiträge: 34
Daumen runter Apache2 nicht erreichbar während PHP-Sessions gelöscht werden

Hallo,

ab und zu habe ich das Problem, dass durch den Cronjob von PHP

Code:
09,39 *     * * *     root   /usr/bin/nice -n10 [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete
der Apache2 ausgebremst wird - wenn ich unter "iotop" folgendes sehe:

Code:
find /var/lib/php5/ -type f -cmin +24 -delete
ist der Webserver nicht erreichbar. Dies dauert eigentlich nur wenige Minuten, ist aber trotzdem sehr ärgerlich ...

Ich weiss nicht, was ich da ändern könnte, damit alles wieder normal funktioniert.

Zum System:

Vor den Apache2 ist als Reverse-Proxy nginx geschaltet.

Ich hoffe, dass wir hier eine Lösung finden können...


Gruss

papagei9
Mit Zitat antworten

  #2  
Ungelesen 14.01.2012, 10:34
Benutzerbild von virtual2
Registered User
 
Registriert seit: 10.2010
Ort: /proc/sys/net/ip6
Alter: 17
Beiträge: 469

Läuft ein Froxlor?

Möglicherweise selbiges Problem wie in diesem Thread ohne ein laufendes Froxlor:

http://serversupportforum.de/forum/w...ge-errors.html

QuickNdirty Workaround: Failtime im nginx auf 30 Sekunden einstellen
Mit Zitat antworten
  #3  
Ungelesen 15.01.2012, 17:25
Registered User
 
Registriert seit: 10.2010
Beiträge: 34

Hallo, vielen Dank für deine Antwort.

Froxlor verwende ich nicht, aber Confixx.

Das mit dem "failtime" scheint mir ein guter Ansatz zu sein.
Ich finde keinen Eintrag in der /etc/ngnix/nginx.conf

Kannst du mir sagen, wo das "failtime" hin muss?
Hab es auch schon versucht, aber der configtest schlägt fehl...


Gruss

papagei9

Geändert von papagei9 (21.01.2012 um 19:42 Uhr)
Mit Zitat antworten
  #4  
Ungelesen 05.02.2012, 19:43
Registered User
 
Registriert seit: 10.2010
Beiträge: 34

Das Problem besteht immer noch ....
Mit Zitat antworten
  #5  
Ungelesen 05.02.2012, 19:53
Benutzerbild von d4f
d4f d4f ist offline
Support Guru
 
Registriert seit: 04.2007
Ort: /dev/urandom
Beiträge: 2.632
Blog-Einträge: 7
d4f eine Nachricht über ICQ schicken d4f eine Nachricht über MSN schicken

du kannst es mit "ionice -c 3 " versuchen, alternativ ein Skript verwenden welches zwischen 2 Deletes eine kleine Pause (0.01 Sekunde oder so) einlegt und dadurch die anderen Dienste zum Zug lässt.
__________________
Einige Beiträge sind auf meinem Smartphone verfasst. Bitte Tippfehler und Abkürzungen entschuldigen!
Bitte keine ICQ/MSN/Skype Kontaktaufnahmen ohne vorherige persoenliche Absprache.

This is Linux land. In silent nights you can hear the Windows machines rebooting.
Mit Zitat antworten
  #6  
Ungelesen 05.02.2012, 20:06
Registered User
 
Registriert seit: 10.2010
Beiträge: 34

Hey,

mit ionice -c 3 hat es nicht geklappt ... Dieses Problem besteht auch erst, seit ich nginx verwende.

Das mit der Pause zwischen dem Löschen, bringt das was? Weil der "find"-Befehl verursacht die Hauptauslastung .. es werden ja lediglich kleine Session-Dateien gelöscht ...
Mit Zitat antworten
  #7  
Ungelesen 05.02.2012, 21:42
Benutzerbild von virtual2
Registered User
 
Registriert seit: 10.2010
Ort: /proc/sys/net/ip6
Alter: 17
Beiträge: 469

Gibt nginx auch das header gedöns an apache korrekt weiter?

Und ist unter apache rpaf konfiguriert?
Mit Zitat antworten
  #8  
Ungelesen 05.02.2012, 22:00
Benutzerbild von d4f
d4f d4f ist offline
Support Guru
 
Registriert seit: 04.2007
Ort: /dev/urandom
Beiträge: 2.632
Blog-Einträge: 7
d4f eine Nachricht über ICQ schicken d4f eine Nachricht über MSN schicken

Naja, ich ging davon aus dass dein Skript selbst die Dateien sucht statt find zu benutzen =)

Alternativ, falls du die entsprechenden cgroup-Teile im Kernel hast, kannst du die IOPS des Prozesses beschraenken was aufs gleiche rauskommt.
__________________
Einige Beiträge sind auf meinem Smartphone verfasst. Bitte Tippfehler und Abkürzungen entschuldigen!
Bitte keine ICQ/MSN/Skype Kontaktaufnahmen ohne vorherige persoenliche Absprache.

This is Linux land. In silent nights you can hear the Windows machines rebooting.
Mit Zitat antworten
  #9  
Ungelesen 07.02.2012, 20:23
Registered User
 
Registriert seit: 10.2010
Beiträge: 34

für apache2 brauch ich eigentlich kein rpaf-Modul, nginx übergibt IP, etc alles korrekt.

Zitat:
Naja, ich ging davon aus dass dein Skript selbst die Dateien sucht statt find zu benutzen =)
Was gäbe es denn für Möglichkeiten, die Dateien anderweitig zu suchen? Dann könnt ich mir da sonst was zusammenbasteln...


Ich hab nun zusätzlich bei nginx die Timeouts auf 30 Sekunden heruntergestellt .. Mal schauen was das bringt.
Mit Zitat antworten
  #10  
Ungelesen 07.02.2012, 20:58
Benutzerbild von d4f
d4f d4f ist offline
Support Guru
 
Registriert seit: 04.2007
Ort: /dev/urandom
Beiträge: 2.632
Blog-Einträge: 7
d4f eine Nachricht über ICQ schicken d4f eine Nachricht über MSN schicken

Auf der Bash und in anderen Skriptsprachen gibt es sicherlich genug Alternativen, hier eine (ungetestete) PHP-Bastelei, in der Annahme dass deine Dateien alle im gleichen Ordner liegen (nicht rekursiv)
PHP-Code:
#!/usr/bin/php5
<?php
$Location 
'/var/lib/php5/';
$DeleteOlderThan 24;
$SleepFor 250;    //1000000 microseconds = 1 second

proc_nice(19);
$MaxModified time() - $DeleteOlderThan 60
$Folder scandir($Location);
foreach(
$Folder as $File) {
  if(
$File == '.' || $File == '..') continue;
  if(!
is_file($Location.$File)) continue;
  if(
file_ctime($Location.$File) < $MaxModifiedunlink($Location.$File);
  
usleep($SleepFor);
}
?>
Evtl musst du mit $SleepFor ein wenig herumspielen um einen guten Wert zu finden, 250Mikrosekunden sind je nach Belastung und Wunsch zuviel oder zuwenig.
__________________
Einige Beiträge sind auf meinem Smartphone verfasst. Bitte Tippfehler und Abkürzungen entschuldigen!
Bitte keine ICQ/MSN/Skype Kontaktaufnahmen ohne vorherige persoenliche Absprache.

This is Linux land. In silent nights you can hear the Windows machines rebooting.
Mit Zitat antworten
  #11  
Ungelesen 07.02.2012, 22:52
Benutzerbild von Firewire2002
Registered User
 
Registriert seit: 02.2006
Ort: Hürth
Beiträge: 3.822

Der einfachste Weg, wäre die Session Files in eine Ramdisk oder tmpfs zu stopfen. Verursacht die geringste IO und das Löschen geht wesentlich schneller.
Weiterhin könnte man den find optimieren, damit er nicht für jede Datei ein rm Prozess forkt, sondern mehrere Dateien auf einmal löscht.
Mit Zitat antworten
  #12  
Ungelesen 08.02.2012, 08:57
Registered User
 
Registriert seit: 07.2010
Beiträge: 144

Ein kleines, ungetestetes Bashscript, bei dem man die Anzahl der gleichzeitig zu löschenden Dateien und die Wartezeit zwischen den Löschvorgängen einstellen kann. Der Befehl für find geht dabei davon aus, dass alles in einem Unterordner ist. -mindepth und -maxdepth müssen ggf. angepasst werden

Code:
#!/bin/bash

if [ -x /usr/lib/php5/maxlifetime ]; then
	maxlifetime=`/usr/lib/php5/maxlifetime`
fi
filedir='/var/lib/php5/'
sleeptime='0.01'
maxfiles='10'

if [ -d $filedir -a !-z $maxlifetime ]; then
	ionice -n 7 -c 3 nice -n +19 find $yourdir -mindepth 1 -maxdepth 1 -type f -cmin $maxlifetime -print0 | xargs -0 -n $maxfiles | while read files; do
		ionice -n 7 -c 3 nice -n +19 rm $files
		sleep $sleeptime
	done
fi
Nachtrag: den Parameter "-t" scheint es nicht bei allen Paketen zu geben. Z.B. bei Debian 5 ist er nicht verfügbar.

Geändert von Terrorkarotte (08.02.2012 um 13:29 Uhr)
Mit Zitat antworten
  #13  
Ungelesen 08.02.2012, 19:51
Registered User
 
Registriert seit: 10.2010
Beiträge: 34
Daumen hoch

Hallo,


vielen Dank für die vielen Lösungsansätze bzw. schon fertige Funktionen

Alle Dateien befinden sich im gleichen Ordner, es gibt also keine Unterordner.


Die Lösung von d4f sieht sehr interessant aus, da es mit PHP gelöst ist, ich werde jedenfalls alle Vorschläge testen.

Eine Ramdisk für /var/lib/php5 nach Firewire2002 wäre sicherlich auch nicht das schlechteste, wodurch ich vorerst nur die Ramdisk erstellen könnte, um die Performance zu testen.

Auch an Terrorkarotte danke für den Vorschlag.

Ich werde hier dann auch das Resultat mitteilen, nachdem ich diverse Tests durchgeführt habe.


Grüsse

Andi
Mit Zitat antworten
  #14  
Ungelesen 11.02.2012, 22:11
Registered User
 
Registriert seit: 10.2010
Beiträge: 34

das PHP-Script von d4f führt noch nicht zum gewünschten Ergebnis ...

Bei Terrorkarotte hab ich nun folgendes Problem:

Code:
ionice -n 7 -c 3 nice -n 19 find $filedir -mindepth 1 -maxdepth 1 -type f -cmin $maxlifetime -print0 | xargs -0 -n $maxfiles | while read files; do
gibt folgenden Fehler aus:

Code:
./bash_1.sh: line 10: [: too many arguments
Was kann ich da machen?
Mit Zitat antworten
  #15  
Ungelesen 11.02.2012, 22:25
Registered User
 
Registriert seit: 07.2010
Beiträge: 322

Zitat:
Zitat von papagei9 Beitrag anzeigen
das PHP-Script von d4f führt noch nicht zum gewünschten Ergebnis ...
Und du hast dich auch an folgenden Hinweis gehalten?

Zitat:
Zitat von d4f Beitrag anzeigen
Evtl musst du mit $SleepFor ein wenig herumspielen um einen guten Wert zu finden, 250Mikrosekunden sind je nach Belastung und Wunsch zuviel oder zuwenig.
Mit Zitat antworten
Antwort

Lesezeichen


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
IMAP-Ordner werden nicht gelöscht rasmeratus Mail 4 16.06.2010 11:23
Web0 kann nicht gelöscht werden McTatze Confixx 2 25.01.2010 10:42
Emails werden nicht mehr gelöscht _CB_ Mail 1 09.12.2009 18:36
Verzeichnis kann nicht gelöscht werden amaier161 Plesk 6 08.07.2009 21:02
Wann werden SESSIONS aus dem TMP Ordner gelöscht? NM78 Dedizierte Server 2 08.04.2008 13:01





Powered by vBulletin® Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Content Relevant URLs by vBSEO ©2011, Crawlability, Inc.