Schrift
[thread]9026[/thread]

Service Memory Leak unter Windows 2000: mit W32::DAEMON::SIMPLE, Perl2exe



<< >> 3 Einträge, 1 Seite
Gast Gast
 2007-05-22 17:52
#76849 #76849
Servus zusammen,
Ich Programmieren nun schon seit einigen Tagen an einem Windows Dienst der mittels WIN32:DAEMON::SIMPLE und einem perl2exe leuft. Ich habe diesen Dienst auf einem Windows 2003 Server laufen und das seit Wochen ohne probleme. nun wollte ich diesen Dienst unter Windows 2000 zum laufen bekommen. Leider wird mein Speicher nach jedem "Tick" des Dienstes etwas mehr ausgelastet... etwa 30kb was über den Tag verteilt dann doch schon eine nette summe ist.
Ich habe versucht alle definierten Variablen nach dem durchlauf mit einem
Code: (dl )
undef
wieder frei zu geben .. leider hat auch das nichts gebracht. Gibt es eine möglichkeit alle Variablen, Hashes und sonstige Arrays wieder freizugeben? oder muss ich den dienst einfach anders Initialisieren (beispiel wie ich es aktuell mache volgt):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use Win32;
use Win32::OLE;
use Win32::Console qw();
use Win32::Daemon;
my $dir = dirname(__FILE__);
$cfg = new Config::IniFiles(-file=>"$dir/config.ini");
use Win32::Daemon::Simple
Service => 'ProcMon',
Name => 'ProcMon',
Version => '2.0.9',
Info => {display =>  'ProcMon',
           description => 'ProcessMonitoring',
           user    =>  '',
pwd     =>  '',
           interactive => 0,},
Params => { # the default parameters
Tick => 0,
Talkative => 0,
Interval => 1, # minutes
LogFile => "logfile.log",
Description => "My Desc."
},
Param_modify => {
LogFile => sub {File::Spec->rel2abs($_[0])},
Interval => sub {

no warnings;
                           my $interval = 0+$_[0];
                           die "The interval must be a positive number!\n"
                           unless $interval > 0;
                           return $interval},
Tick => sub {return ($_[0] ? 1 : 0)},
               },
Run_params => {
               };

# initialization
ServiceLoop(\&LoopPC);
#//-->ServiceLoop(\&test);
# cleanup
$cfg->DESTROY();
undef $cfg;
Log("Going down");
exit;
GwenDragon
 2007-05-23 11:29
#76850 #76850
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Das Memoryleak kann auch durch die perl2exe, also beim Entpacken und Starten des Perl, erzeugt worden sein oder im Perl-Interpreter selbst stecken oder in irgendeinem einem Modul.
Schwierig zu sagen.\n\n

<!--EDIT|GwenDragon|1179905628-->
MC Firestorm
 2007-05-23 17:18
#76851 #76851
User since
2007-05-22
1 Artikel
BenutzerIn
[default_avatar]
Servus,
danke dir schonmal für die Antwort. Ich habe inzwischen schon mehrere sachen versucht um das Problem zu lokalisieren. Es hat den anschein als ob einign Hashes die von einem Objekt kommen, nicht richtig gelöscht werden. (nur unter windows 2000 unter XP und 2k3 Server funktioniert das.)

ist jemandem evtl etwas bekannt das man unter bestimmten umständen hashes oder objekte auf anderem wege löschen muss als das klasische undef?

mein ansatz war hierzu
Code: (dl )
1
2
3
# Function Cleanup
$localwmi->DESTROY;
undef $localwmi;


zunächst mein Objekt mit destroy zu löschen und es dann mit undef freizugeben. unter Windows 2000 werden mir aber immernoch elemente im hash gehalten... scheinbar
<< >> 3 Einträge, 1 Seite



View all threads created 2007-05-22 17:52.