XP CMD-Box RAM/Speicherüberlauf

cumulonimbus8

Fleet Admiral
Registriert
Apr. 2012
Beiträge
18.380
Hallo!

Mir macht in letzter Zeit (2 Monate höchstens) eine DOS-Anwendung Sorgen.
Schon Jahre wird ›die selbe‹ (täglich in identischer Grundstruktur frisch generierte) Batchdatei aufgerufen. Darin wird, die bewusste DOS-Anwendung von 1998 dürfte keinem geläufig sein, über CALLen einer statischen Batch, die nur Parameter verdauen muss und sogar selbst CALLt, der Einzelfall mehrmals angepasst abgearbeitet.

Das scheitert, und der Verdacht eines RAM-Mengen-Probems liegt nahe. Und würde nicht eine weitere Maschine (dito XP) auch in ähnlicher Form Fehler werfen dann würde ich auch nicht diese Anfrage stellen.

Starte ich die bewussten Zeilen einzeln dann passiert es (..!) dass jede für sich durchläuft und die geforderte Ausgabedatei generiert. Mal aber läuft es durch ohne die Ausgabedatei und mal - aber dazu nächster Absatz.

Um dem Problem, da das «Außenrum» (das ironischerweise auch diese DOS-Anwendung bemüht!!) so weit läuft, einzeln nachzukommen wollte ich diese kritischen Schritte ausklinken [ohne Ausgabedateien können die natürlich nicht verwertet werden] und wahrhaftig gestapelt schrittweise ablaufen lassen. Unter Übernahme von CHOICE, gegen ein gewisses Du-musst-nicht-immer-bei-Pause-eine-Taste-drücken (weil man ja auch sonst zu tun hat) & nach einem Warnton(*) tickt das eigentlich rein logisch völlig korrekt durch, es wird aus einer FOR-Schleife heraus eine Sub angesprungen (internes CALL mit Parameter, endet mit GOTO :eof) - und in dieser Verpackung bekomme ich sogar nicht selten einen Stack Overflow auf den Deckel! Wohlgemerkt, das lief so sogar mal so völlig sauber durch.

Wie bekomme ich genug RAM für CMD an die Hand? Oder CMD so ›dicht‹, dass es seinen RAM-Bereich zementiert?

Man sehe ein weiteres Tool, SPSS, das gelegentlich die Frechheit hat zu melden, dass es nicht mal 128MB aus 2GB «am Stück» bekommt und prompt eine Bauchlandung hinlegt (dass genug RAM frei ist muss ich nicht erwähnen; sonst liefe ja keine weitere Anwendung…)
Da das nun auch noch nach einem Reboot passiert (dank freundlicher Einladung durch WIN-Update stets zur Hand in den letzten Tagen) gehen mir die Ideen aus was da plötzlich zum Querschläger wird.

CN8

(*) Wo bekomme ich ein (8-ung) 64-bit-fähiges Kommandozeilentöölchen her das einfach nur Frequenz + Dauer als Parameter bekommt um solche erkennbaren Signaltöne zu erzeugen? Denn wenn das alles mal unter 7-, 8-, 10-64 tun muss fehlt mir plötzlich der… Weckruf.
 
Gibts das Problem auch ohne die blumige Ausdrucksweise? Ich versteh grad nur Bahnhof, mehr Details bitte.
"Die bewußte DOS Anwendung von 1998", ist das die deren Namen man nicht nennen darf? Brauchst du wirklich DOS, ich hab den Eindruck du arbeitest eher in der Windows Kommandozeile?

SPSS? Rätsel über Rätsel.
 
OK. Kennst du VOXCO? Kennst du gewisse Eigenarten, oder dass die Firma sogar auf unsere Anregung diese Software damals verbessert hat?
Über SPSS rede ich nicht, selbst neue Versionen sind keine Erfüllung in der Hinsicht RAM.

Also:
• Ein über Jahre erprobtes Skript (Batch) versagt auf zentrale Weise.
• Leider zeigt die Software von VOXCO (ein Modul dieser Software) keine Fehler an - außer «DOS» selbst gibt seit Neuestem den Stack Overflow. Und, das habe ich vergessen zu erwähnen, auch wenn ich sofort eine neue CMD-Box öffne!
• Dass das schief läuft merkt man also erst 20 Minuten und mehr später.
• Das Modul wird von der Batch über Sub-Batches auch auf andere Weise aufgerufen, und das funktioniert.
• Kritische Befehle auf Kommandozeile per Hand funktionieren…
• …in dieser Batch scheitern sie seit jüngster Zeit zu oft…
• und in (m)einer spezialisierten Test-Batch die Schleifen und einige Variablen benutzt (meine Annahme: RAM-Konsumenten) geht es noch öfter schief - gewissermaßen das Dümmste was kommen kann.

