Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ep:laboratoare:05 [2017/01/07 02:23]
emilian.radoi [Monitorizare RAM]
ep:laboratoare:05 [2017/01/17 10:22] (current)
emilian.radoi [Resurse]
Line 3: Line 3:
 ===== Monitorizare RAM ===== ===== Monitorizare RAM =====
  
-Folosirea memoriei de catre un proces e un lucru dinamic. Astfel, la un moment dat e posibil sa fie un spike de alocare, dupa care sa revina la normal. Daca ne intereseaza un singur process cata memorie a avut alocata, probabil ca task manager ​e sufficient ca sa ne raspunda la intrebare, uitandu-ne in zona details la Peak Working Set.+Folosirea memoriei de catre un proces e un lucru dinamic. Astfel, la un moment dat e posibil sa fie un spike de alocare, dupa care sa revina la normal. Daca ne intereseaza un singur process cata memorie a avut alocata, probabil ca Task Manager ​e sufficient ca sa ne raspunda la intrebare, uitandu-ne in zona details la Peak Working Set.
  
  
-{{ :​ep:​laboratoare:​ep5_taskmanager-ram.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_taskmanager-ram.jpg?​700|}}
  
  
Line 14: Line 14:
  
  
-{{ :​ep:​laboratoare:​ep5_wpa-ram-rec.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wpa-ram-rec.jpg?​700|}}
  
  
Line 20: Line 20:
  
  
-{{ :​ep:​laboratoare:​ep5_wpa-ram-select.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wpa-ram-select.jpg?​700|}}
  
   ​   ​
Line 26: Line 26:
  
  
-{{ :​ep:​laboratoare:​ep5_wpa-ram-graphs.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wpa-ram-graphs.jpg?​700|}}
  
    
 Astfel vedem graficul cresterii foarte abrupte a folosirii memoriei procesului nostru, de unde tragem concluzia ca el ar putea fi generatorul de probleme, avand in vedere ca restul sunt destul de stabile. Astfel vedem graficul cresterii foarte abrupte a folosirii memoriei procesului nostru, de unde tragem concluzia ca el ar putea fi generatorul de probleme, avand in vedere ca restul sunt destul de stabile.
  
-Ok, am identificat procesul care ne face probleme, ce facem mai departe. Daca nu e scris de noi, verificam cine il lanseaza, vedem daca avem nevoie de el si daca nu, il dezactivam. Daca avem nevoie de el, verificam daca exista ​vre-un ​update al lui care sa fixeze problema. Daca nu gasim nici un update care sa fixeze problema, incercam sa raportam problema producatorului si sa speram ca o sa o fixeze.+Ok, am identificat procesul care ne face probleme, ce facem mai departe. Daca nu e scris de noi, verificam cine il lanseaza, vedem daca avem nevoie de el si daca nu, il dezactivam. Daca avem nevoie de el, verificam daca exista ​vreun update al lui care sa fixeze problema. Daca nu gasim nici un update care sa fixeze problema, incercam sa raportam problema producatorului si sa speram ca o sa o fixeze.
  
 Daca este procesul nostru, sa vedem ce putem face. Pentru identificarea memory leakurilor exista un tool foarte puternic care poate fi descarcat de pe: Daca este procesul nostru, sa vedem ce putem face. Pentru identificarea memory leakurilor exista un tool foarte puternic care poate fi descarcat de pe:
Line 37: Line 37:
 https://​vld.codeplex.com/​ https://​vld.codeplex.com/​
  
-Se instaleaza si prin includerea fisierului vld.h in crearea programelor se vor suprascrie functiile malloc, free, new, delete, astfel fiecare alocare si dezalocare va fi traceuita si daca o alocare nu este urmata de o dezalocare ni se va d a la sfarsitul programului un log cu toate leakurile detectate.+Se instaleaza si prin includerea fisierului vld.h in crearea programelor se vor suprascrie functiile malloc, free, new, delete, astfel fiecare alocare si dezalocare va fi traceuita si daca o alocare nu este urmata de o dezalocare ni se va da la sfarsitul programului un log cu toate leakurile detectate.
  
  
-{{ :​ep:​laboratoare:​ep5_visualstudio-vld.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_visualstudio-vld.jpg?​700|}}
  
   ​   ​
