Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 19. Nov 2018 15:21

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 14. Aug 2006 11:05 
Offline

Registriert: 14. Aug 2006 10:49
Beiträge: 7
Ich habe einen Apache laufen, der Webserver für mehrere Internetseiten ist. Nun soll dort zusätzlich mittels system(..)-Aufruf in einer php-Seite, die als http-cronjob regelmäßig aufgerufen wird, lokale, sehr rechenintensive Encodierungsprozesse gestartet werden.
Das Problem ist, dass jedes mal wenn das Encoding im Gange ist, die Webserveraktivität dadurch komplett blockiert wird, d.h. es werden keine anderen Webserveraktivitäten, wie Seiten ausliefern, etc. ausgeführt, solange der Encoding-Prozess nicht beendet ist.

Gibt es eine Möglichkeit, diese rechenintensiven Prozesse von den Webserveraktivitäten abzukoppeln (und evtl. auch aus der normalen Skript-Laufzeitbegrenzung auszunehmen?) bzw. die Priorität des Prozesses enorm zu "erniedrigen"?

Was ich bereits versucht habe, ist "nice" vor den encodierungsbefehl zu schreiben. Das hat jedoch die performance-blockade leider nicht beseitigt.

ich bin über jede Idee sehr dankbar!

Grüße,
Bernd


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 14. Aug 2006 12:11 
Offline
prolinux-forum-admin

Registriert: 14. Feb 2003 13:19
Beiträge: 1294
Welchen Nice-Wert hast Du denn benutzt ? Eigentlich sollte das klappen.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 14. Aug 2006 12:24 
Offline
prolinux-forum-admin

Registriert: 26. Jun 2004 21:18
Beiträge: 1444
> http-cronjob
Wasn dat?

Da der offensichtlich keine Interaktion benötigt (sonst wär es kein cronjob?), kannst du die Informationen die du aus der Serverumgebung brauchst in eine Datei schreiben lassen und ein richtiger Cronjob holt sich die wenn die Zeit ran ist.

Hier ein Auszug aus dem php.net-Manual:
"Die system() Funktionsaufrufe versuchen übrigens automatisch nach jeder Ausgabezeile den Ausgabebuffer des Webservers zu flushen, wenn PHP als Servermodul läuft"
Ziemlicher Müll also.
Da bist du wahrscheinlich mit einem cgi-script und dessen suexec() schneller und besser bedient. Oder wie oben beschrieben völlig trennen und Daten über eine Datei austauschen.


MfG, Klopskuchen

_________________
When all else fails, read the instructions .


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 14. Aug 2006 12:42 
Offline

Registriert: 14. Aug 2006 10:49
Beiträge: 7
Zitat:
Da bist du wahrscheinlich mit einem cgi-script und dessen suexec() schneller und besser bedient.
Mit cgi-scripts kenne ich mich leider gar nicht aus. Könnte es aber entsprechen auch eine Lösung sein, im php-script die Encodingaufrufe mittles exec(...) anstelle von system(...) aufzurufen?
Zitat:
> http-cronjob
Wasn dat?
ich meinte damit einen cronjob, der in bestimmten abständen eine .php datei, die auf dem webserver liegt als "normalen" Seitenaufruf anfordert. Hmm.. alernativ könnte ich die .php datei allerdings auch direkt per php befehl auf der kommandozeile aufrufen, hab ich nur noch nie probiert. Vielleicht ermöglicht das, dass der Prozess auch noch webserver-aktivitäten zulässt?
Zitat:
Welchen Nice-Wert hast Du denn benutzt ?
Ich hatte nichts angegeben. Laut manpage gilt dann der defaultwert 10. Ist das ok?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 14. Aug 2006 13:15 
Offline
prolinux-forum-admin

Registriert: 26. Jun 2004 21:18
Beiträge: 1444
Zitat:
Könnte es aber entsprechen auch eine Lösung sein, im php-script die Encodingaufrufe mittles exec(...) anstelle von system(...) aufzurufen?
Du kannst innerhalb der Funktionsaufrufe die Ausgabe umleiten. Bei system('while [ TRUE ]; do echo bla >/dev/null; done', $ret); startest du eine Endlosschleife, in der die Ausgabe nach /dev/null geschickt wird und so phps read() (und flush) entfällt, was den Anteil der serverseitigen Last ausmacht. Allerdings bekommt die Funktion dann gar keine Ausgabe mehr.
Bei einem cgi-script schreibst du dein Zeug einfach als normalen php-code in eine Datei, steckst sie ins Verzeichnis das in der httpd.conf als cgi-dir angegeben ist und startest das ganze wie gewohnt. Nur das du den Pfad relativ zum cgi-dir angibst. Dann wird mit fork() ein eigener Prozess gestartet, der sich bei Beendigung zurückmeldet.
Aber warum blockiert der Server? Du startest das script doch nur einmal, oder? Der Server erstellt sich selbst neue Kindsprozesse, wenn sie ihm auszugehen drohen.


MfG, Klopskuchen

_________________
When all else fails, read the instructions .


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de