Wenn also irgendetwas das RAM einengt, wie löse ich diese Kette? Sind es Updates oder spinnt ein Virenschutz (Avast 2015 Free); sind Updates des Mailers (SeaMonkey) schuld?
Oder gibt es andere Ideen?

CN8
 
Voxco, noch nie gehört. Aber wozu gibt es Google ;)

Also ich hab erst vermutet es geht um echtes DOS, da konnte man der Command.com beim Aufruf noch Parameter übergeben um den Umgebungsspeicher zu konfigurieren. Beim echten DOS war der freie Speicher auch von diversen Treibern abhängig (himem.sys, emm386.exe, ...) und was noch alles so geladen wurde. Diesen ganzen Krams gibt es aber schon seit WinXP nicht mehr unter Windows.
Deine Voxco Installation läuft unter welchem Windows?

Wenn es plötzlich auf zwei Rechnern nicht mehr läuft würde ich ein Softwareproblem vermuten das durch ein automatisches Update verursacht wurde. Gibt es kein Komplettbackup des Systems in noch funktionsfähigem Zustand? Da könnte man vergleichen was sich alles geändert hat.

Nochmal zu der Frage aus deinem ersten Post, ein Programm um Sounds auszugeben ... also ein resourcenschonender Mediaplayer der z.B. ein Wav als Parameter übernimmt und so konfigurierbar ist, das er sich nach dem abspielen wieder beendet. Dann noch ein Verzeichnis mit mehren Wav Dateien, je nach Bedarf und entsprechend benannt. Man könnte sicher auch automatisch ne Mail verschicken oder sowas.
 
Mir reicht eine simples Kommandozeilentool das «Pieeeep!» macht (oder «Pooooop!» oder «Pip» um zu unterscheiden).

Ein Systembackup nützt nichts wenn es WIN-Updates sind…

Die Sache nimmt abstruse Formen an. ZZ. sind 5 ‹Einheiten› zu bewältigen die sich in der Größe ihrer Datenbestände unterscheiden. Auch wenn ich extra nachsehen müsste, es ist eigenartig, dass «hier» die Einheiten 4 und 5 die etwas anders ausgewertet werden heute durchliefen.
Also Rechner 2 mit der Spezialbatch mit Schleife bemüht, Einheit 1 läuft durch, 2 bis 5 versagen kläglich {könnte man doch mal einen Fehlermeldung lesen; das Tool okkupiet 80x25 und löscht den Bildschirm}. Augenblicklich (um das zusammenzuklauben) läuft «dort» Einheit 2 per Kommandozeile aus der Haupt-Batch manuell, und soeben erfolgreich durch. Nummer 3 ist gerade unterwegs. Ebenso erfolgreich. Nun ist der Sinn einer Batch… Eben…


Hier der Durchmarsch, ein wenig sehr reduziert. In den Batches gibts Kommentare, Entscheidungen + Sprünge (IF & GOTO) und COPY nebst DEL was aber das Voxco-Modul in seinem Aufruf nicht anficht sondern nur die Steuerdateien (unsere o.g Anregung, faktisch eine Batch fürs Modul) mit Parametern versorgt wie wir das kennen.

Befehl aus der Hauptbatch {nach ausschließlich Löschen, Entpacken, Kopieren}
call SUBBATCH1 AA xx 1120 KLMN 2014 AA
(1120, aber das hat jeder erraten, ist ›gestern‹ als MMTT - und was könnte nur 2014 sein?)
(Die Zeile kommt für 5 Einheiten -KLMN- 5x direkt untereinander vor, mit bei 4 und 5 anderen Kontrollen statt xx, AA ist zz. statisch und ›überlebt‹)

SubBatch1
call SUBBATCH2 KLMN
VoxcoModul Steuerdatei#1 KLMN & Rattenschwanz an Kommandos für Steuerdatei#1
VoxcoModul Steuerdatei#3 KLMN xx yy Code1
VoxcoModul Steuerdatei#3 KLMN xx yy Code1

SubBatch2
VoxcoModul Steuerdatei#2 KLMN

Per Hand rufe ich nur (entsprechend) auf:
SUBBATCH1 AA xx 1120 KLMN 2014 AA

Die Spezialbatch ist recht umfangreich, viele Variablen:
Code:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set Ctry=AA
set Ctry0=%Ctry:~0,1%
set Proj=ABCD EFGH IJKL MNOP QRST  ## das ist statisch, aber damit kann ich leben
## Faulheitsgrund ist, dass ich diese Proj…ekte 2x brauche, daher Variable für Schleife