Line 52: Line 52:
  
  
-{{ :​ep:​laboratoare:​ep5_vmmap-configure.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_vmmap-configure.jpg?​700|}}
  
    
-Inainte de a porni toolul ne ducem in Options->​Configure Symbols si punem acolo calea catre pdb-urile specifice programului nostru si respective spre serverul de simboluri Microsoft, precum si calea catre sursele programului ​nostrum.+Inainte de a porni toolul ne ducem in Options->​Configure Symbols si punem acolo calea catre pdb-urile specifice programului nostru si respective spre serverul de simboluri Microsoft, precum si calea catre sursele programului ​nostru.
  
 Se porneste toolul, selectam tabul Launch and trace a new process, selectam procesul care ne intereseaza,​ spunem care sa fie directorul de unde sa ruleze si ii dam drumul sa ruleze. O data pornit toolul o sa vedem ceva de genul: Se porneste toolul, selectam tabul Launch and trace a new process, selectam procesul care ne intereseaza,​ spunem care sa fie directorul de unde sa ruleze si ii dam drumul sa ruleze. O data pornit toolul o sa vedem ceva de genul:
  
  
-{{ :​ep:​laboratoare:​ep5_vmmap-analyze.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_vmmap-analyze.jpg?​700|}}
  
    
Line 68: Line 68:
  
  
-Si in cazul CPU Usage avem oarecum probleme similare cu cele pentur ​memory usage. Daca vrem sa aflam consumul din acest moment de CPU al unui process, ne este de ajuns Task Manager:+Si in cazul CPU Usage avem oarecum probleme similare cu cele pentru ​memory usage. Daca vrem sa aflam consumul din acest moment de CPU al unui process, ne este de ajuns Task Manager:
  
  
-{{ :​ep:​laboratoare:​ep5_taskmanager-cpu.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_taskmanager-cpu.jpg?​700|}}
    
  
Line 77: Line 77:
  
  
-{{ :​ep:​laboratoare:​ep5_wpr-cpuusagestart.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wpr-cpuusagestart.jpg?​700|}}
  
    
Line 85: Line 85:
  
  
-{{ :​ep:​laboratoare:​ep5_wpr-cpuusageselect.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wpr-cpuusageselect.jpg?​700|}}
  
    
Line 91: Line 91:
  
  
-{{ :​ep:​laboratoare:​ep5_wpr-cpuusagegraphs.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wpr-cpuusagegraphs.jpg?​700|}}
  
    
 Din grafice se observa impactul de vreo 12% al programului nostru. Ok, am identificat problema, am vazut cine genera consumul de CPU – acum apare intrebarea cum debugam acest lucru? La fel ca si la memory, daca nu e un process scris de noi, vedem daca ne e util, daca nu ne asiguram ca nu mai ruleaza. Daca ne e util incercam sa gasim un update pentru el in speranta ca nu se mai reproduce problema. Daca nu gasim un astfel de update raportam problem ape forumurile producatorului in speranta ca se va fixa. Dar cum la evaluarea performantelor ne intereseaza sa analizam procesele scrise de noi, o sa presupunem ca acest process, cum se si intampla de altfel, e scris de noi, si e impotant sa gasim de unde a aparut problema. Din pacate, spre deosebire de cazurile discutate mai sus, lucrurile nu mai sunt la fel de simple, neexistand un tool care sa ne dea stiva unde se genereaza problema, de data aceasta va trebui sa ne cream noi acest tool. Din grafice se observa impactul de vreo 12% al programului nostru. Ok, am identificat problema, am vazut cine genera consumul de CPU – acum apare intrebarea cum debugam acest lucru? La fel ca si la memory, daca nu e un process scris de noi, vedem daca ne e util, daca nu ne asiguram ca nu mai ruleaza. Daca ne e util incercam sa gasim un update pentru el in speranta ca nu se mai reproduce problema. Daca nu gasim un astfel de update raportam problem ape forumurile producatorului in speranta ca se va fixa. Dar cum la evaluarea performantelor ne intereseaza sa analizam procesele scrise de noi, o sa presupunem ca acest process, cum se si intampla de altfel, e scris de noi, si e impotant sa gasim de unde a aparut problema. Din pacate, spre deosebire de cazurile discutate mai sus, lucrurile nu mai sunt la fel de simple, neexistand un tool care sa ne dea stiva unde se genereaza problema, de data aceasta va trebui sa ne cream noi acest tool.
  
