Probleme mit FFmpeg / PHP/ 70 Load / iowait

Dieses Thema im Forum "Web- & File-Services" wurde erstellt von bombaldi, 04.07.2008.

  1. #1 bombaldi, 04.07.2008
    bombaldi

    bombaldi Grünschnabel

    Dabei seit:
    18.04.2008
    Beiträge:
    6
    Zustimmungen:
    0
    Hallo liebe Community,

    Wir haben ein kleines Problem mit unserem Debian Server und braeuchten dringend einen Ratschlag :)

    Ich fang einfach mal an:
    Auf unserem Server laeuft ein 'Konvertierungsdienst', der user hat die moeglichkeit ein video in einem beliebigen Format hochzuladen und unser
    Dienst wandelt das ganze dann in ein anderes Format um.
    Realisiert wird das ganze mittels php welches dann ffmpeg als syscall aufruft.


    Eines der Probleme ist im Grunde die extrem hohe Last die dabei verursacht wird.

    Hier ein kleiner Auszug:

    Jedenfalls ist der Apache momentan nur noch ganz schlecht zu erreichen (trotz priority handling mit nice)
    Irgendwas bringt das Scoreboard auf lauter Waiting Eintraege:

    Gibt es neben mod_status noch irgendwelche detailiertere Moeglichkeiten solche Fehler schnell zu finden?

    Im error log finde ich auch jede Menge von diesen Eintraegen:
    Laut mehrfachem Googlen stellte sich heraus dass dass bei den anderen immer mit fehlerhaften (vhost)Settings in der Config zu tun hat..ich denke aber das ist bei uns nicht der Fall, der Fehler tritt selbst bei einer unveraenderten Apache config auf bzw bei einer "frischen" apache config.
    Und nein, es liegt auch nicht an dem EnableSendfile = OFF wie in der apache doku beschrieben. Den Fehler habe ich auch schon oefters auf meinen anderen beiden Servern gesehen wo vollkommen andere Sachen laufen, mir ist aber nach wie vor unklar wie man das nun deuten soll.


    Also vermutlich liegt es wohl eher am Script, bzw an der Art wie PHP ffmpeg aufruft.

    Das script ruft über "proc_open()" das Konvertierungskommando auf.
    Wer diese Funktion kennt weiß das sie über 2 Pipes den Output der Funktion wieder gibt.
    Über die Funktion "fread()" lesen wir dann also diese Pipes aus.
    Danach parsed nur noch ein Regex die notwendigen Daten raus und die Arbeit ist getan.
    Über eine While schleife wird das ganze dann wiederholt.
    Um den Status nun aber auch an den User zu geben verwende ich "file_put_contents()".
    Mit dieser Funktion erstelle ich eine XML-Datei mit den Daten die der User dann sehen soll.
    Diese Daten werden dann anschließen über Ajax ausgelesen.

    Beim Convertscript öffne ich dabei den FFmpeg Prozess mit „proc_open()“ und lese dann den Status aus.
    Das ganze geschieht mit proc_open() weil wir eine Progressbar eingebaut haben die dem user anzeigt : 'x % fertig'

    Wir sind uns natuerlich nicht sicher ob dieser Weg so so intelligent ist...ich wuerde mich ueber Verbesserungsvorschlaege natuerlich freuen.


    Danke ;)
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. karru

    karru OSX'ler

    Dabei seit:
    02.05.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Mal ganz dumm nachgefragt:

    Seid ihr sicher, dass der Server auch >5 Videos gleichzeitig konvertieren kann?
    Habt ihr das mal getestet?

    Ich kann mir sehr gut vorstellen, dass der CPU/Platte einfach die Puste ausgeht, bei so vielen gleichzeitigen Aufgaben...

    Gruß
     
  4. #3 bombaldi, 04.07.2008
    bombaldi

    bombaldi Grünschnabel

    Dabei seit:
    18.04.2008
    Beiträge:
    6
    Zustimmungen:
    0
    Darum gehts doch ueberhaupt nicht :( Die CPU laeuft einfach auf Vollast, das ist bei 2 ffmpeg prozessen schon der FAll, und das wird auch bei 200 so sein.
    Wir haben schon nen Quadcore, hätten wir 4 quadcore's würden die auch alle ständig 100% Cpu Load verursachen

    Die Festplatte ist schnell genug, sonst waere die cpu auf %wa (afaik)


    Unsere Frage bezieht sich auf die art wie wir ffmpeg aufrufen, und warum die Apache prozesse auf W stehen.
    Es wird doch wohl irgendwie moeglich sein das ganze vernuenftig zu "throttlen" / limiten, so dass der Apache trotz 100% CPU Load halbwegs erreichbar ist und nicht alle Prozesse auf W stehen....

    Freue mich nach wie vor ueber jede Antwort ;)
     
  5. #4 saeckereier, 04.07.2008
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Ihr könntet die Konvertierung im Hintergrund in einer Warteschlange machen. Ist mit php aber nicht so einfach.
     
  6. #5 Aqualung, 04.07.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    Code:
    Das script ruft über "proc_open()" das Konvertierungskommando auf.
    Wer diese Funktion kennt weiß das sie über 2 Pipes den Output der Funktion wieder gibt.
    Über die Funktion "fread()" lesen wir dann also diese Pipes aus.
    
    Könnte das nicht mit Hilfe eines fifo realisiert werden?

    Schon versucht, den ffmeg-proz. zu nicen?
     
  7. #6 bombaldi, 04.07.2008
    bombaldi

    bombaldi Grünschnabel

    Dabei seit:
    18.04.2008
    Beiträge:
    6
    Zustimmungen:
    0
    saeckereier: Das haben wir nun als naechstes vor, aber es waere aus der sicht des Users schoener das ganze ohne sheduling / queue zu betreiben.

    Aqualung: ja ;) bringt nichts, da die Apache prozesse auf W stehen, ich muss erstmal rausfinden warum
    Kannst du uns mal erklaeren wie du das mit fifo meinst?
     
  8. #7 noreaga, 05.07.2008
    Zuletzt bearbeitet: 05.07.2008
    noreaga

    noreaga Eroberer

    Dabei seit:
    07.10.2005
    Beiträge:
    64
    Zustimmungen:
    0
    FIFO - First in First out
    Also im Prinzip das Warteschlangenmodell. Würde ich auch so machen. Die Files in ein Verzeichnis hochladen lassen und solange da was drin ist FFmpeg mit nem Cronjob oder besser mit nem Perl Skript ausführen lassen. Die FFmpg Prozesse würde ich auf alle Fälle vom Serverbetrieb abkoppeln. Die Aufgabe von nem Webserver besteht IMHO ja nicht darin Videos zu encoden sondern Content auszuliefern und Skripte zu verarbeiten.
    Aus Sicht des Users ist es glaub ich ziemlich egal ob er lange auf sein encodiertes Video warten muss, weil gleichzeitig x FFmpeg Prozesse laufen oder ob er lange drauf wartet, weil sein File in ner Queue ist. Solange die Rechenkapazität voll ausgelastet ist nehmen sich beide Methoden denke ich nicht viel weg. Eher ist schlechter alles gleichzeitig zu machen, weil Prozesswechsel auch immer Zeit kostet.

    Wichtig scheint mir auch die Encodierung nicht unbedingt mit PHP zu machen, weil hier oft sehr schnell die maximalen Ausführzeiten von PHP Skripten erreicht werden. (Bitte keinen Vorwurf machen wenns nicht stimmt)
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 uzumakinaruto, 05.07.2008
    Zuletzt bearbeitet: 05.07.2008
    uzumakinaruto

    uzumakinaruto Tripel-As

    Dabei seit:
    23.05.2008
    Beiträge:
    246
    Zustimmungen:
    0
    Ort:
    Gifhorn
    ich weiß ja nicht wie der server aussieht .. aber ich hatte mal was ähnliches bei einem webserver. die mysql datenbank hat den server zum kochen gebracht, sobald ein cronjob lief.

    das problem: die lüster waren total dreckig .. deswegen wurde die cpu zu heiß und hat sich deshalb runtergetaktet. könnte das hier auch so sein?

    und vllt postest du mal den relevanten php-code .. vllt ist dort ja der fehler.
     
  11. #9 Tomekk228, 05.07.2008
    Zuletzt bearbeitet: 05.07.2008
    Tomekk228

    Tomekk228 Lebende Foren Legende

    Dabei seit:
    14.08.2007
    Beiträge:
    2.417
    Zustimmungen:
    0
    Ort:
    /home/tomekk/
    Du kannst 3792572395623523652394723956325230 Quadcores mit 397753256923569259235ghz haben...

    die Konvertierung von Filmen wird _immer_ 100% beanspruchen... ob 1 film oder 10 gleichzeitig.

    Es wird immer, egal bei welcher CPU und wie viele usw 100% beansprucht da dann das konvertieren schneller geht.

    Deswegen gibt es bei den meisten Programmen zu Konvertierung die Möglichkeit die Prozess Prioritäten zu ändern. Ob hintergrund, vordergrund, langsam, schnell usw usf. (ok das hast ja schon versucht).

    Dann gibt es noch möglichkeiten generell Programme mit XY Mhz laufen zu lassen. Dazu solltest du googeln.

    Deswegen solltest du dich damit erst beschäftigen :)
     