i:
cd \Ordner
call :Gestern ## das Datum ist wichtiger als die Proj's
set Datum=%MonatG%%TagG%
echo.
if %1! == /?! goto Syntax
if %1! == c! goto CPFR
if %1! == C! goto CPFR
if not %1! == ! (
 set Datum=%1
)

rem Diskrepanz Choice.Com (32bit) und Choice.Exe (64bit)
echo ANSAGE %Ctry0%, %Datum% zusammenkopieren? (J/N - N in 5s)
choice /c:jn /n /t:n,5 
if errorlevel 2 goto Machen
goto CPFR

:Machen
echo COPY ProdDum.sve ProdDay.spl
copy proddumm.sve prodday.spl
ton 2000,10 ## eben dafür brauch ich diese Pieps-Anwendung! (Selbetgemachte EXE aus QBasic {hüstel…})
pause ## manchmal ist dieses File auf de Server gelockt = Unfall. Wird in einer SubBatch verwendet, aber nur für schnödes COPY
for %%a in (%Proj%) do (
 set b=%%a
 set c=!b:~0,1!
 set /a d=!c!*1
 if !d! == 0 (
  set Bus=xx ## Bus ist der oben erwähnte Schalter 1,2,3 / 4,5
  ) else (
  set Bus=yy
 )
 call :SubBauen %%a
)
ton 3000,20
goto Ente

:CPFR
if not %2! == ! (
 set Datum=%2
)
set FREQ=freqdumm.txt ## …dummY…
for %%a in (%Proj%) do (
 set FREQ=!FREQ! + %%afreq.txt ## diese ›FREQ‹-Dateien sind es die erzeugt werden - oder eben nicht…
)
echo COPY %FREQ% %Ctry0%_fr%Datum%.txt
copy %FREQ% %Ctry0%_fr%Datum%.txt
copy ?_fr%Datum%.txt a_fr%Datum%.txt
move *_fr*.txt i:\Ordner2\freq\ ## hmmm… das i: ist eigentlich unnötig…
goto Ente

:SubBauen
echo SUBBATCH1 %Ctry% %Bus% %Datum% %~1 %JahrG% %Ctry%
call subbatch1 %Ctry% %Bus% %Datum% %~1 %JahrG% %Ctry%
echo DIR %~1freq.txt ## Sichtprüfung!
dir %~1freq.txt /b
ton 5000,10
echo Alles klar mit der FREQ-Datei? (J/N - Ja in 15s)
choice /c:jn /n /t:j,15
if errorlevel 2 goto Ente
goto :eof


::----------------------------------------  (kennt jemand einen kürzeren Trick in Batch..?)
:Gestern
if %date:~2,1% == . goto TMJ
::JJJJ-MM-TT
set Jahr0=%date:~0,4%
set Monat0=%date:~5,2%
set Tag0=%date:~8,2%
goto Aufbauen
:TMJ
::TT.MM.JJJJ
set Jahr0=%date:~6,4%
set Monat0=%date:~3,2%
set Tag0=%date:~0,2%

:Aufbauen
::Gestern aufbauen - für Gewaltmaßnahmen
::set JahrG=2009
::set MonatG=01
::set TagG=01
set JahrG=%Jahr0%
set MonatG=%Monat0%
set TagG=%Tag0%

::Heutiger Tag Minus 1 - Nullnummer?
set /a JahrX=TagG-1
if not %JahrX%!==-1! goto TagNull
set /a JahrX=%TagG:~1,1%-1

:TagNull
set TagG=%JahrX%
::Nur so ist der f³hrenden Null beizukommen:
set TagG=0%TagG%
set TagG=%TagG:~-2%
if not %TagG%==00 goto :eof

set /a JahrX=MonatG-1
if not %JahrX%!==-1! goto MonNull
set /a JahrX=%MonatG:~1,1%-1

:MonNull
::Heutiger Monat Minus 1...
set MonatG=%JahrX%
set MonatG=0%MonatG%
set MonatG=%MonatG:~-2%

::Verteilen nach Zahlen
if %MonatG%==00 goto Dez
if %MonatG%==04 goto DreiNull
if %MonatG%==06 goto DreiNull
if %MonatG%==09 goto DreiNull
if %MonatG%==11 goto DreiNull
if %MonatG%==02 goto Feb

set TagG=31
goto :eof

:Feb
set TagG=28
::ein wenig Pfusch
set /a JahrX=%JahrG%*10/4
::wir brauchen hier nur einen Test-Wert
if %Jahrx:~-1%==0 set TagG=29
goto :eof