-Va rog sa deschideti ​ EvenimenteProcMon. Scopul programului e de a ne integra mesajele noastre cu ProcessMonitor,​ ca sa le putem vedea pe masura ce se desfasoara procesul. O sa explic un pic programul, desi nu e musai necesar ​s ail intelegeti. Ca si QA puteti cere dezvoltatorului sa integreze el cu process monitor pentru a va ptuea permite sa investigate. Dar, consider totusi ca, ca si QA e totusi nececsar sa puteti intelege orice fel de cod – nu perfect, dar macar sa aveti idee cam ce se intampla, de aceea sper sa va fie cat mai clar codul explicat mai jos:+Va rog sa deschideti ​ EvenimenteProcMon. Scopul programului e de a ne integra mesajele noastre cu ProcessMonitor,​ ca sa le putem vedea pe masura ce se desfasoara procesul. O sa explic un pic programul, desi nu e musai necesar ​sa il intelegeti. Ca si QA puteti cere dezvoltatorului sa integreze el cu process monitor pentru a va putea permite sa investigati. Dar, consider totusi ca, ca si QA e totusi nececsar sa puteti intelege orice fel de cod – nu perfect, dar macar sa aveti idee cam ce se intampla, de aceea sper sa va fie cat mai clar codul explicat mai jos:
  
 Deci, am creat o clasa ProcessMonitor,​ care are 5 functii: Deci, am creat o clasa ProcessMonitor,​ care are 5 functii:
Line 118: Line 118:
 Mai jos in cod vedeti ca am declarant global: Mai jos in cod vedeti ca am declarant global:
  
 +<​code>​
 MyProcMon __procMon; MyProcMon __procMon;
 +</​code>​
  
 Aceasta inseamna ca la pornirea procesului, inainte de executia functiei main cand se initializeaza variabilele globale, va fi construit obiectul clasei noastre si implicit deschiderea handelului peste interfata de mesaje din ProcessMonitor. Inchiderea handeului facandu-se cand se distruge obiectul, adica dupa executia programului. Aceasta inseamna ca la pornirea procesului, inainte de executia functiei main cand se initializeaza variabilele globale, va fi construit obiectul clasei noastre si implicit deschiderea handelului peste interfata de mesaje din ProcessMonitor. Inchiderea handeului facandu-se cand se distruge obiectul, adica dupa executia programului.
Line 124: Line 126:
 Pe langa clasa de mai sus, am mai declarat o clasa – ProcMonLogFunc,​ al carui scop este sa afiseze cat mai simplu cand intra intr-o functie si cand iese. Pentru aceasta am definit macroul: Pe langa clasa de mai sus, am mai declarat o clasa – ProcMonLogFunc,​ al carui scop este sa afiseze cat mai simplu cand intra intr-o functie si cand iese. Pentru aceasta am definit macroul:
  
