September 9th, 2008

стена, я, в профиль

How to win memleaks in mod_aspdotnet @ apache2 on win32?

Cause


Read wiki on "memleaks" and it will say:
1) Change the program
2) Restart the program

1 isn`t our case, so we choose 2nd.

Solution


There is a solution — put to Task Scheduler this JS-script every 15 minutes:


var shell = new ActiveXObject('WScript.Shell');
var tasks = shell.Exec('tasklist /FI "IMAGENAME eq Apache.exe" /FI "MEMUSAGE gt 300000"');
if (!tasks.StdOut.AtEndOfStream) {
var message = "" + tasks.StdOut.ReadAll();
if (message.indexOf('Apache') > 0) {
shell.Exec('/Apache2/bin/Apache -k restart');
}
}


Concretics


Our concrete values are:

  • 15 minutes

  • 300000 KB ~ 300 MB of memory

  • restart command /Apache2/bin/Apache -k restart




Prospectives and common soultion



var args = WScript.Arguments;
var fileName = args(0);
var memoryLimit = args(1);
var restartAction = args(2);
var shell = new ActiveXObject('WScript.Shell');
var tasks = shell.Exec('tasklist /FI "IMAGENAME eq ' + fileName + '" /FI "MEMUSAGE gt ' + memoryLimit + '"');
if (!tasks.StdOut.AtEndOfStream) {
var message = "" + tasks.StdOut.ReadAll();
if (message.indexOf(fileName) > 0) {
shell.Exec(restartAction);
}
}