Thema:

Probleme mit FFmpeg / PHP/ 70 Load / iowait

Die Seite wird geladen...

Probleme mit FFmpeg / PHP/ 70 Load / iowait - Ähnliche Themen

  1. Probleme mit FFmpeg

    Probleme mit FFmpeg: Hallo an Alle, ich hoffe ich bin hier richtig mit meinem Problem. Und zwar hatte ich auf meinen CentOS Server für Mysql und PHP ein Update...
  2. ffmpeg macht probleme

    ffmpeg macht probleme: Hi, ffmpeg funktioniert bei mir soweit einwandfrei, aber die libxvid macht probleme :/ Folgende Zeile gebe ich ein; ffmpeg -i...
  3. grub-pc Probleme bei upgrade

    grub-pc Probleme bei upgrade: Hallo, ich habe beim dist-upgrade folgendes Problem: ---------- Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Trigger für...
  4. Probleme mit YUM

    Probleme mit YUM: Hallo, ich habe CentOs 7 als Dualboot mit Windows 7 auf einen Dell Latitude E5510 installiert. Dies hat soweit auch alles geklappt. Leider habe...
  5. Forscher analysieren Durchsatzprobleme im Linux-Scheduler

    Forscher analysieren Durchsatzprobleme im Linux-Scheduler: Eine Gruppe von Forschern hat Fälle identifiziert, in denen der Scheduler im Linux-Kernel falsche Entscheidungen trifft und die CPUs nicht so gut...