bosannes Skrevet 31. juli 2008 Del Skrevet 31. juli 2008 (endret) Hei Har en del watchfolderscript kjørende på en server. Kort fortalt søker de gjennom en gitt mappe og flytter filer ut ifra filnavn. De fungerer veldig fint, men serveren har problemer med at alt minne spises opp uten at det er tilknyttet noen prosess i taskmngr. Det kjører også andre typer programmer og skript på denne serveren, men jeg har mistikanke om at det er slike som disse scriptene som skaper problemer. Hvordan kan jeg unngå minnelekasjer i disse? var fso = WScript.CreateObject("Scripting.FileSystemObject"); var fsob = WScript.CreateObject("Scripting.FileSystemObject"); WScript.echo("Hocus Focus inhouse script for sorting encoded media files into project folders"); WScript.echo("\n"); zerolead = function(tall) { if (tall < 10) { return "0" + tall; } else { return tall; } } while (1) { var filtype = "QT DV"; var extensionver ="mov"; var extensioncap ="MOV"; var arkivert = "E:\\Arkivert"; var fsosub = new Enumerator(fso.GetFolder(".").Files); var project; var projectdir; var projectdirexist; var strippedfilename; var datedfilename; var year; for (i=0;!fsosub.atEnd();fsosub.moveNext()) { if (fso.GetExtensionName(fsosub.item().name)==extensionver || fso.GetExtensionName(fsosub.item().name)==extensioncap) { WScript.echo('Found QT file: '+fsosub.item().name); project = fso.GetBaseName(fsosub.item().name).substr(0, 4); if (project > 1000 && project < 9999) { WScript.echo('File project: '+project); projectdirexist = 0; while (!projectdirexist) { var fsoarkivert = new Enumerator(fsob.GetFolder(arkivert).SubFolders); for (i=0;!fsoarkivert.atEnd();fsoarkivert.moveNext()) { projectdir = fsob.GetBaseName(fsoarkivert.item().name); if (projectdir.substr(0, 4)==project) { projectdirexist = 1; WScript.echo("Project folder: "+arkivert+"\\"+projectdir); if (!fso.FolderExists(arkivert+"\\"+projectdir+"\\"+filtype)) { WScript.echo("Creating "+filtype+" directory"); fso.CreateFolder(arkivert+"\\"+projectdir+"\\"+filtype); WScript.echo(filtype+" directory created successfully"); } else { WScript.echo("Found existing "+filtype+" directory"); } // Adding date and time to the filename strippedfilename = fsob.GetFileName(fsosub.item().name).substr(4); if (fsob.GetFileName(fsosub.item().name).substr(5,6) > 080000) { WScript.echo("File is already date stamped"); datedfilename = project+strippedfilename; } else { WScript.echo("File is not date stamped"); d = new Date(); year = d.getYear()+""; year = year.substr(2); datedfilename = project+"_"+year+zerolead(''+(d.getMonth() + 1))+zerolead(''+d.getDate())+"-"+zerolead(''+d.getHours())+zerolead(''+d.getMinutes())+strippedfilename; } if (!fso.FileExists(arkivert+"\\"+projectdir+"\\"+filtype+"\\"+datedfilename)) { WScript.echo("Moving "+fsosub.item().name+" to "+arkivert+"\\"+projectdir+"\\"+filtype+"\\"); fso.MoveFile(fsosub.item().name, arkivert+"\\"+projectdir+"\\"+filtype+"\\"+datedfilename); } else { WScript.echo("File already exists in destination. Skipping file."); } } } if (!projectdirexist) { WScript.echo("No folder found for project "+project); WScript.echo("Creating project directory"); fso.CreateFolder(arkivert+"\\"+project); WScript.echo("Project directory created successfully"); } } } else { WScript.echo('Could not determine file project'); } WScript.echo("\n"); } } WScript.sleep(30000); } Endret 31. juli 2008 av bosannes Lenke til kommentar
Giddion Skrevet 2. august 2008 Del Skrevet 2. august 2008 Jeg har ingen erfaring med kjøring av skript så lenge, men jeg ville tro at skript behandleren hadde en gc/rc som fiksta memleaks. Hvorfor tror du det er skriptene som lekker? Uansett skal alt minne deallokeres når programmet avslutter så du kan prøve ved å en etter en å se hva som skjer. PS: det er noe som heter resource leak som man ikke er helt sikra mot ved å avslutte programmet, men etter en kjapp kikke gjennom skriptet ser jeg ingen tegn til slike Jeg er ute på tynn is her så ta ting jeg sier med en klype salt, men jeg håper det hjelper. Lenke til kommentar
bosannes Skrevet 2. august 2008 Forfatter Del Skrevet 2. august 2008 Takk. Er ikke helt sikker på hva som lekker, men det er det jeg prøver å finne ut. Hva er det jeg bør se etter for "resource leaks"? Lenke til kommentar
Giddion Skrevet 2. august 2008 Del Skrevet 2. august 2008 Takk. Er ikke helt sikker på hva som lekker, men det er det jeg prøver å finne ut.Hva er det jeg bør se etter for "resource leaks"? Resource leak er åpne filer socketer og andre ting som ikke nødvendigvis blir avslutter hvis programmet ikke gjøre det. Hvordan du kan lete etter åpne filer vet jeg ikke, men til socket kan du jo bruke netstat Lenke til kommentar
bosannes Skrevet 2. august 2008 Forfatter Del Skrevet 2. august 2008 Eneste jeg bruker er vel File System Objects? Og der brukes vel bare de samme for hver runde. Eller? Lenke til kommentar
GeirGrusom Skrevet 5. august 2008 Del Skrevet 5. august 2008 Ofte har det vært vanlig å sett objekter spesifik lik null (Nothing i VBS) for å passe på at GC-en til Windows Scripting host skal ta hintet. Som giddion sier, så kan WScript fortsatt holde ressurser låst (som filer, sockets og databasekoblinger) selv om scriptet ditt er avsluttet. Om dette vil skape noen alvorlige hull vet jeg ikke, fordi jeg stort sett ikke bruker scripts lenger. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå