Gleichzeitiges Ausführen vieler Batche (Diskussion)
Guten Tag allerseits
vielleicht interessiert das den einen oder anderen
auch ist das thema vielleicht schon mal angerissen worden, aus einem alten thema habe ich schon mal eine wichtige antwort heute bekommen.
so trivial sie ist, auch die erkentnnis, es war mir einiges nicht ganz klar.
also los!
ich habe ca 35 prozesse, die ablaufen müssen!
was macht der kleine klaus? ein skript schreiben:
1. _start.bat inhalt:
call 1.bat
call 2.bat
naja. bis zur 35.bat
das dauert....
im forum hier und in meinem koppe: da war doch was:
also die _start.bat NEU geschrieben:
start "204" /MAX a-204....bat
ca 35 stück!
die letzten beiden mit
start "201" /MIN a-201...bat
start "202" /MIN a-202...bat
[die letzten beiden sind klopper!: 600MB und 1 GB datendateien]
da die hardware kräftig ist, ...
ich will sie mal kurz beschreiben:
workstation von lenovo: 12x3,4GHZ kerne (XEON); derzeit (!nur! 48GB ram)
schweineteures ram! es ist workstationram (ddr3).
eine SSD NUR für %temp% und %tmp%.
SAS-platten (auf RAID habe ich bewusst verzichtet)
ein virtuelles laufwerk(v:\) nimmt sich 30GB von den 48GB Ram.... ;_)
die ramdisk wird mit WinRam Tech RAMDisk Enterprise (x64) gemacht. sehr gute lösung!, kost aber ca $30-50!
so.
wir haben also SEHR GUTE bedingungen, viele batche GLEICHzeitig ablaufen zulassen.
nö. nicht wirklich!
2. ALSO
_start.bat so geschrieben:
start "204" /MAX a-204....bat
start "203" /MAX a-203...bat
... usw usw usw: ALLES mit /MAX !
die letzten beiden mit /MIN
start "202" /MIN a-202...bat
=NICHT gut!
es tut sich nichts! alle fenster sind schwarz! (übrigens durch /MAX SEHR schön groß!!!!)
gefühlte 50-15 min warten, bis ein fenster losgeht. und sogleich rattern die anderen los!
naja.
irgendwann bei der sichtkontrolle, bemerke, es gibt "lesefehler"!
irgendwelche dateien haben sich nicht gefunden! häch?
geht doch nicht. das MUSS meine supermaschine schaffen!
NEIN, schafft sie nicht! (ram war ausreichend!)
3. DAS ist meine lösung!:
warum so?
erstens wird in jeder bat eine 100mb bis 1GB datei hinundherkopiert. DAS braucht zeit. in max 5 sec ist es erledigt.
d.h. JEDE batchdatei startet mit einem jeweiligen "vorsprunck" von 5sec. es gibt IMMER nur ein fenster, was "gleichzeitig" aufgeht. das klappt. es gbt keine wartezeiten!
nach 5 batchen wird 60 sek. GEWARTET! das reicht in den meisten fällen, und die angestossenen 5 batchen sind fertsch!
dann können die nächsten kommen! und immer so weiter.
zum schluss kommen meine klopper! die beiden 600/1GB dateien. die werden genauso wie die anderen mit /MAX gestartet, BZW.: NICHT mit /MIN! d.h. sie dürfen sich mit der normalen rechenpower austoben! und zum schluss sind NUR die beiden prozesse am laufen!
BEI diesem verfahren habe ich NICHT beobachtet:
a. fehler wie: plötzlich keine dateien vorhanden...
b. warten, bis überhaupt 1 fenster den mut hat, zu starten
und wichtig: KEINE pausen, die man wegdrücken muss.
wat sacht Ihr?
mich interessiert: warum das warten bei 2.?
warum arbeiten die skripte NICHT sauber (dateien "verschwinden")
[NEIN: die arbeiten untereinander NICHT mit den selben dateien!]
ist die kraft der workstation doch nicht ausreichend?
[bitte nicht auf LINUX verweisen, habe ich alles da. genug server am laufen.... ]
????
gruß klaus
info:
es sind ca 8GB an "ascii"-dateien mit höllischen binären zeichen mittendrin.
hier wird kräftig search and replace gemacht (mit einem werkzeug, welches erheblich schneller als PERL oder SED ist. naja.
vielleicht interessiert das den einen oder anderen
auch ist das thema vielleicht schon mal angerissen worden, aus einem alten thema habe ich schon mal eine wichtige antwort heute bekommen.
so trivial sie ist, auch die erkentnnis, es war mir einiges nicht ganz klar.
also los!
ich habe ca 35 prozesse, die ablaufen müssen!
was macht der kleine klaus? ein skript schreiben:
1. _start.bat inhalt:
call 1.bat
call 2.bat
naja. bis zur 35.bat
das dauert....
im forum hier und in meinem koppe: da war doch was:
also die _start.bat NEU geschrieben:
start "204" /MAX a-204....bat
ca 35 stück!
die letzten beiden mit
start "201" /MIN a-201...bat
start "202" /MIN a-202...bat
[die letzten beiden sind klopper!: 600MB und 1 GB datendateien]
da die hardware kräftig ist, ...
ich will sie mal kurz beschreiben:
workstation von lenovo: 12x3,4GHZ kerne (XEON); derzeit (!nur! 48GB ram)
schweineteures ram! es ist workstationram (ddr3).
eine SSD NUR für %temp% und %tmp%.
SAS-platten (auf RAID habe ich bewusst verzichtet)
ein virtuelles laufwerk(v:\) nimmt sich 30GB von den 48GB Ram.... ;_)
die ramdisk wird mit WinRam Tech RAMDisk Enterprise (x64) gemacht. sehr gute lösung!, kost aber ca $30-50!
so.
wir haben also SEHR GUTE bedingungen, viele batche GLEICHzeitig ablaufen zulassen.
nö. nicht wirklich!
2. ALSO
_start.bat so geschrieben:
start "204" /MAX a-204....bat
start "203" /MAX a-203...bat
... usw usw usw: ALLES mit /MAX !
die letzten beiden mit /MIN
start "202" /MIN a-202...bat
=NICHT gut!
es tut sich nichts! alle fenster sind schwarz! (übrigens durch /MAX SEHR schön groß!!!!)
gefühlte 50-15 min warten, bis ein fenster losgeht. und sogleich rattern die anderen los!
naja.
irgendwann bei der sichtkontrolle, bemerke, es gibt "lesefehler"!
irgendwelche dateien haben sich nicht gefunden! häch?
geht doch nicht. das MUSS meine supermaschine schaffen!
NEIN, schafft sie nicht! (ram war ausreichend!)
3. DAS ist meine lösung!:
start "204" /MAX a-204-....bat
timeout /T 5
start "205" /MAX a-205-.....bat
timeout /T 5
start "207" /MAX a-207-....bat
timeout /T 5
start "209" /MAX a-209-....bat
timeout /T 5
start "213" /MAX a-213-...bat
timeout /T 60
start "214" /MAX a-214-....bat
timeout /T 5
start "216" /MAX a-216-....bat
timeout /T 5
start "217" /MAX a-217-....bat
timeout /T 5
start "219" /MAX a-219-...bat
timeout /T 5
start "221" /MAX a-221-....bat
usw usw.
warum so?
erstens wird in jeder bat eine 100mb bis 1GB datei hinundherkopiert. DAS braucht zeit. in max 5 sec ist es erledigt.
d.h. JEDE batchdatei startet mit einem jeweiligen "vorsprunck" von 5sec. es gibt IMMER nur ein fenster, was "gleichzeitig" aufgeht. das klappt. es gbt keine wartezeiten!
nach 5 batchen wird 60 sek. GEWARTET! das reicht in den meisten fällen, und die angestossenen 5 batchen sind fertsch!
dann können die nächsten kommen! und immer so weiter.
zum schluss kommen meine klopper! die beiden 600/1GB dateien. die werden genauso wie die anderen mit /MAX gestartet, BZW.: NICHT mit /MIN! d.h. sie dürfen sich mit der normalen rechenpower austoben! und zum schluss sind NUR die beiden prozesse am laufen!
BEI diesem verfahren habe ich NICHT beobachtet:
a. fehler wie: plötzlich keine dateien vorhanden...
b. warten, bis überhaupt 1 fenster den mut hat, zu starten
und wichtig: KEINE pausen, die man wegdrücken muss.
wat sacht Ihr?
mich interessiert: warum das warten bei 2.?
warum arbeiten die skripte NICHT sauber (dateien "verschwinden")
[NEIN: die arbeiten untereinander NICHT mit den selben dateien!]
ist die kraft der workstation doch nicht ausreichend?
[bitte nicht auf LINUX verweisen, habe ich alles da. genug server am laufen.... ]
????
gruß klaus
info:
es sind ca 8GB an "ascii"-dateien mit höllischen binären zeichen mittendrin.
hier wird kräftig search and replace gemacht (mit einem werkzeug, welches erheblich schneller als PERL oder SED ist. naja.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 282705
Url: https://administrator.de/forum/gleichzeitiges-ausfuehren-vieler-batche-diskussion-282705.html
Ausgedruckt am: 23.12.2024 um 16:12 Uhr
2 Kommentare
Neuester Kommentar
Hallo Klaus,
Für die CPU Scheduler-Priorität gibt es die Parameter:
http://ss64.com/nt/start.html
Zusätzlich könntest du hier die Batches mit /Affinity mal auf die logischen Prozessoren verteilen.
Es könnte natürlich auch sein das die Batches(oder das uns unbekannte Tool) mit dem extrem schnellen Aufruf hintereinander, je nachdem was du darin machst erst mal Pufferspeicher allozieren muss was dann erst mal den Effekt hat als würden die Batches hängen.
Wenn dir in den Scripten fehlende Dateien bemängelt werden hast du dort vermutlich keine Checks eingebaut die die Existenz der Dateien prüft ? Oder bestimmte Dateien sind durch vorhergehende Prozesse gesperrt. Wir können hier ja leider nur wilde Vermutungen anstellen was du in deinen Skripten im Detail machst, aber der Grund wird vermutlich irgend ein Befehl/Tool sein was du darin nutzt.
Bau in deine Skripte ein detailliertes Logging ein damit du siehst an welcher Stelle es hakt.
Ein parallel laufendes ProcDump sollte zur Problemfindung ebenfalls beitragen. Zusätzlich auch ProcessExplorer mit seinen detaillierten Performance-Countern.
Ich würde sowas in der heutigen Zeit mit dafür vorgesehenen Tools wie Powershell machen die für parallele Verarbeitung mit Threads und Background-Jobs wesentlich besser geeignet ist und mit der sich die Threads auch überwachen und bei Bedarf neu starten lassen.
Das mit dem Timeout zwischen jeder Batch käme mir persönlich nicht in die Tüte wenn es ein regelmäßiger Job ist.
Gruß grexit
die werden genauso wie die anderen mit /MAX gestartet, BZW.: NICHT mit /MIN! d.h. sie dürfen sich mit der normalen rechenpower austoben! und zum schluss sind NUR die beiden prozesse am laufen!
ich glaube du hast da was missverstanden. Die Parameter /MIN und /MAX haben garnichts mit der Prozesspriorität zu tun sondern nur ob das Fenster minimiert oder maximiert ist.Für die CPU Scheduler-Priorität gibt es die Parameter:
/LOW Use IDLE priority class.
/NORMAL Use NORMAL priority class.
/ABOVENORMAL Use ABOVENORMAL priority class.
/BELOWNORMAL Use BELOWNORMAL priority class.
/HIGH Use HIGH priority class.
/REALTIME Use Realtime Priorität class
Zusätzlich könntest du hier die Batches mit /Affinity mal auf die logischen Prozessoren verteilen.
Es könnte natürlich auch sein das die Batches(oder das uns unbekannte Tool) mit dem extrem schnellen Aufruf hintereinander, je nachdem was du darin machst erst mal Pufferspeicher allozieren muss was dann erst mal den Effekt hat als würden die Batches hängen.
Wenn dir in den Scripten fehlende Dateien bemängelt werden hast du dort vermutlich keine Checks eingebaut die die Existenz der Dateien prüft ? Oder bestimmte Dateien sind durch vorhergehende Prozesse gesperrt. Wir können hier ja leider nur wilde Vermutungen anstellen was du in deinen Skripten im Detail machst, aber der Grund wird vermutlich irgend ein Befehl/Tool sein was du darin nutzt.
Bau in deine Skripte ein detailliertes Logging ein damit du siehst an welcher Stelle es hakt.
Ein parallel laufendes ProcDump sollte zur Problemfindung ebenfalls beitragen. Zusätzlich auch ProcessExplorer mit seinen detaillierten Performance-Countern.
Ich würde sowas in der heutigen Zeit mit dafür vorgesehenen Tools wie Powershell machen die für parallele Verarbeitung mit Threads und Background-Jobs wesentlich besser geeignet ist und mit der sich die Threads auch überwachen und bei Bedarf neu starten lassen.
Das mit dem Timeout zwischen jeder Batch käme mir persönlich nicht in die Tüte wenn es ein regelmäßiger Job ist.
Gruß grexit