X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=STEER%2FAliMemoryWatcher.cxx;h=63bb6e8cf6a53bda893dc2030b11f2794099769b;hb=8386cd34e0d4e7f268d6d586a1f62dcadad46d7a;hp=0ffdad0c61081e8215f30a7f9b74f04c83e102e4;hpb=d1898505ba697be964771051e18a8db4efe9beaf;p=u%2Fmrichter%2FAliRoot.git diff --git a/STEER/AliMemoryWatcher.cxx b/STEER/AliMemoryWatcher.cxx index 0ffdad0c610..63bb6e8cf6a 100644 --- a/STEER/AliMemoryWatcher.cxx +++ b/STEER/AliMemoryWatcher.cxx @@ -13,6 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ /* $Id$ */ + //_________________________________________________________________________ //Basic Memory Leak utility. // You can use this tiny class to *see* if your program is leaking. @@ -22,11 +23,11 @@ // if ( nevents % x == 0 ) // { // // take a sample every x events -// memwatcher.watch(nevents); +// memwatcher.Watch(nevents); // } // } // TFile f("out.root","RECREATE"); -// memwatcher.write(); +// memwatcher.Write(); // f.Close(); // In the output root file you'll get 3 graphs representing // the evolAliPHOSon, as a function of the number of events, of : @@ -42,49 +43,56 @@ // But by fitting the VSIZE by a pol1 under ROOT, you'll see right away // by how much your program is leaking. //*-- Author: Laurent Aphecetche(SUBATECH) + // --- std system --- -class assert ; +#include +#ifdef NEVER +#include +#endif // --- AliRoot header files --- +#include "AliLog.h" #include "AliMemoryWatcher.h" // --- ROOT system --- #include "TSystem.h" #include "TGraph.h" #include "TH2.h" #include "TStopwatch.h" +#include "TError.h" ClassImp(AliMemoryWatcher) //_____________________________________________________________________________ -AliMemoryWatcher::AliMemoryWatcher(UInt_t maxsize) +AliMemoryWatcher::AliMemoryWatcher(UInt_t maxsize) : + TObject(), + fMAXSIZE(maxsize), + fSize(0), + fX(new Int_t[fMAXSIZE]), + fVSIZE(new Int_t[fMAXSIZE]), + fRSSIZE(new Int_t[fMAXSIZE]), + fTIME(new Double_t[fMAXSIZE]), + fTimer(0), + fDisabled(kFALSE) { + // //ctor - fMAXSIZE=maxsize; - fPID = gSystem->GetPid(); - sprintf(fCmd,"ps -h -p %d -o vsize,rssize",fPID); - fX = new Int_t[fMAXSIZE]; - fVSIZE = new Int_t[fMAXSIZE]; - fRSSIZE = new Int_t[fMAXSIZE]; - fTIME = new Double_t[fMAXSIZE]; - fSize=0; - fDisabled=false; - fTimer=0; + // } + //_____________________________________________________________________________ AliMemoryWatcher::AliMemoryWatcher(const AliMemoryWatcher& mw): - TObject(mw) + TObject(mw), + fMAXSIZE(mw.fMAXSIZE), + fSize(0), + fX(new Int_t[fMAXSIZE]), + fVSIZE(new Int_t[fMAXSIZE]), + fRSSIZE(new Int_t[fMAXSIZE]), + fTIME(new Double_t[fMAXSIZE]), + fTimer(0), + fDisabled(kFALSE) { //copy ctor - fMAXSIZE = mw.fMAXSIZE ; - fPID = mw.fPID ; - strcpy(fCmd, mw.fCmd) ; - fX = new Int_t[fMAXSIZE]; - fVSIZE = new Int_t[fMAXSIZE]; - fRSSIZE = new Int_t[fMAXSIZE]; - fTIME = new Double_t[fMAXSIZE]; - fSize=0; - fDisabled=false; - fTimer=0; } + //_____________________________________________________________________________ AliMemoryWatcher::~AliMemoryWatcher() { @@ -98,19 +106,33 @@ AliMemoryWatcher::~AliMemoryWatcher() //_____________________________________________________________________________ void AliMemoryWatcher::Watch(Int_t x) { + static ProcInfo_t meminfo; +#ifdef NEVER + static Char_t cmd[1024]=""; +#endif // Sets the point where CPU parameters have to be monitored if ( !fDisabled && fSize < fMAXSIZE ) { if ( fSize==0 ) { - assert(fTimer==0); fTimer = new TStopwatch; fTimer->Start(true); fTimer->Stop(); +#ifdef NEVER + if(!cmd[0]) + sprintf(cmd,"ps -h -p %d -o vsz,rss | grep -v VSZ",gSystem->GetPid()); +#endif } - static Int_t vsize, rssize; - static FILE* pipe = 0; - pipe = popen(fCmd,"r"); + gSystem->GetProcInfo(&meminfo); + fX[fSize] = x ; + fVSIZE[fSize] = meminfo.fMemVirtual / 1024; + fRSSIZE[fSize] = meminfo.fMemResident / 1024; + fTIME[fSize] = fTimer->CpuTime(); + fSize++; +#ifdef NEVER + Int_t vsize, rssize; + FILE* pipe = 0; + pipe = popen(cmd,"r"); if ( pipe ) { - + fscanf(pipe,"%d %d",&vsize,&rssize); fX[fSize] = x ; @@ -119,12 +141,13 @@ void AliMemoryWatcher::Watch(Int_t x) fTIME[fSize] = fTimer->CpuTime(); fSize++; } - assert(pclose(pipe)!=-1); + Int_t iclose=pclose(pipe); + assert(iclose!=-1); +#endif fTimer->Start(true); - } - else { + } else { fDisabled=true; - Error("watch", "I'm full !" ) ; + AliError("I'm full !" ) ; } } //_____________________________________________________________________________ @@ -197,11 +220,12 @@ AliMemoryWatcher::Frame(void) const return h; } //_____________________________________________________________________________ -void -AliMemoryWatcher::Write(void) +Int_t +AliMemoryWatcher::WriteToFile() { // Stores the graphs in a file if ( GraphVSIZE() ) GraphVSIZE()->Write("VSIZE",TObject::kOverwrite); if ( GraphRSSIZE() ) GraphRSSIZE() ->Write("RSSIZE",TObject::kOverwrite); if ( GraphTIME() ) GraphTIME()->Write("TIME",TObject::kOverwrite); + return 0; }