:DreiNull
set TagG=30
goto :eof

:Dez
set /a JahrG=%JahrG%-1
set MonatG=12
set TagG=31
goto :eof
::----------------------------------------

:Syntax
echo.

[CUT]

:Ente
rem nötig für Ordnung ## oder auch nicht, zeigt aber den Variablenbedarf
ENDLOCAL
Set Proj=
Set Bus=
Set Ctry=
Set Ctry0=
Set FREQ=
Set Datum=
Set Jahr0=
Set Monat0=
set Tag0=
Set JahrG=
Set MonatG=
set TagG=
set JahrX=
Damit kann jeder abschätzen, ob Variablen und die Schleife mit ihrer Verwaltung zu viel RAM auf irgendeine ungewöhnliche Weise belegen. Streng logisch ist es ja sooo einfach direkt…

CN8
 
Mit "Komplettbackup des Systems" war inklusive System (Windows) gemeint. Natürlich muß man nach dem Restore die Windowsupdates erstmal abschalten bzw. den Rechner vom Netz nehmen bis die Untersuchung abgeschlossen ist.

Wenn du schon einen Beep Befehl per QBasic nachgebaut hast, dann reicht das doch? Der Vorschlag mit dem Mediaplayer war eher als einfachste Lösung für Programmierunkundige gedacht.

Um an die normalen Ausgaben des Programs (evtl. auch die Fehlermeldung) zu kommen könnte man es mit einer Umleitung in eine Datei versuchen. Klappt leider nicht mit allen Programmen. Aber das Errorlevel müßte sich abfangen lassen, ist aber oft wenig aussagekräftig.


PHP:
echo start des Tools >LogTool.txt
echo Parameter >>LogTool.exe
tool.exe Parameter  >>LogTool.txt
echo %errorlevel% >>LogTool.txt
echo Fertig >>LogTool.txt
 
Mit "Komplettbackup des Systems" war inklusive System (Windows) gemeint.
weder-Noch. Ich schreib, dass mir kein Systembackup nützen würde da ich nicht auf die Updates verzichten kann. Das ist «Produktivsystem» und da fehlt es an Zeit ein altes Backup zu bemühen um dann ohne Updaten zu experimentieren.
Mit mehr Zeit wäre das denkbar; im Moment aber müsste ich noch andere Baustellen bedienen und auch versuchen, andere Maschinen zu Vergleichszwecken heranzuziehen.

Wenn du schon einen Beep Befehl per QBasic nachgebaut hast, dann reicht das doch? Der Vorschlag mit dem Mediaplayer war eher als einfachste Lösung für Programmierunkundige gedacht.
16-Bit vs. 64-Bit. Du verstehst? Diese alte Software wird da dank Abwärtsinkompatibilität nicht unterstützt. Wie so manches Schätzchen.

Um an die normalen Ausgaben des Programs (evtl. auch die Fehlermeldung) zu kommen könnte man es mit einer Umleitung in eine Datei versuchen. Klappt leider nicht mit allen Programmen. Aber das Errorlevel müßte sich abfangen lassen, ist aber oft wenig aussagekräftig.
Ich sage mal: schön wärs :D

Aber immerhin war das mal ein Denkanstoß. Könnte ich ggf. morgen mal versuchen.
Nur so eine 64-Bit-Pipse, die hätte ich gerne. (Wie der Code offenbar musste ich mir irgendwo eine Choice.Exe organisieren weil das eigentlich schon unter XP ausgestorbene unter 64-Bit nicht lief. Warum das offensichtlich in 8 und im Pfad vorhandene gespukt hat, während ich meine Batch als Rohform daheim testete, entzieht sich mir.)

CN8


2014-11-22 15-23-28

Ich habe für den kritischen Prozess, meint die Standardbatch, einen anderen Rechner (#2 wurde vorsichtshalber ausgeschaltet, da kann ich erst Montag ran) herangezogen. wie empfohlen. Lief natürlich butterweich durch.
Augenblickliches MEM /C lässt mich völlig ratlos zurück, der Andere Rechner hat «Maximale Größe für ausführbares Programm:» 611008. Ich habe 609344 - das hilft auch irgendwie nicht weiter. Der Andere hat zwar mehr upper Memory frei, aber das kanns nicht sein. Autoexec.NT und Config.NT enthalten die selben aktiven Befehle.

Jetzt gehen mir die Ideen vollständig aus.


2014-11-25 10-16-50
Nächster Rechner, RAM-schwächer - läuft. Was schießt da nur quer?
 
Zuletzt bearbeitet:
Zurück
Oben