-#define DBGTRACE_FN_() ProcMonLogFunc __my_log__(__FUNCTIONW__) care declara un obiect de tip ProcMonLogFunc caruia ii da ca parametru numele functiei curente. Astfel, pus macroul la inceputul unei functii el va afisa la inceputul functiei numele functiei si la iesire, cand se distruge obiectul declarant, va afisa faptul ca iese din functie.+<​code>​#define DBGTRACE_FN_() ProcMonLogFunc __my_log__(__FUNCTIONW__)</​code> ​care declara un obiect de tip ProcMonLogFunc caruia ii da ca parametru numele functiei curente. Astfel, pus macroul la inceputul unei functii el va afisa la inceputul functiei numele functiei si la iesire, cand se distruge obiectul declarant, va afisa faptul ca iese din functie.
  
 Ok, inarmati cu toate acestea sa pornim ProcessMonitor,​ sa schimbam filtru in care sa punem ProcessName contains EvenimenteProcMon. Selectam butonul de Profiling ca in figura de mai jos: Ok, inarmati cu toate acestea sa pornim ProcessMonitor,​ sa schimbam filtru in care sa punem ProcessName contains EvenimenteProcMon. Selectam butonul de Profiling ca in figura de mai jos:
  
  
-{{ :​ep:​laboratoare:​ep5_butonprofiling.png?​600|}}+{{ :​ep:​laboratoare:​ep5_butonprofiling.png?​700|}}
  
    
Line 135: Line 137:
  
  
-{{ :​ep:​laboratoare:​ep5_procmon-profiling.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_procmon-profiling.jpg?​700|}}
  
    
Line 169: Line 171:
  
  
-{{ :​ep:​laboratoare:​ep5_taskmanagernetworking.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_taskmanagernetworking.jpg?​700|}}
  
    
Line 175: Line 177:
  
  
-{{ :​ep:​laboratoare:​ep5_wpr-cpustart.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wpr-cpustart.jpg?​700|}}
    
  
Line 185: Line 187:
  
  
-{{ :​ep:​laboratoare:​ep5_netmon.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_netmon.jpg?​700|}}
  
    
Line 199: Line 201:
  
  
-{{ :​ep:​laboratoare:​ep5_wireshark-start.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wireshark-start.jpg?​700|}}
  
    
Line 205: Line 207:
  
  
-{{ :​ep:​laboratoare:​ep5_wireshark-captura.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wireshark-captura.jpg?​700|}}
  
    
Line 211: Line 213:
  
  
-{{ :​ep:​laboratoare:​ep5_findip.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_findip.jpg?​700|}}
  
    
Line 217: Line 219:
  
  
-{{ :​ep:​laboratoare:​ep5_wireshark-captura2.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wireshark-captura2.jpg?​700|}}
  
  
Line 223: Line 225:
  
  
-{{ :​ep:​laboratoare:​ep5_wireshark-rawdata.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wireshark-rawdata.jpg?​700|}}
  
    
Line 229: Line 231:
  
  
-{{ :​ep:​laboratoare:​ep5_wireshark-extractdata.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wireshark-extractdata.jpg?​700|}}
  
    
Line 235: Line 237:
  
  
-{{ :​ep:​laboratoare:​ep5_wireshark-extractdata-result.jpg?​600|}}+{{ :​ep:​laboratoare:​ep5_wireshark-extractdata-result.jpg?​700|}}
  
    
Line 241: Line 243:
  
 In concluzie am vazut cum putem monitoriza ce se intampla pe retea si cum putem vedea efectiv traficul. In concluzie am vazut cum putem monitoriza ce se intampla pe retea si cum putem vedea efectiv traficul.
 +
 +====== Resurse ======
 +
 +{{:​ep:​laboratoare:​logs2.zip|}}
 +
 +Parola arhiva resurse (log2.zip): parola
 +
 +
 +Masina virtuala:
 +
 +<​code>​
 +mkdir /​home/​student/​windows
 +sudo mount -orw /​dev/​sda2 ​ /​home/​student/​windows
 +</​code>​
 +
 +Parola VM: !@#4QWEr
 +
 +
  
  
ep/laboratoare/05.1483748597.txt.gz · Last modified: 2017/01/07 02:23 by emilian.radoi
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0